aboutsummaryrefslogtreecommitdiff
path: root/api/routes/getAKNSKeyFromBase/index.js
blob: 8e6d57ab24c9e5558de9b075b5470457b1a15d93 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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 decodeBase64ToHex(base64String) {
    // Decode the Base64 string
    const binaryString = atob(base64String);

    // Convert the binary string to a byte array
    const byteArray = new Uint8Array(binaryString.length);
    for (let i = 0; i < binaryString.length; i++) {
        byteArray[i] = binaryString.charCodeAt(i);
    }

    // Convert the byte array to a hex string representation
    return Array.from(byteArray)
        .map(byte => byte.toString(16).padStart(2, '0')) // Convert to hex and pad with zeros
        .join(''); // Join with spaces for readability
}

// Example usage


function replyIfOkay(key, res)
{
    const program = "ak-ns";
    const base64String = key;
    const decodedHexString = decodeBase64ToHex(base64String);
    formatted_key = decodedHexString.toUpperCase();
    const command = spawn(program, ["-rk", `${formatted_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:`${formatted_key}`,
                resolved:`${buffer}`
            }));
        } else {
            res.writeHead(404, {'Content-Type': 'application/json'});
            res.end(JSON.stringify({error:"unreachable"}));
        }
    });
}

function getAKNSKeyFromBase(req, res)
{
    var args = req.url.split("/");
    var key = args[3];
    regex= /[a-zA-Z0-9+\/=]{29}/
    const base64Regex = /^[A-Z0-9+\/=]/i;
    if (base64Regex.test(key))
    {
    // key = key.toUpperCase();
    //   var path = config.akNSDir+"/"+key;
        try
        {
            replyIfOkay(key, res)
        }
        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 = getAKNSKeyFromBase;