added: pgp in cli tool
This commit is contained in:
parent
efddca0483
commit
bb1730f2b2
|
@ -1,6 +1,7 @@
|
|||
const axios = require("axios");
|
||||
const readline = require("readline");
|
||||
const fs = require("fs");
|
||||
const openpgp = require("openpgp");
|
||||
var cp = require("child_process");
|
||||
|
||||
var rl = readline.createInterface({
|
||||
|
@ -9,10 +10,34 @@ var rl = readline.createInterface({
|
|||
});
|
||||
|
||||
var settings = JSON.parse(fs.readFileSync("settings.json", { encoding: "utf8", flag: "r" }));
|
||||
var pgpkey = fs.readFileSync("key.acs", { encoding: "utf8", flag: "r" });
|
||||
var filter = process.argv.length > 2 ? process.argv[2] : "";
|
||||
var intervalid = null;
|
||||
var notes = null;
|
||||
|
||||
async function decrypt(str)
|
||||
{
|
||||
var key = pgpkey.split("-----END PGP PUBLIC KEY BLOCK-----")[1];
|
||||
var privateKey = await openpgp.readKey({ armoredKey: key });
|
||||
var decrypted = await openpgp.decrypt({
|
||||
message: await openpgp.readMessage({ armoredMessage: str }),
|
||||
decryptionKeys: privateKey });
|
||||
const chunks = [];
|
||||
for await (const chunk of decrypted.data) {
|
||||
chunks.push(chunk);
|
||||
}
|
||||
return chunks.join('');
|
||||
}
|
||||
|
||||
async function encrypt(str)
|
||||
{
|
||||
var key = pgpkey.split("-----BEGIN PGP PRIVATE KEY BLOCK-----")[0];
|
||||
var publicKey = await openpgp.readKey({ armoredKey: key });
|
||||
return await openpgp.encrypt({
|
||||
message: await openpgp.createMessage({ text: str }),
|
||||
encryptionKeys: publicKey });
|
||||
}
|
||||
|
||||
function filteredlist()
|
||||
{
|
||||
return notes
|
||||
|
@ -30,9 +55,9 @@ axios.post(`${settings.url}/handler.php`,
|
|||
"Content-type": "application/x-www-form-urlencoded"
|
||||
}
|
||||
})
|
||||
.then(res =>
|
||||
.then(async function(res)
|
||||
{
|
||||
notes = res.data;
|
||||
notes = JSON.parse(await decrypt(res.data));
|
||||
|
||||
filteredlist()
|
||||
.every( (note, i) =>
|
||||
|
@ -43,14 +68,14 @@ axios.post(`${settings.url}/handler.php`,
|
|||
|
||||
// todo: open if only one match. quit if no match
|
||||
rl.prompt();
|
||||
rl.on("line", (line) =>
|
||||
rl.on("line", async function (line)
|
||||
{
|
||||
var note = filteredlist()[line];
|
||||
|
||||
// todo: use title instead? To put in data folder?
|
||||
fs.writeFileSync("note.md", note.content);
|
||||
|
||||
cp.exec(`${settings.command} note.md`, function (err, stdout, stderr)
|
||||
cp.exec(`${settings.command} note.md`, async function (err, stdout, stderr)
|
||||
{
|
||||
clearInterval(intervalid);
|
||||
var newcontent = fs.readFileSync("note.md", { encoding: "utf8", flag: "r" });
|
||||
|
@ -62,11 +87,12 @@ axios.post(`${settings.url}/handler.php`,
|
|||
notes.unshift(note);
|
||||
|
||||
console.log("sending data file to server...");
|
||||
var encrypted = await encrypt(JSON.stringify(notes));
|
||||
axios.post(`${settings.url}/handler.php`,
|
||||
{
|
||||
action: "push",
|
||||
password: settings.password,
|
||||
data: JSON.stringify(notes)
|
||||
data: encrypted
|
||||
},
|
||||
{
|
||||
headers:
|
||||
|
@ -83,7 +109,7 @@ axios.post(`${settings.url}/handler.php`,
|
|||
}
|
||||
})
|
||||
|
||||
intervalid = setInterval(function()
|
||||
intervalid = setInterval(async function()
|
||||
{
|
||||
//todo: refactor "save"
|
||||
var newcontent = fs.readFileSync("note.md", { encoding: "utf8", flag: "r" });
|
||||
|
@ -95,11 +121,12 @@ axios.post(`${settings.url}/handler.php`,
|
|||
notes.unshift(note);
|
||||
|
||||
console.log("sending data file to server...");
|
||||
var encrypted = await encrypt(JSON.stringify(notes));
|
||||
axios.post(`${settings.url}/handler.php`,
|
||||
{
|
||||
action: "push",
|
||||
password: settings.password,
|
||||
data: JSON.stringify(notes)
|
||||
data: encrypted
|
||||
},
|
||||
{
|
||||
headers:
|
||||
|
|
Loading…
Reference in New Issue