This commit is contained in:
fro1991
2026-01-02 22:00:52 +07:00
parent 6309e9b89f
commit f562ccf38b
4 changed files with 105 additions and 70 deletions

1
.gitignore vendored
View File

@ -8,3 +8,4 @@ temp/
package-lock.json package-lock.json
src/swagger/swagger.json src/swagger/swagger.json
swagger.json swagger.json
config/ferro.json

View File

@ -46,11 +46,11 @@ export class AuthController {
const userRepository = OrmHelper.DB.getRepository(User) const userRepository = OrmHelper.DB.getRepository(User)
const userRefreshTokenRepository = OrmHelper.DB.getRepository(UserRefreshToken) const userRefreshTokenRepository = OrmHelper.DB.getRepository(UserRefreshToken)
const user = await userRepository.findOne({ const user = await userRepository.findOne({
relations: ["roles", "roles.application"], relations: ["roles", "roles.application"],
select: ["id", "email", "name", "employee_id", "password", "username", "roles"], select: ["id", "email", "name", "password", "username", "roles"],
where: { username: param.username }, where: { username: param.username },
}) })
if (user != null && user.roles != null && user.roles.length > 0 && user.checkIfPasswordMatch(param.password)) { if (user != null && user.roles != null && user.roles.length > 0 && user.checkIfPasswordMatch(param.password)) {
const { browser, device, os } = UAParser(req.get("User-Agent")) const { browser, device, os } = UAParser(req.get("User-Agent"))
@ -85,37 +85,36 @@ export class AuthController {
return ReturnHelper.errorResponse(res, 403, 403, Language.lang.failed_access + ", you don't have any roles in this application") return ReturnHelper.errorResponse(res, 403, 403, Language.lang.failed_access + ", you don't have any roles in this application")
} else { } else {
// const userRole = await userRoleRepository.findOneBy({ id: role_id }) // const userRole = await userRoleRepository.findOneBy({ id: role_id })
var hrms = { var hrms = {
uuid: null, uuid: null,
idx: null, idx: null,
employee_id: null, employee_id: null,
employeename: null, employeename: null,
title: null, title: null,
department_id: null, department_id: null,
departement_uuid: null, departement_uuid: null,
department_name: null, department_name: null,
level_id: null, level_id: null,
level_name: null, level_name: null,
} }
var privateKey = fs.readFileSync("src/helpers/key/private.key") var privateKey = fs.readFileSync("src/helpers/key/private.key")
var token = jwt.sign( var token = jwt.sign(
{ {
exp: Math.floor(Date.now() / 1000) + Number(config.get("auth.access_token_lifetime")), exp: Math.floor(Date.now() / 1000) + Number(config.get("auth.access_token_lifetime")),
data: { data: {
id: user.id, id: user.id,
username: user.username, username: user.username,
name: user.name, name: user.name,
id_role: role_id, id_role: role_id,
roles: roles.roles, roles: roles.roles,
employee_id: user.employee_id, hrms: hrms,
hrms: hrms, },
}, },
}, privateKey,
privateKey, { algorithm: "RS256" }
{ algorithm: "RS256" } )
)
delete user.password delete user.password

View File

@ -1,6 +1,6 @@
import axios from "axios" import axios from "axios"
import config from "config" import config from "config"
import { Paging, User, UserRefreshToken, UserRole } from "entity" import { HrmsEmployee, Paging, User, UserRefreshToken, UserRole } from "entity"
import exceljs from "exceljs" import exceljs from "exceljs"
import { NextFunction, Response } from "express" import { NextFunction, Response } from "express"
import { Request } from "express-jwt" import { Request } from "express-jwt"
@ -247,7 +247,7 @@ export class UserController {
password: Joi.string().pattern(new RegExp("^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$")).min(8).required().label("Password"), password: Joi.string().pattern(new RegExp("^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$")).min(8).required().label("Password"),
retype_password: Joi.ref("password"), retype_password: Joi.ref("password"),
name: Joi.string().max(64).required().label("Name"), name: Joi.string().max(64).required().label("Name"),
employee_id: Joi.string().max(64).optional().allow("").label("Employee ID"), employee_id: Joi.string().uuid().optional().allow("").label("Employee ID"),
status: Joi.string().required().label("Status"), status: Joi.string().required().label("Status"),
}) })
@ -260,8 +260,8 @@ export class UserController {
data.email = param.email data.email = param.email
data.status = param.status data.status = param.status
if (param.employee_id && param.employee_id! + "") { if (param.employee && param.employee.id! + "") {
data.employee_id = param.employee_id data.employee = param.employee
} }
data.hashPassword() data.hashPassword()
@ -571,7 +571,7 @@ export class UserController {
password: Joi.string().allow("").optional().label("Password"), password: Joi.string().allow("").optional().label("Password"),
retype_password: Joi.ref("password"), retype_password: Joi.ref("password"),
name: Joi.string().max(64).required().label("Name"), name: Joi.string().max(64).required().label("Name"),
employee_id: Joi.string().max(64).optional().allow("").label("Employee ID"), employee_id: Joi.string().uuid().optional().allow("").label("Employee ID"),
status: Joi.string().required().label("Status"), status: Joi.string().required().label("Status"),
}) })
@ -585,13 +585,13 @@ export class UserController {
if (data != null) { if (data != null) {
data.name = param.name data.name = param.name
data.employee_id = param.employee_id data.employee = param.employee
data.username = param.username data.username = param.username
data.email = param.email data.email = param.email
data.status = param.status data.status = param.status
if (param.employee_id && param.employee_id != "") { if (param.employee && param.employee.id != "") {
data.employee_id = param.employee_id data.employee = param.employee
} }
if (param.password) { if (param.password) {

View File

@ -1,34 +1,69 @@
import config from 'config'; import config from "config"
import { DataSource } from "typeorm"; import { DataSource } from "typeorm"
import { Application, Menu, User, UserActivity, UserRefreshToken, UserRole } from "entity"; import {
import { ILogObj, Logger } from 'tslog'; Aldeia,
Suco,
Munisipo,
Administrativu,
Nationality,
Application, //
Menu,
User,
UserActivity,
UserRefreshToken,
UserRole,
HrmsAirport,
HrmsPosition,
HrmsEmployee,
HrmsDepartment,
HrmsShift,
} from "entity"
import { ILogObj, Logger } from "tslog"
export class OrmHelper { export class OrmHelper {
static DB: DataSource = null static DB: DataSource = null
static setup() { static setup() {
const log: Logger<ILogObj> = new Logger({ name: '[OrmHelper]', type: 'pretty' }); const log: Logger<ILogObj> = new Logger({ name: "[OrmHelper]", type: "pretty" })
const engine: 'mysql' | 'postgres' = config.get("database.engine") const engine: "mysql" | "postgres" = config.get("database.engine")
OrmHelper.DB = new DataSource({ OrmHelper.DB = new DataSource({
type: engine, type: engine,
host: config.get("database.host"), host: config.get("database.host"),
port: Number(config.get("database.port")), port: Number(config.get("database.port")),
username: String(config.get("database.username")), username: String(config.get("database.username")),
password: String(config.get("database.password")), password: String(config.get("database.password")),
database: String(config.get("database.database")), database: String(config.get("database.database")),
synchronize: true, synchronize: true,
logging: config.get('database.logging'), logging: config.get("database.logging"),
entities: [User, UserRole, UserActivity, UserRefreshToken, Menu, Application], entities: [
subscribers: [], Aldeia,
migrations: [], Suco,
}) Munisipo,
Administrativu,
Nationality,
User, //
UserRole,
UserActivity,
UserRefreshToken,
Menu,
Application,
Nationality,
HrmsDepartment, //
HrmsAirport,
HrmsPosition,
HrmsShift,
HrmsEmployee,
],
subscribers: [],
migrations: [],
})
OrmHelper.DB.initialize() OrmHelper.DB.initialize()
.then(() => { .then(() => {
// here you can start to work with your database // here you can start to work with your database
}) })
.catch((error: any) => log.error(error)) .catch((error: any) => log.error(error))
} }
} }