diff --git a/src/services/AuthService.ts b/src/services/AuthService.ts new file mode 100644 index 0000000..f6b5460 --- /dev/null +++ b/src/services/AuthService.ts @@ -0,0 +1,33 @@ +import { IUser } from '../models/user/IUser'; +import jwt from 'jsonwebtoken'; + +export interface IDecodedUser extends Omit { + id: string; +} + +const AUTH_SECRET = 'secret'; +const AUTH_EXPIRES_IN = '30m'; + +export default class AuthService { + public static generateToken(payload: { + [key: string]: string | boolean | number; + }): string { + const token = jwt.sign(payload, AUTH_SECRET, { + expiresIn: AUTH_EXPIRES_IN, + }); + + return token; + } + + public static decodeToken(token: string): IDecodedUser { + return jwt.verify(token, AUTH_SECRET) as IDecodedUser; + } + + public static generateUserToken(userData: IUser & { id?: string }): string { + return this.generateToken({ + nome: userData.nome, + email: userData.email, + ultimo_login: new Date().toLocaleTimeString(), + }); + } +} diff --git a/src/services/EncryptService.ts b/src/services/EncryptService.ts new file mode 100644 index 0000000..53d2653 --- /dev/null +++ b/src/services/EncryptService.ts @@ -0,0 +1,17 @@ +import bcrypt from 'bcrypt'; + +export default class EncryptService { + public static async generateHash( + password: string, + salt = 10 + ): Promise { + return await bcrypt.hash(password, salt); + } + + public static async compareHash( + password: string, + hashedPassword: string + ): Promise { + return await bcrypt.compare(password, hashedPassword); + } +}