From c221fc98daa38658e4a945d2542c6ca06469d201 Mon Sep 17 00:00:00 2001 From: philc Date: Sun, 30 Jun 2024 22:06:37 +0200 Subject: [PATCH] modif Odmdb and Pagans --- models/Odmdb.js | 4 +- models/Pagans.js | 104 ++++++------ models/unittest/Pagansunittest.js | 262 ++++++++++++++++++++++++++++++ 3 files changed, 318 insertions(+), 52 deletions(-) create mode 100644 models/unittest/Pagansunittest.js diff --git a/models/Odmdb.js b/models/Odmdb.js index e47c5a2..8e11f8a 100644 --- a/models/Odmdb.js +++ b/models/Odmdb.js @@ -831,6 +831,7 @@ Odmdb.runidx = (objectPathname, schema) => { const itm = fs.readJSONSync(i); Object.keys(ventil).forEach((n) => { let keep = true; + console.log(`Index name: ${n}`) if (ventil[n].filter != "") { try { keep = eval(ventil[n].filter); @@ -871,6 +872,7 @@ Odmdb.runidx = (objectPathname, schema) => { ventil[n].keyvaltype == "string" ? [itm[ventil[n].keyval]] : itm[ventil[n].keyval]; + console.log(ventil[n].keyval, itm[ventil[n].keyval], itm) // itm[ventil[n].keyval] is an array listval.forEach((val) => { if (!ventil[n].data[val]) ventil[n].data[val] = []; @@ -1109,5 +1111,5 @@ Odmdb.updatefromidxall = (objectname, idxname, data, lastupdate) => { data: { objectname, idxname, lastupdate }, }; }; -const imgbase64test="iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAIAAADwf7zUAAAgAElEQVR4nOzBAQEAAACCIP+vbkhAAADAiWoAAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAA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DQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA//8DAPN8JmZgsrlSAAAAAElFTkSuQmCC" + module.exports = Odmdb; diff --git a/models/Pagans.js b/models/Pagans.js index 2db66e5..35a2a0f 100644 --- a/models/Pagans.js +++ b/models/Pagans.js @@ -3,7 +3,7 @@ const path = require("path"); const dayjs = require("dayjs"); const fs = require("fs-extra"); const axios = require("axios"); -const Mustache = require('mustache'); +const Mustache = require("mustache"); const openpgp = require("openpgp"); const Notifications = require("./Notifications.js"); const Odmdb = require("./Odmdb.js"); @@ -36,7 +36,7 @@ Pagans.logout = (alias, tribe, xdays, xhash) => { //max filename in ext4: 255 characters tmpfs += `_${xhash.substring(150, 150 + tmpfs.length - 249)}.json`; fs.remove(tmpfs); - if (log) console.log(currentmod,'logout token',tmpfs) + if (log) console.log(currentmod, "logout token", tmpfs); return { status: 200, ref: "Pagans", msg: "logout" }; }; @@ -48,15 +48,13 @@ Pagans.logout = (alias, tribe, xdays, xhash) => { **/ Pagans.getalias = (alias) => { //bypass Odmdb cause all is public save ressources - console.log(path.resolve(`../objects/pagans/itm/${alias}.json`)) + console.log(path.resolve(`../objects/pagans/itm/${alias}.json`)); if (fs.existsSync(`../objects/pagans/itm/${alias}.json`)) { return { status: 200, ref: "Pagans", msg: "aliasexist", - data: fs.readJSONSync( - `../objects/pagans/itm/${alias}.json` - ), + data: fs.readJSONSync(`../objects/pagans/itm/${alias}.json`), }; } else { return { @@ -68,7 +66,6 @@ Pagans.getalias = (alias) => { } }; - /** * Send email with alias's keys to email or person alias person.recovery.email * @@ -84,23 +81,28 @@ Pagans.getalias = (alias) => { * @param {string} data.lg */ Pagans.sendmailkey = (data) => { - - if (log) console.log(currentmod, - data.alias, - "-", - (data.privatekey)?data.privatekey.substring(0,10):"", - "-", - data.tribe, - "-", - data.passphrase, - "-", - (data.publickey)? data.publickey.substring(0,10):"", - "-", - data.email, - "-", - data.lg - ); - const person = { alias:data.alias, privatekey:data.privatekey, tribe:data.tribe }; + if (log) + console.log( + currentmod, + data.alias, + "-", + data.privatekey ? data.privatekey.substring(0, 10) : "", + "-", + data.tribe, + "-", + data.passphrase, + "-", + data.publickey ? data.publickey.substring(0, 10) : "", + "-", + data.email, + "-", + data.lg + ); + const person = { + alias: data.alias, + privatekey: data.privatekey, + tribe: data.tribe, + }; if (!data.publickey || !data.email || !data.privatekey) { const personfile = `../../${data.tribe}/objects/persons/itm/${data.alias}.json`; @@ -109,17 +111,17 @@ Pagans.sendmailkey = (data) => { status: 404, ref: "Pagans", msg: "persondoesnotexist", - data: { alias:data.alias, tribe:data.tribe }, + data: { alias: data.alias, tribe: data.tribe }, }; } - const persondata= fs.readJsonSync(personfile); - if (!persondata.recoveryauth){ + const persondata = fs.readJsonSync(personfile); + if (!persondata.recoveryauth) { return { - status:404, - ref:"Pagans", - msg:"personhasnorecoveryauth", - data:{alias:data.alias, tribe:data.tribe,email:data.email} - } + status: 404, + ref: "Pagans", + msg: "personhasnorecoveryauth", + data: { alias: data.alias, tribe: data.tribe, email: data.email }, + }; } person.email = persondata.recoveryauth.email; person.publickey = persondata.recoveryauth.publickey; @@ -130,20 +132,20 @@ Pagans.sendmailkey = (data) => { person.passphrase = data.passphrase; person.publickey = data.publickey; } - person.avecpassphrase=(person.passphrase!="") - let tplfile=`../../${data.tribe}/template/createidentity_${data.lg}.js`; - if (!fs.existsSync(tplfile)){ - tplfile=`../template/createidentity_${data.lg}.js`; - if (!fs.existsSync(tplfile)){ + person.avecpassphrase = person.passphrase != ""; + let tplfile = `../../${data.tribe}/template/createidentity_${data.lg}.js`; + if (!fs.existsSync(tplfile)) { + tplfile = `../template/createidentity_${data.lg}.js`; + if (!fs.existsSync(tplfile)) { return { - status:406, - ref:"Pagans", - msg:"templatedoesnotexist", - data:{tplfile} - } + status: 406, + ref: "Pagans", + msg: "templatedoesnotexist", + data: { tplfile }, + }; } } - const tplemail = require(path.resolve(tplfile)) + const tplemail = require(path.resolve(tplfile)); /* Remove from attachments for less user confusing { @@ -153,18 +155,18 @@ Pagans.sendmailkey = (data) => { }, */ const maildata = { - from:tplemail.sender, + from: tplemail.sender, to: person.email, subject: Mustache.render(tplemail.subject, person), html: Mustache.render(tplemail.html, person), text: Mustache.render(tplemail.text, person), attachments: [ { - filename:`${person.alias}_privatekey.txt`, + filename: `${person.alias}_privatekey.txt`, content: person.privatekey, - contentType:"text/plain" - } - ] + contentType: "text/plain", + }, + ], }; return Notifications.sendmail(maildata, data.tribe); }; @@ -199,13 +201,13 @@ Pagans.authenticatedetachedSignature = async ( const { verified, keyID } = verificationResult.signatures[0]; try { await verified; // throws on invalid signature - if (log) console.log(currentmod,"Signed by key id " + keyID.toHex()); + if (log) console.log(currentmod, "Signed by key id " + keyID.toHex()); return KeyId.toHex().alias == alias; } catch (e) { - if (log) console.log(currentmod,"Signature could not be verified: " + e.message); + if (log) + console.log(currentmod, "Signature could not be verified: " + e.message); return false; } }; - module.exports = Pagans; diff --git a/models/unittest/Pagansunittest.js b/models/unittest/Pagansunittest.js new file mode 100644 index 0000000..7411e0f --- /dev/null +++ b/models/unittest/Pagansunittest.js @@ -0,0 +1,262 @@ +const assert = require('assert'); +const openpgp = require('openpgp'); +const dayjs = require('dayjs'); + +const ut = { name: 'Pagans' }; + + +const apx = {}; + +apx.generateKey = async (alias, passphrase) => { + try { + const pgpParams = { + type: 'ecc', + curve: 'curve25519', + userIDs: [{ name: alias }], + passphrase: passphrase, + format: 'armored' + }; + + const key = await openpgp.generateKey(pgpParams); + return { + alias, + passphrase, + privatekey: key.privateKeyArmored, + publickey: key.publicKeyArmored + }; + } catch (error) { + console.error('Error generating key:', error); + return {} + } +}; + +apx.createIdentity = async (alias, passphrase) => { + try { + const { privatekey, publickey } = await apx.generateKey(alias, passphrase); + return { alias, privatekey, publickey }; + } catch (error) { + console.error('Error creating identity:', error); + } +}; + +apx.clearmsgSignature = async (privateKeyArmored, passphrase, message) => { + try { + const { keys: [privateKey] } = await openpgp.decryptKey({ + privateKey: await openpgp.readKey({ armoredKey: privateKeyArmored }), + passphrase + }); + + const signedMessage = await openpgp.sign({ + message: await openpgp.createMessage({ text: message }), + signingKeys: privateKey + }); + + return signedMessage; + } catch (error) { + console.error('Error signing message:', error); + } +}; + +const personData = {}; + +const apxFunctions = { + modifyPersonData(alias, newFirstName) { + if (!personData[alias]) { + personData[alias] = {}; + } + personData[alias].firstName = newFirstName; + return personData[alias]; + }, + + checkPersonData(alias, expectedFirstName) { + return personData[alias] && personData[alias].firstName === expectedFirstName; + }, + + removePersonModification(alias, originalFirstName) { + if (personData[alias]) { + personData[alias].firstName = originalFirstName; + } + return personData[alias]; + }, + + deleteAlias(alias) { + delete personData[alias]; + return !personData[alias]; + } +}; +const pagans={"adminsmatchits":{passphrase:""},"recruiters":{passphrase:""},"seekers":{},"adminrecruiters":{}} + +pagans.A.headers = { + xtrkversion: 1, + xalias: 'anonymous', + xapp: 'smatchapp', + xdays: 0, + xhash: 'anonymous', + xlang: 'fr', + xprofils: 'anonymous', + xtribe: 'smatchit', + xuuid: '0' +}; +paganA.alias = 'testalias'; +paganA.passphrase = 'testpassphrase'; +let privateKey, publicKey; +let authHeaders; +const testroutes={} +testroutes.createidentity=(alias,passphrase)=>{ + const mykey=apx.generateKey(alias,passphrase) + if (!mykey.alias){return testerror} + Pagans.gertalias(alias) pass test or not + } + + +const testCases = [ + { + name: 'Generate Key', + async run() { + const keys = await apx.generateKey(alias, passphrase); + privateKey = keys.privatekey; + publicKey = keys.publickey; + + return keys; + }, + verify(keys) { + assert(keys, 'Keys should not be undefined'); + assert(keys.privatekey, 'Private key should not be undefined'); + assert(keys.publickey, 'Public key should not be undefined'); + assert(keys.privatekey.includes('BEGIN PGP PRIVATE KEY BLOCK'), 'Private key is not valid'); + assert(keys.publickey.includes('BEGIN PGP PUBLIC KEY BLOCK'), 'Public key is not valid'); + } + }, + { + name: 'Create Identity', + async run(alias) { + const identity = await apx.createIdentity(alias, passphrase); + privateKey = identity.privatekey; + publicKey = identity.publickey; + Pagans.getalias + return identity; + }, + verify(identity) { + assert(identity, 'Identity should not be undefined'); + assert(identity.alias === alias, 'Alias should match'); + assert(identity.privatekey.includes('BEGIN PGP PRIVATE KEY BLOCK'), 'Private key is not valid'); + assert(identity.publickey.includes('BEGIN PGP PUBLIC KEY BLOCK'), 'Public key is not valid'); + } + }, + { + name: 'Authenticate', + async run() { + headers.xalias = alias; + headers.xdays = dayjs().valueOf(); + const msg = `${alias}_${headers.xdays}`; + headers.xhash = await apx.clearmsgSignature(privateKey, passphrase, msg); + + authHeaders = { + ...headers, + xhash: headers.xhash, + xdays: headers.xdays + }; + + return authHeaders; + }, + verify(authHeaders) { + assert(authHeaders, 'Auth headers should not be undefined'); + assert(authHeaders.xhash.includes('BEGIN PGP SIGNED MESSAGE'), 'xhash is not valid'); + } + }, + { + name: 'Modify Person Data', + async run() { + const newFirstName = 'NewFirstName'; + return apxFunctions.modifyPersonData(alias, newFirstName); + }, + verify(modifiedData) { + assert(modifiedData, 'Modified data should not be undefined'); + assert.strictEqual(modifiedData.firstName, 'NewFirstName', 'First name should be updated'); + } + }, + { + name: 'Check Person Data', + async run() { + const expectedFirstName = 'NewFirstName'; + return apxFunctions.checkPersonData(alias, expectedFirstName); + }, + verify(isCorrect) { + assert(isCorrect, 'Person data should be correctly updated'); + } + }, + { + name: 'Remove Person Modification', + async run() { + const originalFirstName = 'OriginalFirstName'; + return apxFunctions.removePersonModification(alias, originalFirstName); + }, + verify(modifiedData) { + assert(modifiedData, 'Modified data should not be undefined'); + assert.strictEqual(modifiedData.firstName, 'OriginalFirstName', 'First name should be reverted'); + } + }, + { + name: 'Check Reverted Person Data', + async run() { + const expectedFirstName = 'OriginalFirstName'; + return apxFunctions.checkPersonData(alias, expectedFirstName); + }, + verify(isCorrect) { + assert(isCorrect, 'Person data should be correctly reverted'); + } + }, + { + name: 'Delete Alias', + async run() { + return apxFunctions.deleteAlias(alias); + }, + verify(isDeleted) { + assert(isDeleted, 'Alias should be deleted'); + } + } +]; + +ut.run = async (options) => { + console.log('Test Pagans Registration and Authentication'); + for (const testCase of testCases) { + console.log(`Running test case: ${testCase.name}`); + try { + /* + Have a look in routes/pagans.jss + create personae={4 alias utadminsmatchit ut....} + forEach()alias=>{ + ut.create(alias) + } + //test perons + forEach()alias=>{ + join tribe smatchit === create persons for a tribe + + } + + forEach()alias=>W{ + ut.delete(alias)} + + + + + */ + + const result = await testCase.run(alias); + testCase.verify(result); + console.log(`Test case ${testCase.name} passed`); + } catch (error) { + console.error(`Test case ${testCase.name} failed:`, error); + } + } + console.log('All test cases ran successfully'); +}; + +module.exports = ut; + +// Run the tests +if (require.main === module) { + ut.run({ verbose: true }).catch(err => { + console.error('Test case failed:', err); + }); +}