76 lines
1.6 KiB
JavaScript
76 lines
1.6 KiB
JavaScript
const crypt = require("../crypt");
|
|
|
|
function parseRq (bytes) {
|
|
try {
|
|
return JSON.parse(bytes.toString());
|
|
} catch (e) {
|
|
return undefined;
|
|
}
|
|
}
|
|
|
|
class APIMethods {
|
|
constructor (parent) {
|
|
this.parent = parent;
|
|
}
|
|
|
|
info (_, ___, __, cb) {
|
|
cb({ result: require("./server-info") });
|
|
}
|
|
|
|
/*setSession (isEncrypted, address, { key, counter }, cb) {
|
|
if (!global.config.server.secureMode)
|
|
return cb({ error: "Encryption is off by configuration file into server" });
|
|
if (!isEncrypted)
|
|
return cb({ error: "Encryption required" });
|
|
try {
|
|
this.parent.sessions[address] = new crypt.AES(key, counter);
|
|
return cb({ result: "Session key installed" });
|
|
} catch (err) {
|
|
return cb({ error: "Invalid params. Must be key and counter" });
|
|
}
|
|
}*/
|
|
}
|
|
|
|
class API {
|
|
constructor () {
|
|
this.methods = new APIMethods(this);
|
|
this.sessions = {};
|
|
}
|
|
|
|
decrypt (address, bytes) {
|
|
try {
|
|
if (!global.config.server.secureMode)
|
|
// return Buffer.from([]);
|
|
return undefined;
|
|
if (!this.sessions[address])
|
|
return global.openSSH.decrypt(bytes);
|
|
else
|
|
this.sessions[address].decrypt(bytes);
|
|
} catch (err) {
|
|
return undefined;
|
|
}
|
|
}
|
|
|
|
async exec (address, bytes, cb) {
|
|
const request = parseRq(bytes);
|
|
|
|
if (request === undefined)
|
|
return cb({
|
|
error: "required JSON object request"
|
|
});
|
|
|
|
if (typeof request === "object" && request !== null) {
|
|
const {
|
|
method
|
|
} = request;
|
|
this.methods[method]?.(false, address, request, cb);
|
|
} else {
|
|
return cb({
|
|
error: "required JSON-object based request"
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = { API };
|