authenzify
Version:
server to manage authentication authorization of users and more
88 lines (72 loc) • 2.37 kB
JavaScript
import { render } from 'ejs'
import { lstat, readFile } from 'fs/promises'
export const getTemplateContentOrReadFile = async (content) => {
const isFile = await lstat(content)
.then((stats) => stats.isFile())
.catch(() => false)
return isFile ? readFile(content, 'utf-8') : content
}
export const getTemplatesContentOrReadFile = async (template) => {
return Object.fromEntries(
await Promise.all(
Object.entries(template).map(async ([key, fileNameOrContent]) => {
const template = await getTemplateContentOrReadFile(fileNameOrContent)
return [key, template]
}),
),
)
}
export const loadEmailTemplates = async (templates) => {
const resetPassword = await getTemplatesContentOrReadFile(
templates.forgotPassword,
)
const onVerification = await getTemplatesContentOrReadFile(
templates.onVerification,
)
const forgotPassword = await getTemplatesContentOrReadFile(
templates.forgotPassword,
)
const permissionsRequest = await getTemplatesContentOrReadFile(
templates.permissionsRequest,
)
const permissionsApprovedToUser = await getTemplatesContentOrReadFile(
templates.permissionsApprovedToUser,
)
const activation = await getTemplatesContentOrReadFile(templates.activation)
const renderTemplate = (templates, params) => {
const from = render(templates.from, params.from)
const subject = render(templates.subject, params.subject)
const html = render(templates.html, params.html)
return {
from,
subject,
html,
}
}
const renderActivation = (params) => {
return renderTemplate(activation, params)
}
const renderVerification = (params) => {
return renderTemplate(onVerification, params)
}
const renderForgotPassword = (params) => {
return renderTemplate(forgotPassword, params)
}
const renderPermissionsRequest = (params) => {
return renderTemplate(permissionsRequest, params)
}
const renderPermissionsApprovedToUser = (params) => {
return renderTemplate(permissionsApprovedToUser, params)
}
const renderResetPasswordRequested = (params) => {
return renderTemplate(resetPassword, params)
}
return {
renderActivation,
renderVerification,
renderForgotPassword,
renderPermissionsRequest,
renderResetPasswordRequested,
renderPermissionsApprovedToUser,
}
}