feat: implement configs and email template configs
This commit is contained in:
parent
3608f91381
commit
5db3ed1806
4 changed files with 54 additions and 7 deletions
0
mail/html/reset-password.hbs
Normal file
0
mail/html/reset-password.hbs
Normal file
0
mail/text/reset-password.hbs
Normal file
0
mail/text/reset-password.hbs
Normal file
|
@ -2,6 +2,7 @@ export default async () => ({
|
|||
base: {
|
||||
localUrl: `${process.env.BASE_URL}`,
|
||||
fromEmail: `${process.env.FROM_EMAIL}`,
|
||||
appName: `${process.env.APP_NAME ?? 'Waterwolf Auth'}`,
|
||||
},
|
||||
redis: {
|
||||
host: process.env['REDIS_HOST'] ?? 'localhost',
|
||||
|
|
|
@ -18,29 +18,60 @@ export class MailService {
|
|||
* Send a password reset email to the user
|
||||
* @param email The email address of the user
|
||||
*/
|
||||
public async sendPasswordResetEmail(email: string, resetCode: string): Promise<void> {}
|
||||
public async sendPasswordResetEmail(email: string, resetCode: string): Promise<void> {
|
||||
this.logger.debug(`Sending password reset email to ${email}`);
|
||||
|
||||
const resetUrl = `${this.configService.getOrThrow('base.localUrl')}/auth/reset-password?code=${resetCode}`;
|
||||
|
||||
const { html: templateHtml, text: templateText } = await this.fetchTemplate('reset-password');
|
||||
|
||||
const html = Handlebars.compile(templateHtml)({ resetUrl });
|
||||
const text = Handlebars.compile(templateText)({ resetUrl });
|
||||
|
||||
this.postalService.sendMessage({
|
||||
to: [email],
|
||||
subject: 'Reset your password',
|
||||
from: this.configService.getOrThrow('MAIL_FROM'),
|
||||
plain_body: text,
|
||||
html_body: html,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a welcome email to the user
|
||||
* @param email The email address of the user
|
||||
*/
|
||||
public async sendWelcomeEmail(email: string): Promise<void> {}
|
||||
public async sendWelcomeEmail(email: string): Promise<void> {
|
||||
this.logger.debug(`Sending verification email to ${email}`);
|
||||
|
||||
const { html: templateHtml, text: templateText } = await this.fetchTemplate('welcome');
|
||||
|
||||
const html = Handlebars.compile(templateHtml)({});
|
||||
const text = Handlebars.compile(templateText)({});
|
||||
|
||||
this.postalService.sendMessage({
|
||||
to: [email],
|
||||
subject: `Welcome to ${this.configService.getOrThrow('base.appName')}`,
|
||||
from: this.configService.getOrThrow('MAIL_FROM'),
|
||||
plain_body: text,
|
||||
html_body: html,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a verification email to the user
|
||||
* @param email The email address of the user
|
||||
*/
|
||||
public async sendVerificationEmail(email: string, code: string): Promise<void> {
|
||||
this.logger.debug(`Sending welcome email to ${email}`);
|
||||
this.logger.debug(`Sending verification email to ${email}`);
|
||||
|
||||
const verificationUrl = `${this.configService.getOrThrow('BASE_URL')}/auth/verify?code=${code}`;
|
||||
const verificationUrl = `${this.configService.getOrThrow('base.localUrl')}/auth/verify?code=${code}`;
|
||||
|
||||
//handlebar render email template
|
||||
const { html: templateHtml, text: templateText } = await this.fetchTemplate('verify-email');
|
||||
|
||||
//replace the placeholders with the actual values
|
||||
const template = Handlebars.compile(templateHtml);
|
||||
const html = template({ verificationUrl });
|
||||
const html = Handlebars.compile(templateHtml)({ verificationUrl });
|
||||
const text = Handlebars.compile(templateText)({ verificationUrl });
|
||||
|
||||
this.postalService.sendMessage({
|
||||
|
@ -56,7 +87,22 @@ export class MailService {
|
|||
* Send a password changed email to the user
|
||||
* @param email The email address of the user
|
||||
*/
|
||||
public async sendPasswordChangedEmail(email: string): Promise<void> {}
|
||||
public async sendPasswordChangedEmail(email: string): Promise<void> {
|
||||
this.logger.debug(`Sending password changed email to ${email}`);
|
||||
|
||||
const { html: templateHtml, text: templateText } = await this.fetchTemplate('password-changed');
|
||||
|
||||
const html = Handlebars.compile(templateHtml)({});
|
||||
const text = Handlebars.compile(templateText)({});
|
||||
|
||||
this.postalService.sendMessage({
|
||||
to: [email],
|
||||
subject: 'Password changed',
|
||||
from: this.configService.getOrThrow('MAIL_FROM'),
|
||||
plain_body: text,
|
||||
html_body: html,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Private function. Reads the html email template from the file system and returns the content
|
||||
|
|
Loading…
Reference in a new issue