2023-05-12 05:59:32 +00:00
|
|
|
const glob = require("glob");
|
|
|
|
const path = require("path");
|
|
|
|
const fs = require("fs-extra");
|
2023-11-05 11:03:25 +00:00
|
|
|
const axios = require("axios");
|
|
|
|
//const smtp = require("smtp-client");
|
|
|
|
const nodemailer = require("nodemailer");
|
|
|
|
const conf = require(`${process.env.dirtown}/conf.json`);
|
2023-05-12 05:59:32 +00:00
|
|
|
/**
|
|
|
|
* To manage any communication between Pagan
|
|
|
|
* mayor druid emailing/sms/paper from tribe register smtp, simcard, mail api to Person(s) / Pagan(s)
|
|
|
|
* volatile notification message from tribe activities to Pagans / person ()
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
const Notifications = {};
|
|
|
|
|
2023-11-05 11:03:25 +00:00
|
|
|
|
|
|
|
Notifications.sendsms = async (data, tribeId) => {
|
|
|
|
/**
|
|
|
|
* Never use need wallet in mailjet to test
|
|
|
|
* To set up with mailjet see https://dev.mailjet.com/sms/guides/send-sms-api/#authentication
|
|
|
|
*
|
|
|
|
* @param {string} data.To a phone number with international +3360101010101
|
|
|
|
* @param {string} data.Text text to send
|
|
|
|
*
|
|
|
|
* a conf.sms with {url:"smsurl", Token:"", From:""}
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!conf.sms) {
|
|
|
|
return {
|
|
|
|
status: 412,
|
|
|
|
ref: "Notifications",
|
|
|
|
msg: "missingconf",
|
|
|
|
tribe: tribeId,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
let missingk = [][("To", "Text")].forEach((k) => {
|
|
|
|
if (!data[k]) {
|
|
|
|
missingk.push(k);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
if (missingk.lenght > 0) {
|
|
|
|
return {
|
|
|
|
status: 428,
|
|
|
|
ref: "Notifications",
|
|
|
|
msg: "missingdata",
|
|
|
|
missingk: missingk,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
let confsms= conf.sms;
|
|
|
|
if (
|
|
|
|
fs.existsSync(
|
|
|
|
`${process.env.dirtown}/tribes/itm/${req.session.header.xtribe}.json`
|
|
|
|
)
|
|
|
|
) {
|
|
|
|
const conftrib = fs.readJSONSync(
|
|
|
|
`${process.env.dirtown}/tribes/itm/${req.session.header.xtribe}.json`
|
|
|
|
);
|
|
|
|
if (conftrib.sms) confsms = conftrib.sms;
|
|
|
|
}
|
|
|
|
data.From=confsms.From
|
|
|
|
const sendsms= await axios.post(confsms.url,
|
|
|
|
{
|
|
|
|
headers: {
|
|
|
|
Authorization: `Bearer ${confsms.MJ_TOKEN}`,
|
|
|
|
"Content-Type": "application/json",
|
|
|
|
},
|
|
|
|
body: JSON.stringify(data),
|
|
|
|
});
|
|
|
|
if (sendsms.status==200){
|
|
|
|
return {status:200,ref:"Notifications",msg:"successfullsentsms"};
|
|
|
|
}else{
|
|
|
|
return {status:sendsms.status, ref:"Notifications",msg:"errsendsms",err:sendsms.data}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* si tout se passe bien:
|
|
|
|
{
|
|
|
|
"From": "MJPilot",
|
|
|
|
"To": "+33600000000",
|
|
|
|
"Text": "Have a nice SMS flight with Mailjet !",
|
|
|
|
"MessageId": "2034075536371630429",
|
|
|
|
"SmsCount": 1,
|
|
|
|
"CreationTS": 1521626400,
|
|
|
|
"SentTS": 1521626402,
|
|
|
|
"Cost": {
|
|
|
|
"Value": 0.0012,
|
|
|
|
"Currency": "EUR"
|
|
|
|
},
|
|
|
|
"Status": {
|
|
|
|
"Code": 2,
|
|
|
|
"Name": "sent",
|
|
|
|
"Description": "Message sent"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
};
|
|
|
|
|
|
|
|
Notifications.sendmail = async (data, tribe) => {
|
|
|
|
/**
|
|
|
|
* @param {string} data.From an email authorized by smtp used priority from header xtribe
|
|
|
|
* @param {string} data.To list of email separate by ,
|
|
|
|
* @param {string} data.subject
|
|
|
|
* @param {string} data.html
|
|
|
|
* @param {string} data.text
|
|
|
|
* @param {string} data.Cc list of email in copy
|
|
|
|
* @param {string} data.Bcc list of email in hidden copy
|
|
|
|
* @param {string} data.filelist an array of object {filename:"",pathfile:"",filetype:""} pathfile to attach as file name of type:filetype "filename" to this email
|
|
|
|
* example of filetype : "text/plain", "text/csv", image/gif", "application/json", "application/zip"
|
|
|
|
*
|
|
|
|
* @example data
|
|
|
|
* {"From":"wall-ants.ndda.fr",
|
|
|
|
* "To":"wall-ants.ndda.fr",
|
|
|
|
* "subject":"Test",
|
|
|
|
* "html":"<h1>test welcome</h1>",
|
|
|
|
* "text":"test welcome",
|
|
|
|
* "attachments":[{filename:"text.txt",pathfile:"/media/phil/textA.txt","contenttype":"text/plain"}]
|
|
|
|
* }
|
|
|
|
* @return {object} { status: 200, ref:"pagans",msg:"aliasexist",data: { alias, publicKey } }
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
if (!conf.smtp) {
|
|
|
|
return {
|
|
|
|
status: 412,
|
|
|
|
ref: "Notifications",
|
|
|
|
msg: "missingconf",
|
|
|
|
tribe: tribeId,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
let missingk = [];
|
|
|
|
["from", "to", "subject", "html", "text"].forEach((k) => {
|
|
|
|
if (!data[k]) {
|
|
|
|
missingk.push(k);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
if (missingk.lenght > 0) {
|
|
|
|
return {
|
|
|
|
status: 428,
|
|
|
|
ref: "Notifications",
|
|
|
|
msg: "missingdata",
|
|
|
|
missingk: missingk,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
const conftribfile=`${process.env.dirtown}/tribes/itm/${tribe}.json`;
|
|
|
|
const confsmtp =(fs.existsSync(conftribfile))? fs.readJSONSync(conftribfile).smtp : conf.smtp;
|
|
|
|
|
|
|
|
//const client = smtp.connect(confsmtp);
|
|
|
|
const transporter = await nodemailer.createTransport(confsmtp);
|
|
|
|
//@todo add attachments management
|
|
|
|
let missingfile=[]
|
|
|
|
if (missingfile.lenght > 0)
|
|
|
|
return {
|
|
|
|
status: 428,
|
|
|
|
ref: "Notifications",
|
|
|
|
msg: "missingfile",
|
|
|
|
missingfile: missingfile,
|
|
|
|
};
|
|
|
|
try {
|
|
|
|
// Send the email
|
|
|
|
//const res = await client.sendMail(data)
|
|
|
|
const res = await transporter.sendMail(data)
|
|
|
|
//console.log('res envoie',res)
|
|
|
|
return { status: 200, ref: "Notifications", msg: "successfullsent", data };
|
|
|
|
} catch (err) {
|
|
|
|
//console.log('err envoie',err)
|
|
|
|
return { status: 502, ref: "Notifications", msg: "errsendmail", err: err };
|
|
|
|
}
|
2023-05-12 05:59:32 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = Notifications;
|