aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/routes/getMrk/index.js61
-rw-r--r--api/routes/getTr/index.js61
-rw-r--r--api/routes/index.js6
3 files changed, 128 insertions, 0 deletions
diff --git a/api/routes/getMrk/index.js b/api/routes/getMrk/index.js
new file mode 100644
index 0000000..7e48e1d
--- /dev/null
+++ b/api/routes/getMrk/index.js
@@ -0,0 +1,61 @@
+const { spawn } = require('child_process');
+const fs = require("fs");
+const config = require("../../config");
+
+/*
+ * Gets a local merkle leaf
+ *
+ * Returns:
+ * the merkle leaf
+ *
+ */
+function fetchFmrk(mrk, res){
+ const command = spawn("cat",[config.workDir+"/fmrk/"+mrk]);
+ command.stdout.on("data", 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 exited with code ${code}`);
+
+ if ( code === 0 ) {
+ const path = config.workDir+"/fmrk/"+mrk;
+ console.log(path)
+ try {
+ if(fs.existsSync(path)){
+ res.send(fs.readFileSync(path));
+ }
+ } catch (error) {
+ res.send({"error":error.message});
+ }
+ } else if ( code === 2){
+ res.send({"error":"The roof is on fire"});
+ } else {
+ res.send({"error":"invalid or unreachable"});
+ }
+ });
+};
+module.exports = (req, res) => {
+ console.log(req.params)
+ if ( (req.params.mrk) && req.params.mrk.length === 128 ){
+ regex= /[a-f0-9]{128}/;
+ if (regex.test(req.params.mrk)){
+ if (req.params.mrk === "QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH" ){
+ res.send({error:"Genesis block"});
+ } else {
+ fetchFmrk(req.params.mrk,res);
+ }
+ } else {
+ res.send({error:"Invalid data: regexp failed to pass"});
+ }
+ } else {
+ res.send({error:"Invalid data: no valid zblock was provided"});
+ }
+}
diff --git a/api/routes/getTr/index.js b/api/routes/getTr/index.js
new file mode 100644
index 0000000..c3c058f
--- /dev/null
+++ b/api/routes/getTr/index.js
@@ -0,0 +1,61 @@
+const { spawn } = require('child_process');
+const fs = require("fs");
+const config = require("../../config");
+
+/*
+ * Gets a file chunk
+ *
+ * Returns:
+ * the chunk
+ *
+ */
+function fetchFtr(tr, res){
+ const command = spawn("cat",[config.workDir+"/ftr/"+tr]);
+ command.stdout.on("data", 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 exited with code ${code}`);
+
+ if ( code === 0 ) {
+ const path = config.workDir+"/ftr/"+tr;
+ console.log(path)
+ try {
+ if(fs.existsSync(path)){
+ res.send(fs.readFileSync(path));
+ }
+ } catch (error) {
+ res.send({"error":error.message});
+ }
+ } else if ( code === 2){
+ res.send({"error":"The roof is on fire"});
+ } else {
+ res.send({"error":"invalid or unreachable"});
+ }
+ });
+};
+module.exports = (req, res) => {
+ console.log(req.params)
+ if ( (req.params.tr) && req.params.tr.length === 128 ){
+ regex= /[a-f0-9]{128}/;
+ if (regex.test(req.params.tr)){
+ if (req.params.tr === "QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH" ){
+ res.send({error:"Genesis block"});
+ } else {
+ fetchFtr(req.params.tr,res);
+ }
+ } else {
+ res.send({error:"Invalid data: regexp failed to pass"});
+ }
+ } else {
+ res.send({error:"Invalid data: no valid zblock was provided"});
+ }
+}
diff --git a/api/routes/index.js b/api/routes/index.js
index e697be7..3a2e413 100644
--- a/api/routes/index.js
+++ b/api/routes/index.js
@@ -11,6 +11,8 @@ const getZChain = require('./getZChain');
const receiveZBlock = require('./receiveZBlock');
const receiveZChain = require('./receiveZChain');
const getZblock = require('./getZblock');
+const getMrk = require('./getMrk');
+const getTr = require('./getTr');
const getAkid = require('./getAkid');
const getInnerIPFSContent = require('./getInnerIPFSContent');
const corsOptions = {
@@ -43,6 +45,10 @@ router.route(settings.URL_PREFIX+'/akid').get(getAkid);
router.route(settings.URL_PREFIX+'/content').get(getInnerIPFSContent);
// Returns zblock
router.route(settings.URL_PREFIX+'/zblock/:zblock').get(getZblock);
+// Returns a mrk
+router.route(settings.URL_PREFIX+'/mrk/:mrk').get(getMrk);
+// Returns a tr
+router.route(settings.URL_PREFIX+'/tr/:tr').get(getTr);
// Send a block to the node (zchain block)
router.route(settings.URL_PREFIX+'/sblk').post(receiveZBlock);
// Send a zchain link to the node (refering to a valid zchain out there)