cremeaux/scripts2/directus-users-create.js

182 lines
6.4 KiB
JavaScript
Raw Permalink Normal View History

2023-12-11 09:47:46 +01:00
import { Directus } from '@directus/sdk';
import fs from 'fs'
import yaml from 'js-yaml'
import nodemailer from 'nodemailer'
import crypto from 'crypto'
const DIRECTUS_URL = process.env.DIRECTUS_URL
const DIRECTUS_TOKEN = process.env.DIRECTUS_TOKEN
async function sendMail() {
// Envoi de mail
const directus = new Directus(DIRECTUS_URL, { auth: { staticToken: DIRECTUS_TOKEN }});
let transporter = nodemailer.createTransport({
host: "mail.mailo.com",
port: 465,
secure: true, // upgrade later with STARTTLS
auth: {
user: "simon@weko.io",
pass: "JfXO1LLkCaVO1wT",
},
});
const name = "A Petit Point"
const contact = "Bénédicte JOUHANNAUD-DUBOST"
const mail = "simon@lamelio.fr"
// send mail with defined transport object
let info = await transporter.sendMail({
from: '"Simon CONSTANS" <simon@weko.io>', // sender address
to: '"' + contact + '" <' + mail + '>', // list of receivers
subject: "Demande de texte pour le bulletin municipal 2022", // Subject line
text: `Bonjour ${contact},
Je vous contact au sujet du bulletin municipal 2022 de Crémeaux.
Vous êtes la personne identifié pour remplir la partie de l'association «${name}». Si ce n'est pas le cas pouvez vous transférer le mail à la personne concernée.
Nous avons mis en place un système pour que vous puissiez remplir directement en ligne et nous faciliter le travail de mise en page.
Vous pouvez vous connecter :
- à l'adresse suivante : ${DIRECTUS_URL}
- avec l'identifiant : ${mail}
- et le mot de passe suivant : blablabla
Merci de remplir la partie votre document avant le 1 janvier 2022. Si vous avez un souci envoyez un mail à communication@cremeaux.fr.
Cordialement,
--
Simon CONSTANS de la commission communication de la municipalité de Crémeaux.`
// "Hello world?", // plain text body
// html: "<b>Hello world?</b>", // html body
});
console.log(info)
}
class Cremeaux {
constructor() {
this.directus = new Directus(DIRECTUS_URL, { auth: { staticToken: DIRECTUS_TOKEN }});
this.transporter = nodemailer.createTransport({
host: "mail.mailo.com",
port: 465,
secure: true, // upgrade later with STARTTLS
auth: {
user: "simon@weko.io",
pass: "JfXO1LLkCaVO1wT",
},
})
}
async associationCreate(association, user) {
const Association = await this.directus.items('Association')
return Association.createOne({ denomination: association.denomination, user_created: user.id })
}
async userCreate(association) {
// const role = '450a67e7-c1ad-46c1-bc38-7b5a82803f72'
// const users = yaml.load(fs.readFileSync('./directus-users.yml', 'utf8'));
const user = {
first_name: association.prenom,
last_name: association.nom,
email: association.mail,
password: association.password,
telephone: association.telephone,
language: 'fr-FR',
role: '82da3185-0bf0-497b-a72f-e0d6fa1645e2'
}
const Users = await this.directus.items('directus_users')
return Users.createOne(user);
}
async bulletinCreate(association, user) {
const Bulletin = await this.directus.items('Bulletin')
return Bulletin.createOne({ titre: association.denomination, user_created: user.id });
}
async sendMail(compte, bulletin, association) {
const name = compte.denomination
const contact = `${compte.prenom} ${compte.nom}`
const mail = compte.mail
const password = compte.password
// send mail with defined transport object
return await this.transporter.sendMail({
from: '"Simon CONSTANS" <simon@weko.io>', // sender address
to: '"' + contact + '" <' + mail + '>', // list of receivers
subject: "Demande de texte pour le bulletin municipal 2022", // Subject line
text: `Bonjour ${contact},
Je vous contact au sujet du bulletin municipal 2022 de Crémeaux.
Vous êtes la personne identifié pour remplir la partie de l'association « ${name} ». Si ce n'est pas le cas, pouvez vous transférer le mail à la personne concernée.
Nous avons mis en place un système pour que vous puissiez remplir directement en ligne et nous faciliter le travail de mise en page, sans avoir à passer par de nombreux mails.
Vous pouvez vous connecter :
- à l'adresse : ${DIRECTUS_URL}
- avec l'identifiant : ${mail}
- et le mot de passe : ${password}
Une fois connecté, vous pouvez remplir :
- les informations spécifiques de l'association ainsi que son bureau :
${DIRECTUS_URL}/admin/content/Association/${association.id}
- le texte pour le bulletin :
${DIRECTUS_URL}/admin/content/Bulletin/${bulletin.id}
- changer votre mot de passe :
${DIRECTUS_URL}/admin/users/me
Merci de remplir les informations avant le 10 janvier 2022.
Si vous avez un souci vous pouvez retrouver une fiche explicative à cette adresse https://md.weko.io/contenu_cremeaux_fr
ou envoyez un mail à com@cremeaux.fr
Cordialement,
--
Simon CONSTANS pour la commission communication de la municipalité de Crémeaux.`
// "Hello world?", // plain text body
// html: "<b>Hello world?</b>", // html body
});
}
}
async function main() {
// await associationsCreate()
const cremeaux = new Cremeaux()
const associations = JSON.parse(fs.readFileSync('./associations.json', 'utf8'))
// const associations = await cremeaux.assocationsReadMany()
for (const association of associations) {
// if (association.prenom == 'Sandra') {
console.log(`Traitement de ${association.denomination} :`)
let user = { id: '9f4578b3-22b9-4b1d-91ca-eaf4fbc84a1e' }
let password = ''
if (association.mail) {
association.password = crypto.createHash('sha256').update(association.mail, 'utf8').digest('hex').substring(association.mail.lenght, 10)
// Création de l'utilisateur
user = await cremeaux.userCreate(association)
console.log(`- L'utilisateur '${user.email}' a été créé avec le mot de passe '${password}'.`)
}
// Création du bulletin
const bulletin = await cremeaux.bulletinCreate(association, user);
console.log(`- Le bulletin de l'association ${bulletin.titre} a été créé.`)
// Création d'une association
const asso = await cremeaux.associationCreate(association, user);
console.log(`- L'association ${asso.denomination} a été créé.`)
if (association.mail) {
// Envoi d'un mail
const mail = await cremeaux.sendMail(association, bulletin, asso)
console.log(mail)
}
// }
}
}
main().catch(console.error);