const bcrypt = require("bcrypt"); const jwt = require("jsonwebtoken"); const validateUser = require("../helpers/validateUser"); const { ErrorHandler } = require("../helpers/error"); const { getUserByUsernameDb } = require("../db/user.db"); const { logger } = require("../utils/logger"); class AuthService { async login(username, password, tenantId) { try { // if (!validateUser(username, password)) { // throw new ErrorHandler(403, "Invalid login"); // } const user = await getUserByUsernameDb(username, tenantId); console.log(user); if (!user) { throw new ErrorHandler(403, "Username not found."); } const isCorrectPassword = password === user.password if (!isCorrectPassword) { throw new ErrorHandler(403, "Username or password incorrect."); } const dataToken = { tenant_id: tenantId, user_id: user.user_id, username, fullname: user.full_name, role_id: user.role_id } const token = await this.signToken(dataToken); const refreshToken = await this.signRefreshToken(dataToken); return { token, refreshToken, role_id: dataToken.role_id, tenant_id: tenantId, user: { user_id: dataToken.user_id, fullname: dataToken.fullname, username: dataToken.username, }, }; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } } async signToken(data) { try { // console.log("signToken process.env.SECRET", process.env.SECRET) return jwt.sign(data, process.env.SECRET, { expiresIn: "23h" }); } catch (error) { logger.error(error); throw new ErrorHandler(500, "An error occurred"); } } async signRefreshToken(data) { try { return jwt.sign(data, process.env.REFRESH_SECRET, { expiresIn: "23h" }); } catch (error) { logger.error(error); throw new ErrorHandler(500, error.message); } } } module.exports = new AuthService();