aboutsummaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
authorkaotisk <kaotisk@arching-kaos.org>2023-04-10 15:49:11 +0300
committerkaotisk <kaotisk@arching-kaos.org>2023-04-10 15:49:11 +0300
commit02451920cffb8314656b42bb6f7dc9c8e97f366e (patch)
tree77eafb12b592b6e48282b6405712e6e132727c44 /api
parent5cafa276f4a243740113c5c813fab04918fa5c96 (diff)
downloadarching-kaos-tools-02451920cffb8314656b42bb6f7dc9c8e97f366e.tar.gz
arching-kaos-tools-02451920cffb8314656b42bb6f7dc9c8e97f366e.tar.bz2
arching-kaos-tools-02451920cffb8314656b42bb6f7dc9c8e97f366e.zip
New API route to fetch content from IPFS hashes that is cached in the filesystem
Diffstat (limited to 'api')
-rw-r--r--api/routes/getInnerIPFSContent/index.js32
-rw-r--r--api/routes/index.js3
2 files changed, 35 insertions, 0 deletions
diff --git a/api/routes/getInnerIPFSContent/index.js b/api/routes/getInnerIPFSContent/index.js
new file mode 100644
index 0000000..555d2a3
--- /dev/null
+++ b/api/routes/getInnerIPFSContent/index.js
@@ -0,0 +1,32 @@
+const { spawn } = require('child_process');
+const fs = require("fs");
+const config = require("../../config");
+
+/*
+ * Gets the local latest zblock
+ *
+ * Returns:
+ * - JSON object
+ * { zlatest: "Qm..." }
+ *
+ */
+function fetchZblock(zblock, res){
+ res.send(fs.readFileSync(config.workDir+"/ipfs/"+zblock));
+};
+module.exports = (req, res) => {
+ console.log(req.query)
+ if ( (req.query.ipfs) && req.query.ipfs.length === 46 ){
+ regex= /Qm[A-Za-z0-9]{44}/;
+ if (regex.test(req.query.ipfs)){
+ if (req.query.ipfs === "QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH" ){
+ res.send({errno:"Genesis block"});
+ } else {
+ fetchZblock(req.query.ipfs,res);
+ }
+ } else {
+ res.send({errno:"Invalid data: regexp failed to pass"});
+ }
+ } else {
+ res.send({errno:"Invalid data: no valid zblock was provided"});
+ }
+}
diff --git a/api/routes/index.js b/api/routes/index.js
index 5842757..2b649e9 100644
--- a/api/routes/index.js
+++ b/api/routes/index.js
@@ -11,6 +11,7 @@ const getZChain = require('./getZChain');
const receiveZBlock = require('./receiveZBlock');
const receiveZChain = require('./receiveZChain');
const getZblock = require('./getZblock');
+const getInnerIPFSContent = require('./getInnerIPFSContent');
const corsOptions = {
origin: '*',
optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
@@ -35,6 +36,8 @@ router.route(settings.URL_PREFIX+'/sblock').get(getSBlock);
router.route(settings.URL_PREFIX+'/zchain').get(getZChain);
// Returns latest zblock from node's local chain
router.route(settings.URL_PREFIX+'/zlatest').get(getZLatest);
+// Returns content
+router.route(settings.URL_PREFIX+'/content').get(getInnerIPFSContent);
// Returns zblock
router.route(settings.URL_PREFIX+'/zblock').get(getZblock);
// Send a block to the node (zchain block)