Merge pull request #2919 from specklesystems/fabians/emails-ioc-6
chore(server): emails IoC 6 - sendVerificationEmailFactory
This commit is contained in:
@@ -18,12 +18,16 @@ import { validateAndCreateUserEmailFactory } from '@/modules/core/services/userE
|
||||
import { getUser } from '@/modules/core/repositories/users'
|
||||
import { getServerInfo } from '@/modules/core/services/generic'
|
||||
import { deleteOldAndInsertNewVerificationFactory } from '@/modules/emails/repositories'
|
||||
import { renderEmail } from '@/modules/emails/services/emailRendering'
|
||||
import { sendEmail } from '@/modules/emails/services/sending'
|
||||
|
||||
const requestNewEmailVerification = requestNewEmailVerificationFactory({
|
||||
findEmail: findEmailFactory({ db }),
|
||||
getUser,
|
||||
getServerInfo,
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db })
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db }),
|
||||
renderEmail,
|
||||
sendEmail
|
||||
})
|
||||
|
||||
export = {
|
||||
|
||||
@@ -56,6 +56,8 @@ const {
|
||||
const {
|
||||
deleteOldAndInsertNewVerificationFactory
|
||||
} = require('@/modules/emails/repositories')
|
||||
const { renderEmail } = require('@/modules/emails/services/emailRendering')
|
||||
const { sendEmail } = require('@/modules/emails/services/sending')
|
||||
|
||||
const _changeUserRole = async ({ userId, role }) =>
|
||||
await Acl().where({ userId }).update({ role })
|
||||
@@ -77,7 +79,9 @@ const requestNewEmailVerification = requestNewEmailVerificationFactory({
|
||||
findEmail: findEmailFactory({ db }),
|
||||
getUser,
|
||||
getServerInfo,
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db })
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db }),
|
||||
renderEmail,
|
||||
sendEmail
|
||||
})
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -28,12 +28,16 @@ import {
|
||||
import { requestNewEmailVerificationFactory } from '@/modules/emails/services/verification/request'
|
||||
import { getServerInfo } from '@/modules/core/services/generic'
|
||||
import { deleteOldAndInsertNewVerificationFactory } from '@/modules/emails/repositories'
|
||||
import { renderEmail } from '@/modules/emails/services/emailRendering'
|
||||
import { sendEmail } from '@/modules/emails/services/sending'
|
||||
|
||||
const requestNewEmailVerification = requestNewEmailVerificationFactory({
|
||||
findEmail: findEmailFactory({ db }),
|
||||
getUser,
|
||||
getServerInfo,
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db })
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db }),
|
||||
renderEmail,
|
||||
sendEmail
|
||||
})
|
||||
|
||||
const createUserEmail = validateAndCreateUserEmailFactory({
|
||||
|
||||
@@ -39,12 +39,16 @@ import {
|
||||
import { requestNewEmailVerificationFactory } from '@/modules/emails/services/verification/request'
|
||||
import { getServerInfo } from '@/modules/core/services/generic'
|
||||
import { deleteOldAndInsertNewVerificationFactory } from '@/modules/emails/repositories'
|
||||
import { renderEmail } from '@/modules/emails/services/emailRendering'
|
||||
import { sendEmail } from '@/modules/emails/services/sending'
|
||||
|
||||
const requestNewEmailVerification = requestNewEmailVerificationFactory({
|
||||
findEmail: findEmailFactory({ db }),
|
||||
getUser,
|
||||
getServerInfo,
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db })
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db }),
|
||||
renderEmail,
|
||||
sendEmail
|
||||
})
|
||||
|
||||
const createUserEmail = validateAndCreateUserEmailFactory({
|
||||
|
||||
@@ -33,12 +33,16 @@ import { requestNewEmailVerificationFactory } from '@/modules/emails/services/ve
|
||||
import { getUser } from '@/modules/core/repositories/users'
|
||||
import { getServerInfo } from '@/modules/core/services/generic'
|
||||
import { deleteOldAndInsertNewVerificationFactory } from '@/modules/emails/repositories'
|
||||
import { renderEmail } from '@/modules/emails/services/emailRendering'
|
||||
import { sendEmail } from '@/modules/emails/services/sending'
|
||||
|
||||
const requestNewEmailVerification = requestNewEmailVerificationFactory({
|
||||
findEmail: findEmailFactory({ db }),
|
||||
getUser,
|
||||
getServerInfo,
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db })
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db }),
|
||||
renderEmail,
|
||||
sendEmail
|
||||
})
|
||||
|
||||
const createUserEmail = validateAndCreateUserEmailFactory({
|
||||
|
||||
@@ -7,13 +7,17 @@ import {
|
||||
deleteOldAndInsertNewVerificationFactory,
|
||||
getPendingTokenFactory
|
||||
} from '@/modules/emails/repositories'
|
||||
import { renderEmail } from '@/modules/emails/services/emailRendering'
|
||||
import { sendEmail } from '@/modules/emails/services/sending'
|
||||
import { requestEmailVerificationFactory } from '@/modules/emails/services/verification/request'
|
||||
|
||||
const requestEmailVerification = requestEmailVerificationFactory({
|
||||
getUser,
|
||||
getServerInfo,
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db }),
|
||||
findPrimaryEmailForUser: findPrimaryEmailForUserFactory({ db })
|
||||
findPrimaryEmailForUser: findPrimaryEmailForUserFactory({ db }),
|
||||
sendEmail,
|
||||
renderEmail
|
||||
})
|
||||
|
||||
export = {
|
||||
|
||||
@@ -152,29 +152,36 @@ function buildEmailTemplateParams(verificationId: string): EmailTemplateParams {
|
||||
}
|
||||
}
|
||||
|
||||
async function sendVerificationEmail(state: VerificationRequestContext) {
|
||||
const emailTemplateParams = buildEmailTemplateParams(state.verificationId)
|
||||
const { html, text } = await renderEmail(
|
||||
emailTemplateParams,
|
||||
state.serverInfo,
|
||||
// im deliberately setting this to null, so that the email will not show the unsubscribe bit
|
||||
null
|
||||
)
|
||||
await sendEmail({
|
||||
to: state.email.email,
|
||||
subject: EMAIL_SUBJECT,
|
||||
text,
|
||||
html
|
||||
})
|
||||
type SendVerificationEmailDeps = {
|
||||
sendEmail: typeof sendEmail
|
||||
renderEmail: typeof renderEmail
|
||||
}
|
||||
|
||||
const sendVerificationEmailFactory =
|
||||
(deps: SendVerificationEmailDeps) => async (state: VerificationRequestContext) => {
|
||||
const emailTemplateParams = buildEmailTemplateParams(state.verificationId)
|
||||
const { html, text } = await deps.renderEmail(
|
||||
emailTemplateParams,
|
||||
state.serverInfo,
|
||||
// im deliberately setting this to null, so that the email will not show the unsubscribe bit
|
||||
null
|
||||
)
|
||||
await deps.sendEmail({
|
||||
to: state.email.email,
|
||||
subject: EMAIL_SUBJECT,
|
||||
text,
|
||||
html
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Request email verification (send out verification message) for user with specified ID
|
||||
*/
|
||||
export const requestEmailVerificationFactory =
|
||||
(deps: CreateNewVerificationDeps) => async (userId: string) => {
|
||||
(deps: CreateNewVerificationDeps & SendVerificationEmailDeps) =>
|
||||
async (userId: string) => {
|
||||
const newVerificationState = await createNewVerificationFactory(deps)(userId)
|
||||
await sendVerificationEmail(newVerificationState)
|
||||
await sendVerificationEmailFactory(deps)(newVerificationState)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -191,7 +198,9 @@ export function initializeVerificationOnRegistration() {
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({
|
||||
db
|
||||
}),
|
||||
findPrimaryEmailForUser: findPrimaryEmailForUserFactory({ db })
|
||||
findPrimaryEmailForUser: findPrimaryEmailForUserFactory({ db }),
|
||||
sendEmail,
|
||||
renderEmail
|
||||
})
|
||||
|
||||
await requestEmailVerification(user.id)
|
||||
@@ -201,10 +210,12 @@ export function initializeVerificationOnRegistration() {
|
||||
type RequestNewEmailVerificationDeps = CreateNewEmailVerificationFactoryDeps
|
||||
|
||||
export const requestNewEmailVerificationFactory =
|
||||
(deps: RequestNewEmailVerificationDeps): RequestNewEmailVerification =>
|
||||
(
|
||||
deps: RequestNewEmailVerificationDeps & SendVerificationEmailDeps
|
||||
): RequestNewEmailVerification =>
|
||||
async (emailId) => {
|
||||
const createNewEmailVerification = createNewEmailVerificationFactory(deps)
|
||||
const newVerificationState = await createNewEmailVerification(emailId)
|
||||
|
||||
await sendVerificationEmail(newVerificationState)
|
||||
await sendVerificationEmailFactory(deps)(newVerificationState)
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@ import { db } from '@/db/knex'
|
||||
import { requestEmailVerificationFactory } from '@/modules/emails/services/verification/request'
|
||||
import { getServerInfo } from '@/modules/core/services/generic'
|
||||
import { findPrimaryEmailForUserFactory } from '@/modules/core/repositories/userEmails'
|
||||
import { sendEmail } from '@/modules/emails/services/sending'
|
||||
import { renderEmail } from '@/modules/emails/services/emailRendering'
|
||||
|
||||
const mailerMock = EmailSendingServiceMock
|
||||
const getPendingToken = getPendingTokenFactory({ db })
|
||||
@@ -37,7 +39,9 @@ const requestEmailVerification = requestEmailVerificationFactory({
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({
|
||||
db
|
||||
}),
|
||||
findPrimaryEmailForUser: findPrimaryEmailForUserFactory({ db })
|
||||
findPrimaryEmailForUser: findPrimaryEmailForUserFactory({ db }),
|
||||
sendEmail,
|
||||
renderEmail
|
||||
})
|
||||
|
||||
const cleanup = async () => {
|
||||
|
||||
@@ -69,12 +69,16 @@ import { validateAndCreateUserEmailFactory } from '@/modules/core/services/userE
|
||||
import { getServerInfo } from '@/modules/core/services/generic'
|
||||
import { requestNewEmailVerificationFactory } from '@/modules/emails/services/verification/request'
|
||||
import { deleteOldAndInsertNewVerificationFactory } from '@/modules/emails/repositories'
|
||||
import { renderEmail } from '@/modules/emails/services/emailRendering'
|
||||
import { sendEmail } from '@/modules/emails/services/sending'
|
||||
|
||||
const requestNewEmailVerification = requestNewEmailVerificationFactory({
|
||||
findEmail: findEmailFactory({ db }),
|
||||
getUser,
|
||||
getServerInfo,
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db })
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db }),
|
||||
renderEmail,
|
||||
sendEmail
|
||||
})
|
||||
|
||||
const buildCollectAndValidateResourceTargets = () =>
|
||||
|
||||
@@ -125,12 +125,16 @@ import { getServerInfo } from '@/modules/core/services/generic'
|
||||
import { mapWorkspaceRoleToInitialProjectRole } from '@/modules/workspaces/domain/logic'
|
||||
import { updateStreamRoleAndNotify } from '@/modules/core/services/streams/management'
|
||||
import { deleteOldAndInsertNewVerificationFactory } from '@/modules/emails/repositories'
|
||||
import { renderEmail } from '@/modules/emails/services/emailRendering'
|
||||
import { sendEmail } from '@/modules/emails/services/sending'
|
||||
|
||||
const requestNewEmailVerification = requestNewEmailVerificationFactory({
|
||||
findEmail: findEmailFactory({ db }),
|
||||
getUser,
|
||||
getServerInfo,
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db })
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db }),
|
||||
renderEmail,
|
||||
sendEmail
|
||||
})
|
||||
|
||||
const buildCollectAndValidateResourceTargets = () =>
|
||||
|
||||
Reference in New Issue
Block a user