Compare commits
No commits in common. "main" and "feature/refactor-login" have entirely different histories.
main
...
feature/re
|
@ -1,6 +0,0 @@
|
|||
# Local Postgres
|
||||
POSTGRES_USER=root
|
||||
POSTGRES_PASSWORD=root
|
||||
POSTGRES_DB=ticket_mvp
|
||||
PGADMIN_DEFAULT_EMAIL=admin@admin.com
|
||||
PGADMIN_DEFAULT_PASSWORD=root
|
|
@ -1,32 +0,0 @@
|
|||
# Environment
|
||||
NODE_ENV = development
|
||||
|
||||
# App Environment
|
||||
APP_URL = http://localhost:4200
|
||||
|
||||
# DB
|
||||
DB_HOST = localhost
|
||||
DB_PORT = 5432
|
||||
DB_USERNAME = root
|
||||
DB_PASSWORD = root
|
||||
DB_NAME = ticket_mvp
|
||||
|
||||
# CORS
|
||||
CORS_ALLOW_ORIGIN=http://localhost:4200,http://localhost:5000,null
|
||||
CORS_ALLOW_METHODS = GET,POST,PUT,DELETE,OPTIONS
|
||||
CORS_ALLOW_HEADERS = Origin,X-Requested-With,Content-Type,Accept,Authorization
|
||||
|
||||
# CSP
|
||||
CSP_DIRECTIVES="default-src 'self' http://localhost:4200; script-src 'self' 'unsafe-inline' 'unsafe-eval' http://localhost:4200; style-src 'self' 'unsafe-inline' http://localhost:4200; img-src 'self' data:; connect-src 'self' http://localhost:4200; font-src 'self' http://localhost:4200; frame-src 'self'; object-src 'none'"
|
||||
|
||||
# SESSION Secret
|
||||
SESSION_SECRET = secret
|
||||
SESSION_LIMIT = 1
|
||||
|
||||
# API KEY
|
||||
SEND_GRID_API_KEY = API_KEY
|
||||
|
||||
# SENDGRID
|
||||
SENDGRID_TEMPLATE_REGISTER_EMAIL = TEMPLATE_ID
|
||||
|
||||
|
|
@ -4,7 +4,6 @@ import {
|
|||
UnauthorizedException,
|
||||
} from '@nestjs/common';
|
||||
import { UserCredentials } from 'src/entities';
|
||||
import { AuthEmailService } from 'src/modules/sendgrid-module/services/auth.mail.service';
|
||||
import { SessionService } from 'src/modules/session/services/session.service';
|
||||
import { EncryptionService, SuccessDto } from 'src/shared';
|
||||
import {
|
||||
|
@ -13,6 +12,7 @@ import {
|
|||
InternalServerErrorException,
|
||||
} from 'src/shared/exceptions';
|
||||
|
||||
import { PasswordConfirmationMailService } from '../../sendgrid-module/services/password-confirmation.mail.service';
|
||||
import { UserDataRepository } from '../../user-module/repositories/user-data.repository';
|
||||
import { EmailVerificationService } from '../../verify-module/services/email-verification.service';
|
||||
import {
|
||||
|
@ -27,7 +27,7 @@ export class AuthService {
|
|||
public constructor(
|
||||
private readonly userCredentialsRepository: UserCredentialsRepository,
|
||||
private readonly userDataRepository: UserDataRepository,
|
||||
private readonly authEmailService: AuthEmailService,
|
||||
private readonly passwordConfirmationMailService: PasswordConfirmationMailService,
|
||||
private readonly emailVerificationService: EmailVerificationService,
|
||||
private readonly sessionService: SessionService
|
||||
) {}
|
||||
|
@ -50,7 +50,10 @@ export class AuthService {
|
|||
);
|
||||
|
||||
// TODO: Add OTP or 2FA here as an additional security measure
|
||||
await this.authEmailService.sendLoginLinkEmail(magiclink.email, token);
|
||||
await this.passwordConfirmationMailService.sendLoginLinkEmail(
|
||||
magiclink.email,
|
||||
token
|
||||
);
|
||||
} else {
|
||||
const token =
|
||||
await this.emailVerificationService.generateEmailVerificationTokenForMagicLink(
|
||||
|
@ -58,7 +61,7 @@ export class AuthService {
|
|||
userAgent
|
||||
);
|
||||
|
||||
await this.authEmailService.sendRegistrationLinkEmail(
|
||||
await this.passwordConfirmationMailService.sendRegistrationLinkEmail(
|
||||
magiclink.email,
|
||||
token
|
||||
);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { Module } from '@nestjs/common';
|
||||
import { ConfigModule, ConfigService } from '@nestjs/config';
|
||||
|
||||
import { AuthEmailService } from './services/auth.mail.service';
|
||||
import { PasswordConfirmationMailService } from './services/password-confirmation.mail.service';
|
||||
import { TemplateConfigService } from './services/template-config.service';
|
||||
|
||||
@Module({
|
||||
|
@ -13,10 +13,10 @@ import { TemplateConfigService } from './services/template-config.service';
|
|||
configService.get<string>('SEND_GRID_API_KEY'),
|
||||
inject: [ConfigService],
|
||||
},
|
||||
AuthEmailService,
|
||||
PasswordConfirmationMailService,
|
||||
TemplateConfigService,
|
||||
],
|
||||
controllers: [],
|
||||
exports: [AuthEmailService],
|
||||
exports: [PasswordConfirmationMailService],
|
||||
})
|
||||
export class SendgridModule {}
|
||||
|
|
|
@ -7,7 +7,9 @@ import { BaseMailService } from './base.mail.service';
|
|||
import { TemplateConfigService } from './template-config.service';
|
||||
|
||||
@Injectable()
|
||||
export class AuthEmailService extends BaseMailService {
|
||||
export class PasswordConfirmationMailService extends BaseMailService {
|
||||
private readonly PASSWORD_CONFIRMATION_EMAIL: string =
|
||||
'PASSWORD_CONFIRMATION_EMAIL';
|
||||
private readonly REGISTER_EMAIL: string = 'REGISTER_EMAIL';
|
||||
|
||||
public constructor(
|
||||
|
@ -18,6 +20,29 @@ export class AuthEmailService extends BaseMailService {
|
|||
super(sendGridApiKey);
|
||||
}
|
||||
|
||||
public async sendPasswordConfirmationMail(
|
||||
to: string,
|
||||
verificationToken: string
|
||||
): Promise<void> {
|
||||
const templateId: string = this.templateConfigService.getTemplateId(
|
||||
this.PASSWORD_CONFIRMATION_EMAIL
|
||||
);
|
||||
|
||||
const token = `${verificationToken}|${UriEncoderService.encodeBase64(to)}`;
|
||||
|
||||
const mailoptions: SendGridMailApi.MailDataRequired = {
|
||||
to,
|
||||
from: { email: 'info@igor-propisnov.com', name: 'Ticket App' },
|
||||
templateId: templateId,
|
||||
dynamicTemplateData: {
|
||||
name: 'Mara',
|
||||
buttonUrl: `${this.configService.get<string>('APP_URL')}/verify/?token=${token}`,
|
||||
},
|
||||
};
|
||||
|
||||
await this.sendMail(mailoptions);
|
||||
}
|
||||
|
||||
public async sendLoginLinkEmail(
|
||||
to: string,
|
||||
loginToken: string
|
Loading…
Reference in New Issue