78 lines
2.0 KiB
JavaScript
78 lines
2.0 KiB
JavaScript
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();
|