Merge pull request #2920 from specklesystems/fabians/emails-ioc-7
chore(server): emails IoC 7 - initializeVerificationOnRegistrationFactory
This commit is contained in:
@@ -18,3 +18,5 @@ export type DeleteOldAndInsertNewVerification = (email: string) => Promise<strin
|
||||
*/
|
||||
|
||||
export type RequestNewEmailVerification = (emailId: string) => Promise<void>
|
||||
|
||||
export type RequestEmailVerification = (userId: string) => Promise<void>
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
/* istanbul ignore file */
|
||||
import { db } from '@/db/knex'
|
||||
import { moduleLogger } from '@/logging/logging'
|
||||
import { UsersEmitter } from '@/modules/core/events/usersEmitter'
|
||||
import { findPrimaryEmailForUserFactory } from '@/modules/core/repositories/userEmails'
|
||||
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 * as SendingService from '@/modules/emails/services/sending'
|
||||
import { initializeVerificationOnRegistration } from '@/modules/emails/services/verification/request'
|
||||
import {
|
||||
initializeVerificationOnRegistrationFactory,
|
||||
requestEmailVerificationFactory
|
||||
} from '@/modules/emails/services/verification/request'
|
||||
import { initializeTransporter } from '@/modules/emails/utils/transporter'
|
||||
import { Optional, SpeckleModule } from '@/modules/shared/helpers/typeHelper'
|
||||
|
||||
@@ -19,6 +29,21 @@ const emailsModule: SpeckleModule = {
|
||||
|
||||
// init event listeners
|
||||
if (isInitial) {
|
||||
const initializeVerificationOnRegistration =
|
||||
initializeVerificationOnRegistrationFactory({
|
||||
userEmitterListener: UsersEmitter.listen,
|
||||
requestEmailVerification: requestEmailVerificationFactory({
|
||||
getUser,
|
||||
getServerInfo,
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory(
|
||||
{ db }
|
||||
),
|
||||
findPrimaryEmailForUser: findPrimaryEmailForUserFactory({ db }),
|
||||
sendEmail: SendingService.sendEmail,
|
||||
renderEmail
|
||||
})
|
||||
})
|
||||
|
||||
quitVerificationListeners = initializeVerificationOnRegistration()
|
||||
}
|
||||
},
|
||||
|
||||
@@ -6,11 +6,9 @@ import { UserEmail } from '@/modules/core/domain/userEmails/types'
|
||||
import { UsersEmitter, UsersEvents } from '@/modules/core/events/usersEmitter'
|
||||
import { getEmailVerificationFinalizationRoute } from '@/modules/core/helpers/routeHelper'
|
||||
import { ServerInfo, UserRecord } from '@/modules/core/helpers/types'
|
||||
import { findPrimaryEmailForUserFactory } from '@/modules/core/repositories/userEmails'
|
||||
import { getUser } from '@/modules/core/repositories/users'
|
||||
import { getServerInfo } from '@/modules/core/services/generic'
|
||||
import { EmailVerificationRequestError } from '@/modules/emails/errors'
|
||||
import { deleteOldAndInsertNewVerificationFactory } from '@/modules/emails/repositories'
|
||||
import {
|
||||
EmailTemplateParams,
|
||||
renderEmail
|
||||
@@ -19,9 +17,9 @@ import { sendEmail } from '@/modules/emails/services/sending'
|
||||
import { getServerOrigin } from '@/modules/shared/helpers/envHelper'
|
||||
import {
|
||||
DeleteOldAndInsertNewVerification,
|
||||
RequestEmailVerification,
|
||||
RequestNewEmailVerification
|
||||
} from '@/modules/emails/domain/operations'
|
||||
import { db } from '@/db/knex'
|
||||
|
||||
const EMAIL_SUBJECT = 'Speckle Account E-mail Verification'
|
||||
|
||||
@@ -178,8 +176,10 @@ const sendVerificationEmailFactory =
|
||||
* Request email verification (send out verification message) for user with specified ID
|
||||
*/
|
||||
export const requestEmailVerificationFactory =
|
||||
(deps: CreateNewVerificationDeps & SendVerificationEmailDeps) =>
|
||||
async (userId: string) => {
|
||||
(
|
||||
deps: CreateNewVerificationDeps & SendVerificationEmailDeps
|
||||
): RequestEmailVerification =>
|
||||
async (userId) => {
|
||||
const newVerificationState = await createNewVerificationFactory(deps)(userId)
|
||||
await sendVerificationEmailFactory(deps)(newVerificationState)
|
||||
}
|
||||
@@ -187,25 +187,19 @@ export const requestEmailVerificationFactory =
|
||||
/**
|
||||
* Listen for user:created events and trigger email verification initialization
|
||||
*/
|
||||
export function initializeVerificationOnRegistration() {
|
||||
return UsersEmitter.listen(UsersEvents.Created, async ({ user }) => {
|
||||
// user might already be verified because of registration through an external identity provider
|
||||
if (user.verified) return
|
||||
export const initializeVerificationOnRegistrationFactory =
|
||||
(deps: {
|
||||
userEmitterListener: typeof UsersEmitter.listen
|
||||
requestEmailVerification: RequestEmailVerification
|
||||
}) =>
|
||||
() => {
|
||||
return deps.userEmitterListener(UsersEvents.Created, async ({ user }) => {
|
||||
// user might already be verified because of registration through an external identity provider
|
||||
if (user.verified) return
|
||||
|
||||
const requestEmailVerification = requestEmailVerificationFactory({
|
||||
getUser,
|
||||
getServerInfo,
|
||||
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({
|
||||
db
|
||||
}),
|
||||
findPrimaryEmailForUser: findPrimaryEmailForUserFactory({ db }),
|
||||
sendEmail,
|
||||
renderEmail
|
||||
await deps.requestEmailVerification(user.id)
|
||||
})
|
||||
|
||||
await requestEmailVerification(user.id)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
type RequestNewEmailVerificationDeps = CreateNewEmailVerificationFactoryDeps
|
||||
|
||||
|
||||
Reference in New Issue
Block a user