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);