Compare commits
9 Commits
4c7e49fb9a
...
37c384a712
Author | SHA1 | Date |
---|---|---|
Henrriky | 37c384a712 | |
Henrriky | 895ce83b5b | |
Henrriky | d608538c9e | |
Henrriky | 2f56673962 | |
Henrriky | fca4dd7036 | |
Henrriky | 2d22a4b9f0 | |
Henrriky | 097737a3b8 | |
Henrriky | 26e90c6ea9 | |
Henrriky | 3478b7c5b2 |
|
@ -17,22 +17,66 @@
|
|||
- 1: Da para fazer
|
||||
- 2: Tem que analisar
|
||||
- Users
|
||||
- [] CheckUser (1)
|
||||
- [] CreateUser (1)
|
||||
- [] DeleteUser (1)
|
||||
- [] UpdateUser (1)
|
||||
- [] ListAllUsers **OPCIONAL**
|
||||
- [] LockUser (2)
|
||||
- [] UnlockUser (2)
|
||||
- [] ResetPassword (2)
|
||||
- [ ] CheckUser (1)
|
||||
- [ ] CreateUser (1)
|
||||
- [ ] DeleteUser (1)
|
||||
- [ ] UpdateUser (1)
|
||||
- [ ] ResetPassword (1)
|
||||
- [ ] LockUser (2)
|
||||
- [ ] UnlockUser (2)
|
||||
- [ ] ListAllUsers **OPCIONAL**
|
||||
- Rights
|
||||
- [] CheckUserRight (1)
|
||||
- [] CreateRight (1)
|
||||
- [] UpdateRight (1)
|
||||
- [] DeleteRight (1)
|
||||
- [] GetAllRights **OPCIONAL**
|
||||
- [ ] CheckUserRight (1)
|
||||
- [ ] CreateRight (1)
|
||||
- [ ] UpdateRight (1)
|
||||
- [ ] DeleteRight (1)
|
||||
- [ ] GetAllRights **OPCIONAL**
|
||||
- Users X Rights
|
||||
- [] LinkUserAndUserRight (1)
|
||||
- [] UnlinkUserAndUserRight (1)
|
||||
- [] GetAllUserRights **OPCIONAL**
|
||||
- [ ] LinkUserAndUserRight (1)
|
||||
- [ ] UnlinkUserAndUserRight (1)
|
||||
- [ ] GetAllUserRights **OPCIONAL**
|
||||
|
||||
# Atribuições
|
||||
|
||||
- Henrriky
|
||||
- [ ] Verify token middleware
|
||||
- [X] CheckUser (1)
|
||||
- [ ] Routes
|
||||
- [X] Controller
|
||||
- [X] Service
|
||||
- [X] Error handling
|
||||
- [X] CreateUser (1)
|
||||
- [ ] Routes
|
||||
- [X] Controller
|
||||
- [X] Service
|
||||
- [X] Error handling
|
||||
- [X] DeleteUser (1)
|
||||
- [ ] Routes
|
||||
- [X] Controller
|
||||
- [X] Service
|
||||
- [X] Error handling
|
||||
- [X] UpdateUser (1)
|
||||
- [ ] Routes
|
||||
- [X] Controller
|
||||
- [X] Service
|
||||
- [X] Error handling
|
||||
- [X] ResetPassword (1)
|
||||
- [ ] Routes
|
||||
- [X] Controller
|
||||
- [X] Service
|
||||
- [X] Error handling
|
||||
- [X] LinkUserAndUserRight (1)
|
||||
- [ ] Routes
|
||||
- [X] Controller
|
||||
- [X] Service
|
||||
- [X] Error handling
|
||||
- [X] UnlinkUserAndUserRight (1)
|
||||
- [ ] Routes
|
||||
- [X] Controller
|
||||
- [X] Service
|
||||
- [X] Error handling
|
||||
- [X] CheckUserRight (1)
|
||||
- [ ] Routes
|
||||
- [X] Controller
|
||||
- [X] Service
|
||||
- [X] Error handling
|
|
@ -24,133 +24,26 @@ import { splitDateTime } from "../helpers/SplitDateTime";
|
|||
import ListUserByWhatsappQueuesService from "../services/UserServices/ListUserByWhatsappQueuesService";
|
||||
import { getSettingValue } from "../helpers/WhaticketSettings";
|
||||
import { setBotInfo } from "../helpers/SetBotInfo";
|
||||
import { logger } from "../utils/logger";
|
||||
import ResetPasswordService from "../services/UserServices/ResetPassword";
|
||||
import CheckUserRightService from "../services/UserServices/CheckUserRightService";
|
||||
import UnlinkUserRightService from "../services/UserServices/UnlinkUserRight";
|
||||
import LinkUserRightService from "../services/UserServices/LinkUserRight";
|
||||
|
||||
type IndexQuery = {
|
||||
searchParam: string;
|
||||
pageNumber: string;
|
||||
profile?: string;
|
||||
userId: string;
|
||||
};
|
||||
|
||||
export const index = async (req: Request, res: Response): Promise<Response> => {
|
||||
const { searchParam, pageNumber, profile } = req.query as IndexQuery;
|
||||
|
||||
const { users, count, hasMore } = await ListUsersService({
|
||||
searchParam,
|
||||
pageNumber,
|
||||
profile
|
||||
});
|
||||
|
||||
if (req.user.profile !== "master") {
|
||||
let auxUsers: Array<object> = [];
|
||||
|
||||
// for (var user of users) {
|
||||
// if (user.profile !== 'master') {
|
||||
// auxUsers.push(user)
|
||||
// }
|
||||
// }
|
||||
|
||||
for (var user of users) {
|
||||
if (user.profile !== "master") {
|
||||
if (req.user.profile == "supervisor" && user.profile == "admin")
|
||||
continue;
|
||||
|
||||
auxUsers.push(user);
|
||||
}
|
||||
}
|
||||
|
||||
return res.json({ users: auxUsers, count, hasMore });
|
||||
}
|
||||
|
||||
return res.json({ users, count, hasMore });
|
||||
|
||||
// const { users, count, hasMore } = await ListUsersService({
|
||||
// searchParam,
|
||||
// pageNumber
|
||||
// });
|
||||
|
||||
// if(req.user.profile!=='master'){
|
||||
|
||||
// let auxUsers: Array<object> = [];
|
||||
|
||||
// for (var user of users) {
|
||||
// if(user.profile!=='master'){
|
||||
// auxUsers.push(user)
|
||||
// }
|
||||
// }
|
||||
|
||||
// return res.json({ users: auxUsers, count, hasMore });
|
||||
// }
|
||||
|
||||
// return res.json({ users, count, hasMore });
|
||||
};
|
||||
|
||||
export const all = async (req: Request, res: Response): Promise<Response> => {
|
||||
let { userId, profile }: any = req.query as IndexQuery;
|
||||
|
||||
console.log(
|
||||
"userId: ",
|
||||
userId,
|
||||
" | profile: ",
|
||||
profile,
|
||||
' | getSettingValue("queueTransferByWhatsappScope")?.value: ',
|
||||
getSettingValue("queueTransferByWhatsappScope")?.value
|
||||
);
|
||||
|
||||
if (getSettingValue("queueTransferByWhatsappScope")?.value == "enabled") {
|
||||
if (!userId) return res.json({ users: [], queues: [] });
|
||||
|
||||
const obj = await ListUserByWhatsappQueuesService(
|
||||
userId,
|
||||
'"admin", "user", "supervisor"'
|
||||
);
|
||||
|
||||
const usersByWhatsqueue = obj.users;
|
||||
const queues = obj.queues;
|
||||
|
||||
let userIds = usersByWhatsqueue.map((w: any) => w.userId);
|
||||
|
||||
const users = await ListUser({
|
||||
userIds
|
||||
});
|
||||
|
||||
return res.json({ users, queues });
|
||||
} else {
|
||||
const users = await ListUser({
|
||||
profile
|
||||
});
|
||||
return res.json({ users });
|
||||
}
|
||||
};
|
||||
|
||||
export const store = async (req: Request, res: Response): Promise<Response> => {
|
||||
const { email, password, name, profile, positionCompany, queueIds } =
|
||||
req.body;
|
||||
|
||||
console.log("===========> req.url: ", req.url);
|
||||
|
||||
if (
|
||||
req.url === "/user" &&
|
||||
getSettingValue("userCreation")?.value == "disabled" &&
|
||||
req.user.profile == "admin"
|
||||
) {
|
||||
throw new AppError("ERR_NO_PERMISSION", 403);
|
||||
} else if (
|
||||
req.url === "/signup" &&
|
||||
getSettingValue("userCreation")?.value == "disabled"
|
||||
) {
|
||||
throw new AppError("ERR_USER_CREATION_DISABLED", 403);
|
||||
} else if (req.user.profile !== "master") {
|
||||
throw new AppError("ERR_NO_PERMISSION", 403);
|
||||
}
|
||||
interface IAMResponse {
|
||||
return_code: string
|
||||
return_msg: string
|
||||
}
|
||||
|
||||
//TODO: REVIEW CREATE USER
|
||||
export const createUser = async (req: Request, res: Response<IAMResponse & { user_created: "1" | "0" }>): Promise<Response> => {
|
||||
try {
|
||||
const { user_id, user_first_name, user_tax_id } = req.body;
|
||||
//user_id ou cria uma tabela nova ou um atributo novo
|
||||
const user = await CreateUserService({
|
||||
email,
|
||||
password,
|
||||
name,
|
||||
positionCompany,
|
||||
profile,
|
||||
queueIds
|
||||
email: user_tax_id,
|
||||
password: "padrao",
|
||||
name: user_first_name,
|
||||
});
|
||||
|
||||
if (user) {
|
||||
|
@ -164,103 +57,150 @@ export const store = async (req: Request, res: Response): Promise<Response> => {
|
|||
user
|
||||
});
|
||||
|
||||
// await stopWhoIsOnlineMonitor()
|
||||
await startWhoIsOnlineMonitor();
|
||||
|
||||
return res.status(200).json(user);
|
||||
return res.status(204).json({
|
||||
return_code: "204",
|
||||
return_msg: `User ${user_id} created`,
|
||||
user_created: "1"
|
||||
});
|
||||
} catch (error) {
|
||||
if (error instanceof AppError) {
|
||||
logger.warn(error);
|
||||
return res.status(error.statusCode).json({
|
||||
return_code: String(error.statusCode),
|
||||
return_msg: error.message,
|
||||
user_created: "0",
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
return_code: "500",
|
||||
return_msg: "Internal server error",
|
||||
user_created: "0",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const show = async (req: Request, res: Response): Promise<Response> => {
|
||||
const { userId } = req.params;
|
||||
export const checkUser = async (req: Request, res: Response<IAMResponse & { user_exists: "1" | "0" }>): Promise<Response> => {
|
||||
try {
|
||||
const { user_id } = req.body;
|
||||
await ShowUserService(user_id);
|
||||
return res.status(200).json({
|
||||
return_code: "200",
|
||||
return_msg: "",
|
||||
user_exists: "1"
|
||||
});
|
||||
} catch (error) {
|
||||
|
||||
const user = await ShowUserService(userId);
|
||||
if (error instanceof AppError) {
|
||||
logger.warn(error);
|
||||
return res.status(error.statusCode).json({
|
||||
return_code: String(error.statusCode),
|
||||
return_msg: error.message,
|
||||
user_exists: "0",
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(200).json(user);
|
||||
return res.status(500).json({
|
||||
return_code: "500",
|
||||
return_msg: "Internal server error",
|
||||
user_exists: "0",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const logoutUser = async (
|
||||
req: Request,
|
||||
res: Response
|
||||
): Promise<Response> => {
|
||||
const { userId } = req.params;
|
||||
//TODO: REVIEW DELETE USER
|
||||
export const deleteUser = async (req: Request, res: Response<IAMResponse & { user_removed: "1" | "0" }>): Promise<Response> => {
|
||||
try {
|
||||
const { user_id } = req.body;
|
||||
|
||||
await stopWhoIsOnlineMonitor();
|
||||
await DeleteUserService(user_id);
|
||||
|
||||
let onlineTime = {
|
||||
userId: userId,
|
||||
status: "logout..."
|
||||
};
|
||||
del(`user:${user_id}`);
|
||||
|
||||
const io = getIO();
|
||||
io.emit("user", {
|
||||
action: "delete",
|
||||
user_id
|
||||
});
|
||||
|
||||
//test del
|
||||
await stopWhoIsOnlineMonitor();
|
||||
|
||||
io.emit("onlineStatus", {
|
||||
action: "logout",
|
||||
userOnlineTime: onlineTime
|
||||
action: "delete",
|
||||
userOnlineTime: user_id
|
||||
});
|
||||
|
||||
await startWhoIsOnlineMonitor();
|
||||
//
|
||||
|
||||
return res.status(200).json({});
|
||||
};
|
||||
|
||||
export const update = async (
|
||||
req: Request,
|
||||
res: Response
|
||||
): Promise<Response> => {
|
||||
if (
|
||||
req.user.profile !== "admin" &&
|
||||
req.user.profile !== "master" &&
|
||||
req.user.profile !== "supervisor"
|
||||
) {
|
||||
throw new AppError("ERR_NO_PERMISSION", 403);
|
||||
}
|
||||
|
||||
const { userId } = req.params;
|
||||
const userData = req.body;
|
||||
|
||||
const dateToday = splitDateTime(
|
||||
new Date(format(new Date(), "yyyy-MM-dd HH:mm:ss", { locale: ptBR }))
|
||||
);
|
||||
|
||||
const currentDate = new Date();
|
||||
const tenMonthsAgo = subMonths(currentDate, 10);
|
||||
const formattedDate = format(tenMonthsAgo, "yyyy-MM-dd");
|
||||
console.log("dateToday.fullDate: ", dateToday.fullDate);
|
||||
console.log("formattedDate 10 months ago: ", formattedDate);
|
||||
|
||||
const openByUserOnQueue: any[] = await CountTicketsByUserQueue({
|
||||
startDate: formattedDate,
|
||||
endDate: dateToday.fullDate,
|
||||
status: "open",
|
||||
clientChatStart: true,
|
||||
userId: userId
|
||||
return res.status(200).json({
|
||||
return_code: "200",
|
||||
return_msg: `User ${user_id} deleted`,
|
||||
user_removed: "1",
|
||||
});
|
||||
|
||||
// console.log('------> openByUserOnQueue: ', openByUserOnQueue)
|
||||
// console.log()
|
||||
// console.log('------> 1 userData.queueIds: ', userData.queueIds)
|
||||
|
||||
let userQueuesAttendance = [];
|
||||
|
||||
if ((openByUserOnQueue && openByUserOnQueue.length) > 0) {
|
||||
userQueuesAttendance = openByUserOnQueue.filter(
|
||||
(e: any) => !userData.queueIds.includes(e.queueId)
|
||||
);
|
||||
|
||||
if (userQueuesAttendance && userQueuesAttendance.length > 0) {
|
||||
const queueInAttendance = userQueuesAttendance.map(e => e.queueId);
|
||||
|
||||
const mergedSet = new Set([...userData.queueIds, ...queueInAttendance]);
|
||||
|
||||
// Convert the Set back to an array
|
||||
userData.queueIds = Array.from(mergedSet);
|
||||
|
||||
// console.log('------> 2 userData.queueIds: ', userData.queueIds)
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof AppError) {
|
||||
logger.warn(error);
|
||||
return res.status(error.statusCode).json({
|
||||
return_code: String(error.statusCode),
|
||||
return_msg: error.message,
|
||||
user_removed: "0",
|
||||
});
|
||||
}
|
||||
|
||||
let user: any = await UpdateUserService({ userData, userId });
|
||||
return res.status(500).json({
|
||||
return_code: "500",
|
||||
return_msg: "Internal server error",
|
||||
user_removed: "0",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
//TODO: REVIEW UPDATE USER
|
||||
export const updateUser = async (req: Request, res: Response<IAMResponse & { user_updated: "1" | "0" }>): Promise<Response> => {
|
||||
try {
|
||||
const { user_id, user_first_name, user_tax_id } = req.body;
|
||||
// const dateToday = splitDateTime(new Date(format(new Date(), "yyyy-MM-dd HH:mm:ss", { locale: ptBR })));
|
||||
// const currentDate = new Date();
|
||||
// const tenMonthsAgo = subMonths(currentDate, 10);
|
||||
// const formattedDate = format(tenMonthsAgo, "yyyy-MM-dd");
|
||||
// console.log("dateToday.fullDate: ", dateToday.fullDate);
|
||||
// console.log("formattedDate 10 months ago: ", formattedDate);
|
||||
|
||||
// const openByUserOnQueue: any[] = await CountTicketsByUserQueue({
|
||||
// startDate: formattedDate,
|
||||
// endDate: dateToday.fullDate,
|
||||
// status: "open",
|
||||
// clientChatStart: true,
|
||||
// userId: userId
|
||||
// });
|
||||
// let userQueuesAttendance = [];
|
||||
|
||||
// if ((openByUserOnQueue && openByUserOnQueue.length) > 0) {
|
||||
// userQueuesAttendance = openByUserOnQueue.filter(
|
||||
// (e: any) => !userData.queueIds.includes(e.queueId)
|
||||
// );
|
||||
|
||||
// if (userQueuesAttendance && userQueuesAttendance.length > 0) {
|
||||
// const queueInAttendance = userQueuesAttendance.map(e => e.queueId);
|
||||
// const mergedSet = new Set([...userData.queueIds, ...queueInAttendance]);
|
||||
|
||||
// userData.queueIds = Array.from(mergedSet);
|
||||
// }
|
||||
// }
|
||||
const userData = {
|
||||
email: user_tax_id,
|
||||
name: user_first_name,
|
||||
}
|
||||
// email?: string;
|
||||
// name?: string;
|
||||
// password?: string;
|
||||
// positionCompany?: string;
|
||||
// profile?: string;
|
||||
// queueIds?: number[];
|
||||
let user: any = await UpdateUserService({ userData, userId: user_id });
|
||||
await setBotInfo(user);
|
||||
|
||||
if (user) {
|
||||
|
@ -274,41 +214,154 @@ export const update = async (
|
|||
user
|
||||
});
|
||||
|
||||
user.userQueuesAttendance = userQueuesAttendance;
|
||||
|
||||
return res.status(200).json(user);
|
||||
};
|
||||
|
||||
export const remove = async (
|
||||
req: Request,
|
||||
res: Response
|
||||
): Promise<Response> => {
|
||||
const { userId } = req.params;
|
||||
|
||||
if (req.user.profile !== "master") {
|
||||
throw new AppError("ERR_NO_PERMISSION", 403);
|
||||
// user.userQueuesAttendance = userQueuesAttendance;
|
||||
return res.status(200).json({
|
||||
return_code: "200",
|
||||
return_msg: `User ${user_id} updated`,
|
||||
user_updated: "1"
|
||||
});
|
||||
} catch (error) {
|
||||
if (error instanceof AppError) {
|
||||
logger.warn(error);
|
||||
return res.status(error.statusCode).json({
|
||||
return_code: String(error.statusCode),
|
||||
return_msg: error.message,
|
||||
user_updated: "0",
|
||||
});
|
||||
}
|
||||
|
||||
await DeleteUserService(userId);
|
||||
|
||||
del(`user:${userId}`);
|
||||
|
||||
const io = getIO();
|
||||
io.emit("user", {
|
||||
action: "delete",
|
||||
userId
|
||||
return res.status(500).json({
|
||||
return_code: "500",
|
||||
return_msg: "Internal server error",
|
||||
user_updated: "0",
|
||||
});
|
||||
|
||||
//test del
|
||||
await stopWhoIsOnlineMonitor();
|
||||
|
||||
io.emit("onlineStatus", {
|
||||
action: "delete",
|
||||
userOnlineTime: userId
|
||||
});
|
||||
|
||||
await startWhoIsOnlineMonitor();
|
||||
//
|
||||
|
||||
return res.status(200).json({ message: "User deleted" });
|
||||
}
|
||||
};
|
||||
|
||||
export const resetPassword = async (req: Request, res: Response<IAMResponse & { password_set: "1" | "0" }>): Promise<Response> => {
|
||||
try {
|
||||
const { user_id, user_password } = req.body;
|
||||
|
||||
await ResetPasswordService({
|
||||
userPassword: user_password,
|
||||
userId: user_id
|
||||
})
|
||||
|
||||
return res.status(200).json({
|
||||
return_code: "200",
|
||||
return_msg: `User has the password changed`,
|
||||
password_set: "1"
|
||||
});
|
||||
} catch (error) {
|
||||
if (error instanceof AppError) {
|
||||
logger.warn(error);
|
||||
return res.status(error.statusCode).json({
|
||||
return_code: String(error.statusCode),
|
||||
return_msg: error.message,
|
||||
password_set: "0",
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
return_code: "500",
|
||||
return_msg: "Internal server error",
|
||||
password_set: "0",
|
||||
});
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
export const linkUserRight = async (req: Request, res: Response<IAMResponse & { user_right_linked: "1" | "0" }>): Promise<Response> => {
|
||||
try {
|
||||
const { user_id, user_right_title, } = req.body;
|
||||
|
||||
await LinkUserRightService({
|
||||
userProfile: user_right_title,
|
||||
userId: user_id
|
||||
})
|
||||
|
||||
return res.status(200).json({
|
||||
return_code: "200",
|
||||
return_msg: `User ${user_id} associated`,
|
||||
user_right_linked: "1"
|
||||
});
|
||||
} catch (error) {
|
||||
if (error instanceof AppError) {
|
||||
logger.warn(error);
|
||||
return res.status(error.statusCode).json({
|
||||
return_code: String(error.statusCode),
|
||||
return_msg: error.message,
|
||||
user_right_linked: "0",
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
return_code: "500",
|
||||
return_msg: "Internal server error",
|
||||
user_right_linked: "0",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const unlinkUserRight = async (req: Request, res: Response<IAMResponse & { user_right_unlinked: "1" | "0" }>): Promise<Response> => {
|
||||
try {
|
||||
const { user_id, user_right_title } = req.body;
|
||||
|
||||
await UnlinkUserRightService({
|
||||
userProfile: user_right_title,
|
||||
userId: user_id
|
||||
})
|
||||
|
||||
return res.status(200).json({
|
||||
return_code: "200",
|
||||
return_msg: `User ${user_id} deassociated`,
|
||||
user_right_unlinked: "1",
|
||||
});
|
||||
} catch (error) {
|
||||
if (error instanceof AppError) {
|
||||
logger.warn(error);
|
||||
return res.status(error.statusCode).json({
|
||||
return_code: String(error.statusCode),
|
||||
return_msg: error.message,
|
||||
user_right_unlinked: "0",
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(500).json({
|
||||
return_code: "500",
|
||||
return_msg: "Internal server error",
|
||||
user_right_unlinked: "0",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const checkUserRight = async (req: Request, res: Response<IAMResponse & { user_right_exists: "1" | "0" }>): Promise<Response> => {
|
||||
try {
|
||||
const { user_id, user_right_title } = req.body;
|
||||
|
||||
const userHasRight = await CheckUserRightService({
|
||||
userProfileToCompare: user_right_title,
|
||||
userId: user_id
|
||||
})
|
||||
|
||||
return res.status(200).json({
|
||||
return_code: "200",
|
||||
return_msg: "",
|
||||
user_right_exists: userHasRight ? "1" : "0",
|
||||
});
|
||||
} catch (error) {
|
||||
if (error instanceof AppError) {
|
||||
logger.warn(error);
|
||||
return res.status(error.statusCode).json({
|
||||
return_code: String(error.statusCode),
|
||||
return_msg: error.message,
|
||||
user_right_exists: "0",
|
||||
});
|
||||
}
|
||||
return res.status(500).json({
|
||||
return_code: "500",
|
||||
return_msg: "Internal server error",
|
||||
user_right_exists: "0",
|
||||
});
|
||||
}
|
||||
};
|
|
@ -0,0 +1,23 @@
|
|||
import { Request, Response, NextFunction } from "express";
|
||||
import AppError from "../errors/AppError";
|
||||
const verifyAPIKey = (req: Request, res: Response, next: NextFunction): void => {
|
||||
const authHeader = req.headers.authorization;
|
||||
|
||||
if (!authHeader) {
|
||||
throw new AppError("ERR_SESSION_EXPIRED", 401);
|
||||
}
|
||||
|
||||
const [, token] = authHeader.split(" ");
|
||||
|
||||
const apiKeyIsValid = token === process.env.TOKEN_REMOTE_TICKET_CREATION
|
||||
if (!apiKeyIsValid) {
|
||||
throw new AppError(
|
||||
"Invalid token",
|
||||
401
|
||||
);
|
||||
}
|
||||
|
||||
return next();
|
||||
};
|
||||
|
||||
export default verifyAPIKey;
|
|
@ -1,23 +1,19 @@
|
|||
import { Router } from "express";
|
||||
|
||||
import isAuth from "../middleware/isAuth";
|
||||
import * as IAMControllerEL from "../controllers/IAMControllerEL";
|
||||
import verifyAPIKey from "../middleware/verifyAPIKey";
|
||||
|
||||
const iamRoutesEL = Router();
|
||||
|
||||
iamRoutesEL.post("/IAM/users", verifyAPIKey, IAMControllerEL.createUser);
|
||||
iamRoutesEL.put("/IAM/users", verifyAPIKey, IAMControllerEL.updateUser);
|
||||
iamRoutesEL.delete("/IAM/users", verifyAPIKey, IAMControllerEL.deleteUser);
|
||||
iamRoutesEL.get("/IAM/users/check", verifyAPIKey, IAMControllerEL.checkUser);
|
||||
|
||||
iamRoutesEL.get("/users/all", isAuth, IAMControllerEL.all);
|
||||
iamRoutesEL.patch("/IAM/users/rights/link", verifyAPIKey, IAMControllerEL.linkUserRight);
|
||||
iamRoutesEL.patch("/IAM/users/rights/unlink", verifyAPIKey, IAMControllerEL.unlinkUserRight);
|
||||
iamRoutesEL.post("/IAM/users/rights/check", verifyAPIKey, IAMControllerEL.checkUserRight);
|
||||
|
||||
iamRoutesEL.get("/users", isAuth, IAMControllerEL.index);
|
||||
|
||||
iamRoutesEL.post("/users", isAuth, IAMControllerEL.store);
|
||||
|
||||
iamRoutesEL.put("/users/:userId", isAuth, IAMControllerEL.update);
|
||||
|
||||
iamRoutesEL.get("/users/:userId", isAuth, IAMControllerEL.show);
|
||||
|
||||
iamRoutesEL.get("/users/logout/:userId", isAuth, IAMControllerEL.logoutUser);
|
||||
|
||||
iamRoutesEL.delete("/users/:userId", isAuth, IAMControllerEL.remove);
|
||||
iamRoutesEL.patch("/IAM/users/reset-password", verifyAPIKey, IAMControllerEL.resetPassword);
|
||||
|
||||
export default iamRoutesEL;
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
import * as Yup from "yup";
|
||||
import AppError from "../../errors/AppError";
|
||||
import ShowUserService from "./ShowUserService";
|
||||
|
||||
interface CheckUserRightServiceRequest {
|
||||
userProfileToCompare: string;
|
||||
userId: string | number;
|
||||
}
|
||||
|
||||
type CheckUserRightServiceResponse = boolean;
|
||||
|
||||
const CheckUserRightService = async ({userProfileToCompare, userId}: CheckUserRightServiceRequest): Promise<CheckUserRightServiceResponse> => {
|
||||
try {
|
||||
const user = await ShowUserService(userId);
|
||||
const schema = Yup.object().shape({
|
||||
userId: Yup.string().required(),
|
||||
userProfile: Yup.string().oneOf(['admin', 'user', 'supervisor', 'master']).required()
|
||||
});
|
||||
try {
|
||||
await schema.validate({ userId, userProfile: userProfileToCompare });
|
||||
} catch (err: any) {
|
||||
throw new AppError(err.message);
|
||||
}
|
||||
|
||||
return (user.profile == userProfileToCompare) ? true : false
|
||||
|
||||
} catch (error: any) {
|
||||
console.error('===> Error on CheckUserRightService.ts file: \n', error)
|
||||
throw new AppError(error.message);
|
||||
}
|
||||
};
|
||||
|
||||
export default CheckUserRightService;
|
|
@ -0,0 +1,33 @@
|
|||
import * as Yup from "yup";
|
||||
import AppError from "../../errors/AppError";
|
||||
import ShowUserService from "./ShowUserService";
|
||||
|
||||
interface LinkUserRightServiceRequest {
|
||||
userProfile: string;
|
||||
userId: string | number;
|
||||
}
|
||||
const LinkUserRightService = async ({userProfile, userId}: LinkUserRightServiceRequest): Promise<void> => {
|
||||
try {
|
||||
const user = await ShowUserService(userId);
|
||||
const schema = Yup.object().shape({
|
||||
userId: Yup.string().required(),
|
||||
userProfile: Yup.string().oneOf(['admin', 'user', 'supervisor']).required()
|
||||
});
|
||||
try {
|
||||
await schema.validate({ userId, userProfile });
|
||||
} catch (err: any) {
|
||||
throw new AppError(err.message);
|
||||
}
|
||||
|
||||
await user.update({
|
||||
profile: userProfile
|
||||
});
|
||||
|
||||
await user.reload();
|
||||
} catch (error: any) {
|
||||
console.error('===> Error on LinkUserRightService.ts file: \n', error)
|
||||
throw new AppError(error.message);
|
||||
}
|
||||
};
|
||||
|
||||
export default LinkUserRightService;
|
|
@ -0,0 +1,32 @@
|
|||
import * as Yup from "yup";
|
||||
import AppError from "../../errors/AppError";
|
||||
import ShowUserService from "./ShowUserService";
|
||||
|
||||
interface ResetPasswordServiceRequest {
|
||||
userPassword: string;
|
||||
userId: string | number;
|
||||
}
|
||||
const ResetPasswordService = async ({userPassword, userId}: ResetPasswordServiceRequest): Promise<void> => {
|
||||
try {
|
||||
const user = await ShowUserService(userId);
|
||||
const schema = Yup.object().shape({
|
||||
password: Yup.string(),
|
||||
});
|
||||
try {
|
||||
await schema.validate({ password: userPassword });
|
||||
} catch (err: any) {
|
||||
throw new AppError(err.message);
|
||||
}
|
||||
|
||||
await user.update({
|
||||
userPassword,
|
||||
});
|
||||
|
||||
await user.reload();
|
||||
} catch (error: any) {
|
||||
console.error('===> Error on ResetPasswordService.ts file: \n', error)
|
||||
throw new AppError(error.message);
|
||||
}
|
||||
};
|
||||
|
||||
export default ResetPasswordService;
|
|
@ -0,0 +1,33 @@
|
|||
import * as Yup from "yup";
|
||||
import AppError from "../../errors/AppError";
|
||||
import ShowUserService from "./ShowUserService";
|
||||
|
||||
interface UnlinkUserRightServiceRequest {
|
||||
userProfile: string;
|
||||
userId: string | number;
|
||||
}
|
||||
const UnlinkUserRightService = async ({userProfile, userId}: UnlinkUserRightServiceRequest): Promise<void> => {
|
||||
try {
|
||||
const user = await ShowUserService(userId);
|
||||
const schema = Yup.object().shape({
|
||||
userId: Yup.string().required(),
|
||||
userProfile: Yup.string().oneOf(['user'])
|
||||
});
|
||||
try {
|
||||
await schema.validate({ userId, userProfile });
|
||||
} catch (err: any) {
|
||||
throw new AppError(err.message);
|
||||
}
|
||||
|
||||
await user.update({
|
||||
profile: userProfile || "user"
|
||||
});
|
||||
|
||||
await user.reload();
|
||||
} catch (error: any) {
|
||||
console.error('===> Error on UnlinkUserRightService.ts file: \n', error)
|
||||
throw new AppError(error.message);
|
||||
}
|
||||
};
|
||||
|
||||
export default UnlinkUserRightService;
|
Loading…
Reference in New Issue