Skip to content
This repository has been archived by the owner on Aug 5, 2024. It is now read-only.

Commit

Permalink
feat(getUser): add mattermostInfo and email service info on getUser a… (
Browse files Browse the repository at this point in the history
#2326)

* feat(getUser): add mattermostInfo and email service info on getUser api data

* fix(getContactInfo): add missing return

* fix: removed useless import

* test: fix now mattermost search use is always called at least once
  • Loading branch information
LucasCharrier authored Jan 10, 2024
1 parent 4f42a99 commit 78a4ad5
Show file tree
Hide file tree
Showing 7 changed files with 246 additions and 134 deletions.
213 changes: 118 additions & 95 deletions src/config/email.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@ import {
SendEmail,
SmtpBlockedContactsEmailDelete,
UpdateContactEmail,
UnblacklistContactEmail
} from '@modules/email'
UnblacklistContactEmail,
GetContactInfo,
} from '@modules/email';
import {
fakeAddContactsToMailingLists,
fakeGetAllTransacBlockedContacts,
Expand All @@ -23,133 +24,155 @@ import {
makeSendEmailNodemailer,
fakeGetAllContacts,
fakeGetAllContactsFromList,
fakeUnblacklistContactEmail
} from '@infra/email'
import { makeSendinblue } from '@infra/email/sendInBlue'
import htmlBuilder from '@modules/htmlbuilder/htmlbuilder'
fakeUnblacklistContactEmail,
fakeGetContactInfo,
} from '@infra/email';
import { makeSendinblue } from '@infra/email/sendInBlue';
import htmlBuilder from '@modules/htmlbuilder/htmlbuilder';

let sendEmail: SendEmail = fakeSendEmail
let addContactsToMailingLists: AddContactsToMailingLists = fakeAddContactsToMailingLists
let removeContactsFromMailingList: RemoveContactsFromMailingList = fakeRemoveContactsFromMailingList
let sendCampaignEmail: SendCampaignEmail = fakeSendCampaignEmail
let updateContactEmail: UpdateContactEmail = fakeUpdateContactEmail
let smtpBlockedContactsEmailDelete: SmtpBlockedContactsEmailDelete = fakeSmtpBlockedContactsEmailDelete
let getAllTransacBlockedContacts: GetAllTransacBlockedContacts = fakeGetAllTransacBlockedContacts
let getAllContacts: GetAllContacts = fakeGetAllContacts
let getAllContactsFromList: GetAllContactsFromList = fakeGetAllContactsFromList
let unblacklistContactEmail: UnblacklistContactEmail = fakeUnblacklistContactEmail
let sendEmail: SendEmail = fakeSendEmail;
let addContactsToMailingLists: AddContactsToMailingLists =
fakeAddContactsToMailingLists;
let removeContactsFromMailingList: RemoveContactsFromMailingList =
fakeRemoveContactsFromMailingList;
let sendCampaignEmail: SendCampaignEmail = fakeSendCampaignEmail;
let updateContactEmail: UpdateContactEmail = fakeUpdateContactEmail;
let smtpBlockedContactsEmailDelete: SmtpBlockedContactsEmailDelete =
fakeSmtpBlockedContactsEmailDelete;
let getAllTransacBlockedContacts: GetAllTransacBlockedContacts =
fakeGetAllTransacBlockedContacts;
let getAllContacts: GetAllContacts = fakeGetAllContacts;
let getAllContactsFromList: GetAllContactsFromList = fakeGetAllContactsFromList;
let unblacklistContactEmail: UnblacklistContactEmail =
fakeUnblacklistContactEmail;
let getContactInfo: GetContactInfo = fakeGetContactInfo;

enum MAIL_SERVICES {
mailjet='mailjet',
SendinBlue='SendinBlue',
malspons='mailspons'
mailjet = 'mailjet',
SendinBlue = 'SendinBlue',
malspons = 'mailspons',
}

export const buildEmailHeader : Record<MAIL_SERVICES, Record<'standart'|'campaign', any>> = {
export const buildEmailHeader: Record<
MAIL_SERVICES,
Record<'standart' | 'campaign', any>
> = {
mailjet: {
standart: () => ({ 'X-Mailjet-TrackOpen': '0', 'X-Mailjet-TrackClick': '0' }),
standart: () => ({
'X-Mailjet-TrackOpen': '0',
'X-Mailjet-TrackClick': '0',
}),
campaign: (id) => {
return {
'X-Mailjet-Campaign': id,
'X-Mailjet-TrackOpen': '1',
'X-Mailjet-TrackClick': '1',
}
}
};
},
},
SendinBlue: {
standart: () => ({ 'X-Mailjet-TrackOpen': '0', 'X-Mailjet-TrackClick': '0' }),
standart: () => ({
'X-Mailjet-TrackOpen': '0',
'X-Mailjet-TrackClick': '0',
}),
campaign: (id) => {
return {}
}
return {};
},
},
mailspons: {
standart: () => ({}),
campaign: () => {
return {}
}
}
}
return {};
},
},
};

export const EMAIL_CONFIG = {
MAIL_DEBUG: process.env.MAIL_DEBUG,
MAIL_HOST: process.env.MAIL_HOST,
MAIL_IGNORE_TLS: process.env.MAIL_IGNORE_TLS,
MAIL_PASS: process.env.MAIL_PASS,
MAIL_PORT: process.env.MAIL_PORT,
MAIL_SENDER: process.env.MAIL_SENDER || 'espace-membre@incubateur.net',
MAIL_SERVICE: process.env.MAIL_SERVICE,
MAIL_USER: process.env.MAIL_USER,
SIB_APIKEY_PUBLIC: process.env.SIB_APIKEY_PUBLIC,
SIB_APIKEY_PRIVATE: process.env.SIB_APIKEY_PRIVATE,
}
export const EMAIL_CONFIG = {
MAIL_DEBUG: process.env.MAIL_DEBUG,
MAIL_HOST: process.env.MAIL_HOST,
MAIL_IGNORE_TLS: process.env.MAIL_IGNORE_TLS,
MAIL_PASS: process.env.MAIL_PASS,
MAIL_PORT: process.env.MAIL_PORT,
MAIL_SENDER: process.env.MAIL_SENDER || 'espace-membre@incubateur.net',
MAIL_SERVICE: process.env.MAIL_SERVICE,
MAIL_USER: process.env.MAIL_USER,
SIB_APIKEY_PUBLIC: process.env.SIB_APIKEY_PUBLIC,
SIB_APIKEY_PRIVATE: process.env.SIB_APIKEY_PRIVATE,
};

const {
MAIL_DEBUG,
MAIL_HOST,
MAIL_IGNORE_TLS,
MAIL_PASS,
MAIL_PORT,
MAIL_SENDER,
MAIL_SERVICE,
MAIL_USER,
SIB_APIKEY_PUBLIC,
SIB_APIKEY_PRIVATE,
} = EMAIL_CONFIG
MAIL_DEBUG,
MAIL_HOST,
MAIL_IGNORE_TLS,
MAIL_PASS,
MAIL_PORT,
MAIL_SENDER,
MAIL_SERVICE,
MAIL_USER,
SIB_APIKEY_PUBLIC,
SIB_APIKEY_PRIVATE,
} = EMAIL_CONFIG;

if (process.env.NODE_ENV !== 'test') {

try {
const sendInBlue = makeSendinblue({
MAIL_SENDER,
SIB_APIKEY_PUBLIC,
SIB_APIKEY_PRIVATE,
htmlBuilder
})
const emailer : IMailingService = process.env.MAIL_USE_SIB ? sendInBlue : { sendEmail:makeSendEmailNodemailer({
MAIL_DEBUG,
MAIL_HOST,
MAIL_IGNORE_TLS,
MAIL_PASS,
MAIL_PORT,
MAIL_SENDER,
MAIL_SERVICE,
MAIL_SERVICE_HEADERS: MAIL_SERVICE ? buildEmailHeader[EMAIL_CONFIG.MAIL_SERVICE]['standart']() : {},
MAIL_USER,
htmlBuilder
}
)}
htmlBuilder,
});
const emailer: IMailingService = process.env.MAIL_USE_SIB
? sendInBlue
: {
sendEmail: makeSendEmailNodemailer({
MAIL_DEBUG,
MAIL_HOST,
MAIL_IGNORE_TLS,
MAIL_PASS,
MAIL_PORT,
MAIL_SENDER,
MAIL_SERVICE,
MAIL_SERVICE_HEADERS: MAIL_SERVICE
? buildEmailHeader[EMAIL_CONFIG.MAIL_SERVICE]['standart']()
: {},
MAIL_USER,
htmlBuilder,
}),
};
if (process.env.MAIL_USE_SIB) {
console.log('Emails will be sent using Sendinblue')
console.log('Emails will be sent using Sendinblue');
} else {
console.log('Emails will be sent using Nodemailer')
console.log('Emails will be sent using Nodemailer');
}
sendEmail = emailer.sendEmail
sendCampaignEmail = sendInBlue.sendCampaignEmail
addContactsToMailingLists = sendInBlue.addContactsToMailingLists
removeContactsFromMailingList = sendInBlue.removeContactsFromMailingList
updateContactEmail = sendInBlue.updateContactEmail
smtpBlockedContactsEmailDelete = sendInBlue.smtpBlockedContactsEmailDelete
getAllTransacBlockedContacts = sendInBlue.getAllTransacBlockedContacts
getAllContacts = sendInBlue.getAllContacts
getAllContactsFromList = sendInBlue.getAllContactsFromList
unblacklistContactEmail = sendInBlue.unblacklistContactEmail
sendEmail = emailer.sendEmail;
sendCampaignEmail = sendInBlue.sendCampaignEmail;
addContactsToMailingLists = sendInBlue.addContactsToMailingLists;
removeContactsFromMailingList = sendInBlue.removeContactsFromMailingList;
updateContactEmail = sendInBlue.updateContactEmail;
smtpBlockedContactsEmailDelete = sendInBlue.smtpBlockedContactsEmailDelete;
getAllTransacBlockedContacts = sendInBlue.getAllTransacBlockedContacts;
getAllContacts = sendInBlue.getAllContacts;
getAllContactsFromList = sendInBlue.getAllContactsFromList;
unblacklistContactEmail = sendInBlue.unblacklistContactEmail;
getContactInfo = sendInBlue.getContactInfo;
} catch (e) {
console.error(e)
process.exit(1)
console.error(e);
process.exit(1);
}
} else {
console.log('Emails will go through a FAKE email service (no mails sent).')
console.log('Emails will go through a FAKE email service (no mails sent).');
}

export {
sendEmail,
addContactsToMailingLists,
sendCampaignEmail,
removeContactsFromMailingList,
updateContactEmail,
smtpBlockedContactsEmailDelete,
getAllTransacBlockedContacts,
getAllContacts,
getAllContactsFromList,
unblacklistContactEmail
}
sendEmail,
addContactsToMailingLists,
sendCampaignEmail,
removeContactsFromMailingList,
updateContactEmail,
smtpBlockedContactsEmailDelete,
getAllTransacBlockedContacts,
getAllContacts,
getAllContactsFromList,
unblacklistContactEmail,
getContactInfo,
};
29 changes: 29 additions & 0 deletions src/controllers/communityController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import { MemberWithPermission } from '@models/member';
import { CommunityPage } from '../views';
import betagouv from '../betagouv';
import { EMAIL_STATUS_READABLE_FORMAT } from '@/models/misc';
import { MattermostUser, getUserByEmail, searchUsers } from '@/lib/mattermost';
import { getContactInfo } from '@/config/email.config';

export async function getCommunity(req, res) {
getCommunityPageData(
Expand Down Expand Up @@ -175,6 +177,28 @@ async function getUserPageData(req, res, onSuccess, onError) {
if (config.ESPACE_MEMBRE_ADMIN.includes(req.auth.id)) {
availableEmailPros = await betagouv.getAvailableProEmailInfos();
}
let mattermostUser: MattermostUser = dbUser?.primary_email
? await getUserByEmail(dbUser.primary_email).catch((e) => null)
: null;
let [mattermostUserInTeamAndActive]: MattermostUser[] =
dbUser?.primary_email
? await searchUsers({
term: dbUser.primary_email,
team_id: config.mattermostTeamId,
allow_inactive: false,
}).catch((e) => [])
: [];
let emailServiceInfo = {};
if (dbUser.primary_email) {
emailServiceInfo['primary_email'] = await getContactInfo({
email: dbUser.primary_email,
});
}
if (dbUser.secondary_email) {
emailServiceInfo['secondary_email'] = await getContactInfo({
email: dbUser.secondary_email,
});
}
const title = user.userInfos ? user.userInfos.fullname : null;
onSuccess({
title,
Expand All @@ -186,6 +210,11 @@ async function getUserPageData(req, res, onSuccess, onError) {
isExpired: user.isExpired,
isAdmin: config.ESPACE_MEMBRE_ADMIN.includes(req.auth.id),
availableEmailPros,
mattermostInfo: {
hasMattermostAccount: !!mattermostUser,
isInactiveOrNotInTeam: !mattermostUserInTeamAndActive,
},
emailServiceInfo,
primaryEmail: dbUser ? dbUser.primary_email : '',
primaryEmailStatus: dbUser
? EMAIL_STATUS_READABLE_FORMAT[dbUser.primary_email_status]
Expand Down
Loading

0 comments on commit 78a4ad5

Please sign in to comment.