aboutsummaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
Diffstat (limited to 'api')
-rw-r--r--api/config.js3
-rwxr-xr-xapi/index.js2
-rw-r--r--api/routes/getAKNSKey/index.js78
3 files changed, 82 insertions, 1 deletions
diff --git a/api/config.js b/api/config.js
index 3fe7c0d..82f90b8 100644
--- a/api/config.js
+++ b/api/config.js
@@ -25,6 +25,7 @@ const config = {
chunksDir: env.AK_CHUNKSDIR,
leafsDir: env.AK_LEAFSDIR,
mapsDir: env.AK_MAPSDIR,
- printDebug: env.AK_DEBUG
+ printDebug: env.AK_DEBUG,
+ akNSDir: `${env.AK_WORKDIR}/akns`
}
module.exports = config;
diff --git a/api/index.js b/api/index.js
index f2ca713..e9c2eb0 100755
--- a/api/index.js
+++ b/api/index.js
@@ -1,6 +1,7 @@
const http = require("node:http");
const welcomeMessage = require("./routes/default/index.js");
+const getAKNSKey = require("./routes/getAKNSKey/index.js");
const getNodeInfo = require('./routes/getNodeInfo/index.js');
const getPeers = require('./routes/getPeers/index.js');
const getIPFSHash = require('./routes/getIPFSHash/index.js');
@@ -68,6 +69,7 @@ function getRoutes(req, res)
case 'map': getMap(req, res); break;
case 'remote_node_info': getRemoteNodeInfo(req, res); break;
case 'remote_peers': getRemotePeers(req, res); break;
+ case 'ns_get': getAKNSKey(req, res); break;
default: notImplemented(req, res);
}
}
diff --git a/api/routes/getAKNSKey/index.js b/api/routes/getAKNSKey/index.js
new file mode 100644
index 0000000..c5adff0
--- /dev/null
+++ b/api/routes/getAKNSKey/index.js
@@ -0,0 +1,78 @@
+const { spawn } = require('child_process');
+const fs = require('fs');
+const config = require("../../config.js");
+
+/*
+ * Gets the local latest zblock AKA zlatest
+ *
+ * Returns:
+ * - JSON object
+ * { zlatest: "Qm..." }
+ *
+ */
+function replyIfOkay(key, res)
+{
+ const program = "ak-ns";
+ const command = spawn(program, ["-rk", key]);
+ var buffer = "";
+ command.stdout.on("data", data => {
+ buffer += data;
+ });
+ command.stderr.on("data", data => {
+ console.log(`stderr: ${data}`);
+ });
+ command.on('error', (error) => {
+ console.log(`error: ${error.message}`);
+ });
+ command.on("close", code => {
+ console.log(`child process ${program} exited with code ${code}`);
+ if (code === 0){
+ buffer = buffer.trim()
+ res.writeHead(200, {'Content-Type': 'application/json'});
+ res.end(JSON.stringify({
+ key:`${key}`,
+ resolved:`${buffer}`
+ }));
+ } else {
+ res.writeHead(404, {'Content-Type': 'application/json'});
+ res.end({"error":"unreachable"});
+ }
+ });
+}
+
+function getAKNSKey(req, res)
+{
+ var args = req.url.split("/");
+ var key = args[3];
+ regex= /[a-fA-F0-9]{40}/
+ if (regex.test(key))
+ {
+ key = key.toUpperCase();
+ var path = config.akNSDir+"/"+key;
+ try
+ {
+ if(fs.existsSync(path))
+ {
+ replyIfOkay(key, res)
+ }
+ else
+ {
+ res.writeHead(404, {'Content-Type': 'application/json'});
+ res.end(JSON.stringify({"error":"not found"}));
+ }
+ }
+ catch (error)
+ {
+ res.writeHead(404, {'Content-Type': 'application/json'});
+ res.end(JSON.stringify({"error":error.message}));
+ }
+ }
+ else
+ {
+ res.writeHead(404, {'Content-Type': 'application/json'});
+ res.end(JSON.stringify({error:"No hash"}));
+ }
+}
+
+module.exports = getAKNSKey;
+