aboutsummaryrefslogtreecommitdiff
path: root/api/validators/ZblockValidator/index.js
blob: e3656d6dd8ddedb6ea0b3d2533af08466e7d2f42 (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
/*
 * To verify a block we simply put it on `enter`. `enter` will crawl
 * the zchain that is connected to the zblock we got. If it fails for
 * any reason we can check `logfollow` for that.
 */

const { spawn } = require("child_process");
const fs = require("fs");
const config = require("../../config.js");
console.log(config);

/*
 * Adds a latest given zblock to a file.
 *
 * Returns:
 *     - error if error
 *     - success:
 *         - adds the entry to the file
 *         - returns the whole file to the client
 *
 */
function addEntriesToFile(entry,res){
    var data = JSON.parse(fs.readFileSync(config.blocksFile));

    var duplicate_entry = 0;
    data.forEach(a=>{
        if ( a.zblock === entry.zblock ){
            duplicate_entry = 1;
            res.send({error:"already there"});
        }
    });

    if ( duplicate_entry === 0 ) {
        var all = [entry];
        for (var i = 0; i < data.length; i++){
            all[i+1] = data[i];
        }
        var json = JSON.stringify(all);
        fs.writeFile(config.blocksFile, json, 'utf8', finished);
        function finished(err) {
            console.log('finished writing file');
        }
        res.send(json);
    }
}
/*
 * After validation went through we examine the return code
 * of the application that run the test.
 *
 * Returns :
 *     - error on failure
 *     - on success we process with addEntriesToFile()
 *
 */
function continuethings(exitcode,sh,res){
    if (exitcode === 0){
        var entry = {zblock:sh};
        addEntriesToFile(entry,res);
    } else {
        res.send({error:"Invalid data"});
    }
}
/*
 * We send the data tested and the exit code to continuethings()
 *
 */
module.exports = (ch, res) => {
    const command = spawn("ak",["zchain", "--crawl", ch]);
    response_string = "";
    command.stdout.on("data", data => {
        response_string = response_string + data;
        console.log(`${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}`);
        continuethings(code,ch,res);
    });
};