/ api / index.js
index.js
  1  const http = require("node:http");
  2  
  3  // Route functions
  4  const welcomeMessage = require("./routes/default/index.js");
  5  const getAKNSKey = require("./routes/getAKNSKey/index.js");
  6  const getAKNSKeyFromBase = require("./routes/getAKNSKeyFromBase/index.js");
  7  const getNodeInfo = require('./routes/getNodeInfo/index.js');
  8  const getPeers = require('./routes/getPeers/index.js');
  9  const getIPFSHash = require('./routes/getIPFSHash/index.js');
 10  const getZlatest = require('./routes/getZLatest/index.js');
 11  const getSblock = require('./routes/getSBlock/index.js');
 12  const getChunk = require('./routes/getChunk/index.js');
 13  const getLeaf = require('./routes/getLeaf/index.js');
 14  const getMap = require('./routes/getMap/index.js');
 15  const getSlatest = require('./routes/getSLatest/index.js');
 16  const getRemoteNodeInfo = require('./routes/getRemoteNodeInfo/index.js');
 17  const getRemotePeers = require('./routes/getRemotePeers/index.js');
 18  
 19  // Libraries
 20  const akLogMessage = require('./lib/akLogMessage');
 21  const checkIfAllowedIP = require('./lib/checkIfAllowedIP/index.js');
 22  const storeIncomingIP = require("./lib/storeIncomingIP/index.js");
 23  akLogMessage('INFO', 'akLogMessage loaded');
 24  
 25  const serverOptions = { keepAliveTimeout: 60000 };
 26  
 27  function printRequest(req)
 28  {
 29      storeIncomingIP(req.connection.remoteAddress);
 30      console.log(req.connection.remoteAddress);
 31      console.log(req.headers.host);
 32      console.log(req.headers);
 33      console.log(req.method, req.url);
 34      console.log('HTTP/' + req.httpVersion);
 35  }
 36  
 37  function respondError(res, errorMessage)
 38  {
 39      res.writeHead(404, { 'Content-Type': 'application/json'});
 40      res.end(JSON.stringify({
 41          error: errorMessage
 42      }));
 43  }
 44  
 45  function testRootRoute(req, res)
 46  {
 47      notImplemented(req, res);
 48  }
 49  
 50  function testRoute(req, res)
 51  {
 52      respondError(res, "Mpla mpla");
 53  }
 54  
 55  function getRoutes(req, res)
 56  {
 57      var args = req.url.split('/');
 58      if (args[1] === 'v0' && args.length > 2 && args[2] !== ""){
 59          switch(args[2])
 60          {
 61              case 'test': testRoute(req, res); break;
 62              case 'root': testRootRoute(req, res); break;
 63              case 'peers': getPeers(req, res); break;
 64              case 'node_info': getNodeInfo(req, res); break;
 65              case 'ipfs_hash': getIPFSHash(req, res); break;
 66              case 'ipfs': getIPFSHash(req, res); break;
 67              case 'zlatest': getZlatest(req, res); break;
 68              case 'sblock': getSblock(req, res); break;
 69              case 'slatest': getSlatest(req, res); break;
 70              case 'chunk': getChunk(req, res); break;
 71              case 'leaf': getLeaf(req, res); break;
 72              case 'map': getMap(req, res); break;
 73              case 'remote_node_info': getRemoteNodeInfo(req, res); break;
 74              case 'remote_peers': getRemotePeers(req, res); break;
 75              case 'ns_get': getAKNSKey(req, res); break;
 76              case 'ns_get_base': getAKNSKeyFromBase(req, res); break;
 77              default: notImplemented(req, res);
 78          }
 79      }
 80      else {
 81          welcomeMessage(req, res);
 82      }
 83  }
 84  
 85  function postRoutes(req, res)
 86  {
 87      switch(req.url)
 88      {
 89          default: notImplemented(req, res);
 90      }
 91  }
 92  
 93  function notImplemented(req, res)
 94  {
 95      res.writeHead(404, { 'Content-Type': 'application/json'});
 96      res.end(JSON.stringify({
 97          url: req.url,
 98          error: 'not implemented'
 99      }));
100  }
101  
102  function processMethod(req, res)
103  {
104      switch(req.method)
105      {
106          case 'GET': getRoutes(req, res); break;
107          case 'POST': postRoutes(req, res); break;
108          default: notImplemented(req, res);
109      }
110  }
111  
112  function requestParser(req, res)
113  {
114      printRequest(req);
115      akLogMessage('INFO', `Incoming from [${req.connection.remoteAddress}]:${req.socket._peername.port} @ ${req.headers.host}${req.url}`);
116      if (checkIfAllowedIP(req.connection.remoteAddress)){
117          res.setHeader('Access-Control-Allow-Origin', '*');
118          processMethod(req, res);
119      }
120      else {
121          res.end();
122      }
123  }
124  
125  const server = http.createServer(serverOptions, requestParser);
126  
127  server.listen(8610);