From 33c2e8e410a8a1c2eab09c5228782dbdde7bb7ef Mon Sep 17 00:00:00 2001 From: philc Date: Tue, 9 Dec 2025 16:04:46 +0100 Subject: [PATCH] modif notification email --- .gitignore | 2 - apxtri/apxtri.js | 9 +-- apxtri/middlewares/checkHeaders.js | 4 +- apxtri/middlewares/header.md | 2 +- apxtri/middlewares/isAuthenticated.js | 2 +- apxtri/models/Articles.js | 2 +- apxtri/models/Notifications.js | 68 ++++++++++--------- apxtri/models/Odmdb.js | 2 +- apxtri/models/Pagans.js | 2 +- apxtri/models/PagansPeter.js | 2 +- apxtri/models/Wwws.js | 2 +- apxtri/routes/articles.js | 2 +- apxtri/routes/odmdb.js | 29 -------- apxtri/routes/pagans.js | 2 +- apxtri/routes/trackings.js | 2 +- .../tplstrings/Checkjson_en.json | 0 .../tplstrings/Checkjson_fr.json | 0 .../tplstrings/Nations_fr.json | 0 .../tplstrings/Notifications_en.json | 0 .../tplstrings/Notifications_fr.json | 0 {objects => apxtri}/tplstrings/Odmdb_en.json | 0 {objects => apxtri}/tplstrings/Odmdb_fr.json | 0 {objects => apxtri}/tplstrings/Pagans_en.json | 2 +- {objects => apxtri}/tplstrings/Pagans_fr.json | 0 {objects => apxtri}/tplstrings/Tribes_en.json | 0 {objects => apxtri}/tplstrings/Tribes_fr.json | 0 .../tplstrings/middlewares_en.json | 0 .../tplstrings/middlewares_fr.json | 0 backup.sh | 2 +- 29 files changed, 56 insertions(+), 80 deletions(-) rename {objects => apxtri}/tplstrings/Checkjson_en.json (100%) rename {objects => apxtri}/tplstrings/Checkjson_fr.json (100%) rename {objects => apxtri}/tplstrings/Nations_fr.json (100%) rename {objects => apxtri}/tplstrings/Notifications_en.json (100%) rename {objects => apxtri}/tplstrings/Notifications_fr.json (100%) rename {objects => apxtri}/tplstrings/Odmdb_en.json (100%) rename {objects => apxtri}/tplstrings/Odmdb_fr.json (100%) rename {objects => apxtri}/tplstrings/Pagans_en.json (93%) rename {objects => apxtri}/tplstrings/Pagans_fr.json (100%) rename {objects => apxtri}/tplstrings/Tribes_en.json (100%) rename {objects => apxtri}/tplstrings/Tribes_fr.json (100%) rename {objects => apxtri}/tplstrings/middlewares_en.json (100%) rename {objects => apxtri}/tplstrings/middlewares_fr.json (100%) diff --git a/.gitignore b/.gitignore index ca0a28c..a7bb1df 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,4 @@ !objects/ !objects/options/ !objects/options/** -!objects/tplstrings/ -!objects/tplstrings/** diff --git a/apxtri/apxtri.js b/apxtri/apxtri.js index 93f70c8..d0573fa 100755 --- a/apxtri/apxtri.js +++ b/apxtri/apxtri.js @@ -230,7 +230,7 @@ apxtri.runexpress = async (tribesdns, conf) => { if (!doms.includes(dm)) doms.push(dm); //reindex database attention check dev-ants/.. a bug was fixed glob.sync(`../${t}/objects/*`).forEach((o) => { - //console.log("reindex: ", o); + console.log("reindex: ", o); Odmdb.runidx(o); }); }); @@ -242,7 +242,7 @@ apxtri.runexpress = async (tribesdns, conf) => { context.routes.push(rt); return { url: rt, route: f }; }); - context.models = glob.sync(`${pathtr}/apxtri/models/*.js`).map((f) => { + /* context.models = glob.sync(`${pathtr}/apxtri/models/*.js`).map((f) => { const modname = `${path.basename(f, ".js")}`; return { model: modname, @@ -251,6 +251,7 @@ apxtri.runexpress = async (tribesdns, conf) => { .map((l) => path.basename(l, ".json").split("_")[1]), }; }); + */ //console.log(context.routes); //console.log(context.models); //const conft = `../itm/${t}.json`; @@ -274,8 +275,8 @@ apxtri.runexpress = async (tribesdns, conf) => { app.disable("x-powered-by"); // for security app.locals.tribeids = tribeIds; const currentmod = "apxtri"; - const log = conf.api.activelog - ? conf.api.activelog.includes(currentmod) + const log = process.env.ACTIVELOG.split(',') + ? process.env.ACTIVELOG.split(',').includes(currentmod) : false; console.log( currentmod, diff --git a/apxtri/middlewares/checkHeaders.js b/apxtri/middlewares/checkHeaders.js index 69570af..9dfde0b 100755 --- a/apxtri/middlewares/checkHeaders.js +++ b/apxtri/middlewares/checkHeaders.js @@ -1,7 +1,7 @@ const path=require('path') const conf = require(`../../../adminapi/objects/tribes/itm/adminapi.json`); const currentmod='checkHeaders'; -const log = conf.api.activelog.includes(currentmod) +const log = process.env.ACTIVELOG.split(',').includes(currentmod) /** * @api {get} / - CheckHeaders * @apiGroup Middlewares @@ -19,7 +19,7 @@ const log = conf.api.activelog.includes(currentmod) * @apiHeader {integer} xtrkversion a version number link to tracking system * @apiHeaderExample {json} Headeconst conf = require(`../../../adminapi/objects/tribes/itm/adminapi.json`); const currentmod='checkHeaders'; -const log = conf.api.activelog.includes(currentmod)r-Example for anonymous: +const log = process.env.ACTIVELOG.split(',').includes(currentmod)r-Example for anonymous: * { * "xtrkversion":1, * "xtribe":"smatchit", diff --git a/apxtri/middlewares/header.md b/apxtri/middlewares/header.md index 144d7f5..7e42091 100644 --- a/apxtri/middlewares/header.md +++ b/apxtri/middlewares/header.md @@ -94,7 +94,7 @@ C - a json multi answer **{status,multimsg:\[{ref,msg,data}\]}**          Each {ref,msg,data\] work the same way than B -To show feedback context message in a language lg => get /api/adminapi/objects/tplstrings/{{model}}\_{{lg}}.json +To show feedback context message in a language lg => apxtri/tplstrings/{{model}}\_{{lg}}.json store in wwws.localdb This contain a json {msg:"mustache template string to render with data"}   ## Add tribe's api: diff --git a/apxtri/middlewares/isAuthenticated.js b/apxtri/middlewares/isAuthenticated.js index 5c1a14b..0efb5fa 100755 --- a/apxtri/middlewares/isAuthenticated.js +++ b/apxtri/middlewares/isAuthenticated.js @@ -8,7 +8,7 @@ const openpgp = require("openpgp"); const conf = require(`../../../adminapi/objects/tribes/itm/adminapi.json`); const currentmod='isAuthenticated'; -const log = conf.api.activelog.includes(currentmod) +const log = process.env.ACTIVELOG.split(',').includes(currentmod) /** * @api {get} / - isAuthenticated * @apiGroup Middlewares diff --git a/apxtri/models/Articles.js b/apxtri/models/Articles.js index e1b7f15..92358be 100644 --- a/apxtri/models/Articles.js +++ b/apxtri/models/Articles.js @@ -7,7 +7,7 @@ const Odmdb = require(`./Odmdb.js`); const Checkjson = require(`./Checkjson`); const conf = require(`../../objects/tribes/itm/adminapi.json`); const currentmod = "Articles"; -const log = conf.api.activelog.includes(currentmod); +const log = process.env.ACTIVELOG.split(',').includes(currentmod); const Articles={} diff --git a/apxtri/models/Notifications.js b/apxtri/models/Notifications.js index b1a3b07..3b40f20 100644 --- a/apxtri/models/Notifications.js +++ b/apxtri/models/Notifications.js @@ -9,7 +9,7 @@ const Checkjson = require(`./Checkjson.js`); const nodemailer = require("nodemailer"); const conf = require(`../../../adminapi/objects/tribes/itm/adminapi.json`); const currentmod = "Notifications"; -const log = conf.api.activelog.includes(currentmod); +const log = process.env.ACTIVELOG.split(',').includes(currentmod); /** * To manage any communication between Pagan * mayor druid emailing/sms/paper from tribe register smtp, simcard, mail api to Person(s) / Pagan(s) @@ -139,12 +139,13 @@ Notifications.sendsms = async (data, tribeId) => { data: { tribe: tribeId }, }; } - let missingk = [][("To", "Text")].forEach((k) => { + let missingk = []; + ["To", "Text"].forEach((k) => { if (!data[k]) { missingk.push(k); } }); - if (missingk.lenght > 0) { + if (missingk.length > 0) { return { status: 428, ref: "Notifications", @@ -407,12 +408,12 @@ Notifications.sendmail = async (data, tribe) => { } let missingk = []; - ["from", "to", "subject", "html", "text"].forEach((k) => { + ["from", "to", "subject", "html", "text"].forEach((k) => { if (!data[k]) { missingk.push(k); } }); - if (missingk.lenght > 0) { + if (missingk.length > 0) { return { status: 428, ref: "Notifications", @@ -446,14 +447,14 @@ Notifications.sendmail = async (data, tribe) => { } else { missingfile.push(fo.pathfile); } - }); - if (missingfile.lenght > 0) - return { - status: 428, - ref: "Notifications", - msg: "missingfile", - data: { missingfile: missingfile }, - }; + }); + if (missingk.length > 0) { + return { + status: 428, + ref: "Notifications", + msg: "missingdata", + data: { missingk: missingk }, + }; } //console.log("data:", data); let res; @@ -487,24 +488,29 @@ Notifications.sendmail = async (data, tribe) => { } else { error = err; } - } - if ( - res && - res.accepted && - data.to.split(",").reduce((acc, m) => acc && res.accepted.includes(m), true) - ) { - data.accepted = res.accepted; - data.rejected = res.rejected; - return { - status: 200, - ref: "Notifications", - msg: "successfullsentemail", - data, - }; - } else if (res && res.accepted && res.rejected) { - data.accepted = res.accepted; - data.rejected = res.rejected; - return { status: 410, ref: "Notifications", msg: "errsendmail", data }; + } + console.log("sendmail result:", res); + if (res && res.accepted) { + // Normalize emails for comparison + const normalizedAccepted = res.accepted.map(email => email.trim().toLowerCase()); + const toEmails = data.to.split(",").map(email => email.trim().toLowerCase()); + console.log("normalizedAccepted:", normalizedAccepted, "toEmails:", toEmails); + const allAccepted = toEmails.every(email => normalizedAccepted.includes(email)); + + if (allAccepted && (!res.rejected || res.rejected.length === 0)) { + data.accepted = res.accepted; + data.rejected = res.rejected; + return { + status: 200, + ref: "Notifications", + msg: "successfullsentemail", + data, + }; + } else { + data.accepted = res.accepted; + data.rejected = res.rejected; + return { status: 410, ref: "Notifications", msg: "errsendmail", data }; + } } else { data.errmailer = error; return { status: 417, ref: "Notifications", msg: "errsendmail", data }; diff --git a/apxtri/models/Odmdb.js b/apxtri/models/Odmdb.js index 471742f..815b980 100644 --- a/apxtri/models/Odmdb.js +++ b/apxtri/models/Odmdb.js @@ -7,7 +7,7 @@ const conf = require(`../../../adminapi/objects/tribes/itm/adminapi.json`); const Checkjson = require(`./Checkjson.js`); const { promiseHooks } = require("v8"); const currentmod = "Odmdb"; -const log = conf.api.activelog.includes(currentmod); +const log = process.env.ACTIVELOG.split(',').includes(currentmod); /** * This manage Objects for indexing, searching, checking and act to CRUD * @objectPathName = objectpath/objectname diff --git a/apxtri/models/Pagans.js b/apxtri/models/Pagans.js index 14a2148..7ba99ad 100644 --- a/apxtri/models/Pagans.js +++ b/apxtri/models/Pagans.js @@ -10,7 +10,7 @@ const Odmdb = require("./Odmdb.js"); const conf = require(`../../../adminapi/objects/tribes/itm/adminapi.json`); const currentmod = "Pagans"; -const log = conf.api.activelog.includes(currentmod); +const log = process.env.ACTIVELOG.split(',').includes(currentmod); /** * Pagan Management numeric Identity and Person (Person = Pagan Id + tribe) * diff --git a/apxtri/models/PagansPeter.js b/apxtri/models/PagansPeter.js index f1f86ad..149bac7 100644 --- a/apxtri/models/PagansPeter.js +++ b/apxtri/models/PagansPeter.js @@ -10,7 +10,7 @@ const Odmdb = require("./Odmdb.js"); const conf = require(`../../../adminapi/objects/tribes/itm/adminapi.json`); const currentmod = "Pagans"; -const log = conf.api.activelog.includes(currentmod); +const log = process.env.ACTIVELOG.split(',').includes(currentmod); /** * Pagan Management numeric Identity and Person (Person = Pagan Id + tribe) * diff --git a/apxtri/models/Wwws.js b/apxtri/models/Wwws.js index 2d1f632..4f5f878 100644 --- a/apxtri/models/Wwws.js +++ b/apxtri/models/Wwws.js @@ -12,7 +12,7 @@ const readlineSync = require("readline-sync"); const Odmdb = require("./Odmdb.js"); const conf = require(`../../../adminapi/objects/tribes/itm/adminapi.json`); const currentmod = "Wwws"; -const log = conf.api.activelog.includes(currentmod); +const log = process.env.ACTIVELOG.split(',').includes(currentmod); const Wwws = {}; Wwws.getwco = (wconame, ctx) => { diff --git a/apxtri/routes/articles.js b/apxtri/routes/articles.js index 8a4e884..1d130cd 100644 --- a/apxtri/routes/articles.js +++ b/apxtri/routes/articles.js @@ -9,7 +9,7 @@ const Articles = require(`../models/Articles`); const conf = require(`../../../adminapi/objects/tribes/itm/adminapi.json`); const currentmod = "Articles"; -const log = conf.api.activelog.includes(currentmod); +const log = process.env.ACTIVELOG.split(',').includes(currentmod); const router = express.Router(); diff --git a/apxtri/routes/odmdb.js b/apxtri/routes/odmdb.js index 82e6f6a..fb2cd15 100644 --- a/apxtri/routes/odmdb.js +++ b/apxtri/routes/odmdb.js @@ -730,33 +730,4 @@ router.put( } ); -/** - * @api {get} https://wall-ants.ndda.fr/adminapi/objects/tplstring/:modelname_lg.json - translation notif Get public - * @apiGroup Odmdb - * @apiName getPublicModelmessagekey - * @apiDescription Get a public json object for the ref: modelname in language lg, to get a template description with key msg - * @apiParam {string} modelname Mandatory - * @apiSuccess {json} contain json file - * @apiSuccessExample {json} Fichier direct - * HTTP/1.1 200 Success-response: - * { - "alreadyexist": "Un object {{objectname}} avec la clé {{key}} existe déjà avec {{val}}", - "doesnotexist": "L'object {{objectname}} avec la clé {{key}} ,'existe pas avec {{val}}", - "getschema": "Schema {{{conf.name}}}", - "schemanotfound": "Schema introuvable dans {{{schemaPath}}}", - "pathnamedoesnotexist": "Le repertoire n'existe pas {{{indexpath}}}", - "objectfiledoesnotexist": "Le fichier n'existe pas {{{objectpath}}}", - "cudsuccessfull": "Mise à jour effectuée avec succés", - "missingprimarykey": "Il manque une clé primaire apxid pour stocker et identifier les objects", - "unconsistencyapxidx": "L'index {{name}} doit contenir en objkey au moins {{apxid}} car keyval n'est pas unique", - "profilnotallow": "Vous n'avez pas le profil de {{profils}}, cette action n'est pas authorisée", - "successreindex": "Objet reindexé à partir des items, vos index sont à jour", - "indexexist":"L'indexe existe" - * } - * @apiError {json} contain json file - * @apiErrorExample {string} nginx html not found message - * HTTP/1.1 404 Not Found - * ... -**/ - module.exports = router; diff --git a/apxtri/routes/pagans.js b/apxtri/routes/pagans.js index 2cbc608..0925d31 100755 --- a/apxtri/routes/pagans.js +++ b/apxtri/routes/pagans.js @@ -11,7 +11,7 @@ const isAuthenticated = require("../middlewares/isAuthenticated.js"); const conf = require(`../../../adminapi/objects/tribes/itm/adminapi.json`); const currentmod = "Pagans"; -const log = conf.api.activelog.includes(currentmod); +const log = process.env.ACTIVELOG.split(',').includes(currentmod); const router = express.Router(); diff --git a/apxtri/routes/trackings.js b/apxtri/routes/trackings.js index 9c84271..f011934 100644 --- a/apxtri/routes/trackings.js +++ b/apxtri/routes/trackings.js @@ -4,7 +4,7 @@ const fs = require("fs-extra"); const path = require("path"); const conf = require(`../../../adminapi/objects/tribes/itm/adminapi.json`); const currentmod = "Trackings"; -const log = conf.api.activelog.includes(currentmod); +const log = process.env.ACTIVELOG.split(',').includes(currentmod); const Odmdb = require("../models/Odmdb.js"); // Middlewares const checkHeaders = require("../middlewares/checkHeaders"); diff --git a/objects/tplstrings/Checkjson_en.json b/apxtri/tplstrings/Checkjson_en.json similarity index 100% rename from objects/tplstrings/Checkjson_en.json rename to apxtri/tplstrings/Checkjson_en.json diff --git a/objects/tplstrings/Checkjson_fr.json b/apxtri/tplstrings/Checkjson_fr.json similarity index 100% rename from objects/tplstrings/Checkjson_fr.json rename to apxtri/tplstrings/Checkjson_fr.json diff --git a/objects/tplstrings/Nations_fr.json b/apxtri/tplstrings/Nations_fr.json similarity index 100% rename from objects/tplstrings/Nations_fr.json rename to apxtri/tplstrings/Nations_fr.json diff --git a/objects/tplstrings/Notifications_en.json b/apxtri/tplstrings/Notifications_en.json similarity index 100% rename from objects/tplstrings/Notifications_en.json rename to apxtri/tplstrings/Notifications_en.json diff --git a/objects/tplstrings/Notifications_fr.json b/apxtri/tplstrings/Notifications_fr.json similarity index 100% rename from objects/tplstrings/Notifications_fr.json rename to apxtri/tplstrings/Notifications_fr.json diff --git a/objects/tplstrings/Odmdb_en.json b/apxtri/tplstrings/Odmdb_en.json similarity index 100% rename from objects/tplstrings/Odmdb_en.json rename to apxtri/tplstrings/Odmdb_en.json diff --git a/objects/tplstrings/Odmdb_fr.json b/apxtri/tplstrings/Odmdb_fr.json similarity index 100% rename from objects/tplstrings/Odmdb_fr.json rename to apxtri/tplstrings/Odmdb_fr.json diff --git a/objects/tplstrings/Pagans_en.json b/apxtri/tplstrings/Pagans_en.json similarity index 93% rename from objects/tplstrings/Pagans_en.json rename to apxtri/tplstrings/Pagans_en.json index d7567f6..571f930 100644 --- a/objects/tplstrings/Pagans_en.json +++ b/apxtri/tplstrings/Pagans_en.json @@ -1,5 +1,5 @@ { - "aliasexist":"This alias {{alias]} exist", + "aliasexist":"This alias {{alias}} exist", "aliasdoesnotexist":"This alias {{alias}} does not exist ", "personexist":"This person {{alias}} exist for {{tribeid}}", "successfullcreate": "This identity {{alias}} creation was successfull. {{#withemail}} An email was sent to {{email}}, if you do not receive it, please download your keys before living this page.{{/withemail}}", diff --git a/objects/tplstrings/Pagans_fr.json b/apxtri/tplstrings/Pagans_fr.json similarity index 100% rename from objects/tplstrings/Pagans_fr.json rename to apxtri/tplstrings/Pagans_fr.json diff --git a/objects/tplstrings/Tribes_en.json b/apxtri/tplstrings/Tribes_en.json similarity index 100% rename from objects/tplstrings/Tribes_en.json rename to apxtri/tplstrings/Tribes_en.json diff --git a/objects/tplstrings/Tribes_fr.json b/apxtri/tplstrings/Tribes_fr.json similarity index 100% rename from objects/tplstrings/Tribes_fr.json rename to apxtri/tplstrings/Tribes_fr.json diff --git a/objects/tplstrings/middlewares_en.json b/apxtri/tplstrings/middlewares_en.json similarity index 100% rename from objects/tplstrings/middlewares_en.json rename to apxtri/tplstrings/middlewares_en.json diff --git a/objects/tplstrings/middlewares_fr.json b/apxtri/tplstrings/middlewares_fr.json similarity index 100% rename from objects/tplstrings/middlewares_fr.json rename to apxtri/tplstrings/middlewares_fr.json diff --git a/backup.sh b/backup.sh index 60ff083..cfebab8 100755 --- a/backup.sh +++ b/backup.sh @@ -9,7 +9,7 @@ # # Exemple: # For setup -#. /media/phil/usbfarm/apxtowns/dev-ants/adminapi/backup.sh /media/phil/usbfarm/apxtowns/dev-ants adminapi objects setup. "nations options pagans towns tplstrings wwws" +#. /media/phil/usbfarm/apxtowns/dev-ants/adminapi/backup.sh /media/phil/usbfarm/apxtowns/dev-ants adminapi objects setup. "nations options pagans towns wwws" #. /media/phil/usbfarm/apxtowns/dev-ants/adminapi/backup.sh /media/phil/usbfarm/apxtowns/dev-ants adminapi apxtri setup. "middlewares models routes apidoc_adminapi.json apxchat.js apxtri.js package.json" # For backup #. /media/phil/usbfarm/apxtowns/dev-ants/adminapi/backup.sh /media/phil/usbfarm/apxtowns/dev-ants adminapi objects dayname "persons"