add rules middleware

This commit is contained in:
OxSaitama 2023-06-26 10:45:29 +02:00
parent 8ff4cc2afd
commit e1b2bec912
33 changed files with 494 additions and 250 deletions

View File

@ -1,94 +0,0 @@
import { Response, Request } from "express";
import { Controller, Post } from "@ControllerPattern/index";
import ApiController from "@Common/system/controller-pattern/ApiController";
import { Service } from "typedi";
import AuthService from "@Services/private-services/AuthService/AuthService";
import UsersService from "@Services/super-admin/UsersService/UsersService";
import User from "le-coffre-resources/dist/SuperAdmin";
import { JwtPayload } from "jsonwebtoken";
import { validateOrReject } from "class-validator";
//import User from "le-coffre-resources/dist/Notary";
@Controller()
@Service()
export default class UserInfoController extends ApiController {
constructor(private authService: AuthService, private userService: UsersService) {
super();
}
/**
* @description Get user created from IdNot authentification
* @returns User
*/
@Post("/api/v1/idnot-user/:code")
protected async getUserInfosFromIdnot(req: Request, response: Response) {
try {
const code = req.params["code"];
const user = await this.authService.getUserFromIdNotTokens(code!);
//success
this.httpSuccess(response, user);
} catch (error) {
this.httpInternalError(response);
return;
}
}
@Post("/api/v1/login/:idnot")
protected async login(req: Request, response: Response) {
try {
const id = req.params["idnot"];
if (!id) throw new Error("idnot is required");
const users = await this.userService.get({ where: { idNot: id } , include: {contact: true, role: true, office_membership: true}});
const user = User.hydrate<User>(users[0]!, { strategy: "excludeAll" });
await validateOrReject(user, { groups: ["auth"] })
console.log(user)
const accessToken = this.authService.generateAccessToken(user);
const refreshToken = this.authService.generateRefreshToken(user);
//success
this.httpSuccess(response, { accessToken, refreshToken });
} catch (error) {
console.log(error);
this.httpInternalError(response);
return;
}
}
@Post("/api/v1/refresh-token")
protected async refreshToken(req: Request, response: Response) {
try {
const authHeader = req.headers["authorization"];
const token = authHeader && authHeader.split(" ")[1];
if (!token) {
this.httpBadRequest(response);
return;
}
let accessToken;
this.authService.verifyRefreshToken(token, (err, userPayload) => {
if (err) {
this.httpUnauthorized(response);
return;
}
const user = userPayload as JwtPayload;
console.log(userPayload)
// const user = User.hydrate<User>(userPayload!, { strategy: "excludeAll" });
// const user = await this.userService.getByUid(userPayload!.uid);
// const users = await this.userService.getByUid(userPayload!.uid);
delete user.iat;
delete user!.exp;
accessToken = this.authService.generateAccessToken(user);
});
//success
this.httpSuccess(response, accessToken);
} catch (error) {
console.log(error)
this.httpInternalError(response);
return;
}
}
}

View File

@ -0,0 +1,85 @@
import { Response, Request } from "express";
import { Controller, Post } from "@ControllerPattern/index";
import ApiController from "@Common/system/controller-pattern/ApiController";
import { Service } from "typedi";
import AuthService from "@Services/common/AuthService/AuthService";
import { JwtPayload } from "jsonwebtoken";
@Controller()
@Service()
export default class UserController extends ApiController {
constructor(private authService: AuthService) {
super();
}
/**
* @description Get user created from IdNot authentification
* @todo Used for test, should be removed
* @returns User
*/
// @Post("/api/v1/idnot/user/:code")
// protected async getUserInfosFromIdnot(req: Request, response: Response) {
// console.warn("/api/v1/idnot/user/:code used for test, should be removed");
// try {
// const code = req.params["code"];
// const user = await this.authService.getUserFromIdNotTokens(code!);
// //success
// this.httpSuccess(response, user);
// } catch (error) {
// this.httpInternalError(response);
// return;
// }
// }
@Post("/api/v1/idnot/user/login/:idnot")
protected async login(req: Request, response: Response) {
try {
const id = req.params["idnot"];
if (!id) throw new Error("idnot is required");
const payload = await this.authService.getUserPayload(id!);
const accessToken = this.authService.generateAccessToken(payload);
const refreshToken = this.authService.generateRefreshToken(payload);
//success
this.httpSuccess(response, { accessToken, refreshToken });
} catch (error) {
console.log(error)
this.httpInternalError(response);
return;
}
}
@Post("/api/v1/idnot/user/refresh-token")
protected async refreshToken(req: Request, response: Response) {
try {
const authHeader = req.headers["authorization"];
const token = authHeader && authHeader.split(" ")[1];
if (!token) {
this.httpBadRequest(response);
return;
}
let accessToken;
this.authService.verifyRefreshToken(token, (err, userPayload) => {
if (err) {
this.httpUnauthorized(response);
return;
}
const user = userPayload as JwtPayload;
delete user.iat;
delete user!.exp;
accessToken = this.authService.generateAccessToken(user);
});
//success
this.httpSuccess(response, accessToken);
} catch (error) {
this.httpInternalError(response);
return;
}
}
}

View File

@ -6,6 +6,8 @@ import { Service } from "typedi";
import { Customer } from "le-coffre-resources/dist/SuperAdmin"; import { Customer } from "le-coffre-resources/dist/SuperAdmin";
import { Customers } from "@prisma/client"; import { Customers } from "@prisma/client";
import { validateOrReject } from "class-validator"; import { validateOrReject } from "class-validator";
import authHandler from "@App/middlewares/AuthHandler";
import ruleHandler from "@App/middlewares/RulesHandler";
@Controller() @Controller()
@Service() @Service()
@ -17,7 +19,7 @@ export default class CustomersController extends ApiController {
/** /**
* @description Get all customers * @description Get all customers
*/ */
@Get("/api/v1/super-admin/customers") @Get("/api/v1/super-admin/customers", [authHandler,ruleHandler])
protected async get(req: Request, response: Response) { protected async get(req: Request, response: Response) {
try { try {
//get query //get query
@ -40,7 +42,7 @@ export default class CustomersController extends ApiController {
/** /**
* @description Create a new customer * @description Create a new customer
*/ */
@Post("/api/v1/super-admin/customers") @Post("/api/v1/super-admin/customers", [authHandler,ruleHandler])
protected async post(req: Request, response: Response) { protected async post(req: Request, response: Response) {
try { try {
//init IUser resource with request body values //init IUser resource with request body values
@ -66,7 +68,7 @@ export default class CustomersController extends ApiController {
/** /**
* @description Modify a specific customer by uid * @description Modify a specific customer by uid
*/ */
@Put("/api/v1/super-admin/customers/:uid") @Put("/api/v1/super-admin/customers/:uid", [authHandler,ruleHandler])
protected async put(req: Request, response: Response) { protected async put(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];
@ -107,7 +109,7 @@ export default class CustomersController extends ApiController {
/** /**
* @description Get a specific customer by uid * @description Get a specific customer by uid
*/ */
@Get("/api/v1/super-admin/customers/:uid") @Get("/api/v1/super-admin/customers/:uid", [authHandler,ruleHandler])
protected async getOneByUid(req: Request, response: Response) { protected async getOneByUid(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];

View File

@ -6,6 +6,8 @@ import DeedTypesService from "@Services/super-admin/DeedTypesService/DeedTypesSe
import { DeedTypes } from "@prisma/client"; import { DeedTypes } from "@prisma/client";
import { DeedType } from "le-coffre-resources/dist/SuperAdmin"; import { DeedType } from "le-coffre-resources/dist/SuperAdmin";
import { validateOrReject } from "class-validator"; import { validateOrReject } from "class-validator";
import authHandler from "@App/middlewares/AuthHandler";
import ruleHandler from "@App/middlewares/RulesHandler";
@Controller() @Controller()
@Service() @Service()
@ -18,7 +20,7 @@ export default class DeedTypesController extends ApiController {
* @description Get all deedtypes * @description Get all deedtypes
* @returns Deedtype[] list of deedtypes * @returns Deedtype[] list of deedtypes
*/ */
@Get("/api/v1/super-admin/deed-types") @Get("/api/v1/super-admin/deed-types", [authHandler,ruleHandler])
protected async get(req: Request, response: Response) { protected async get(req: Request, response: Response) {
try { try {
//get query //get query
@ -41,7 +43,7 @@ export default class DeedTypesController extends ApiController {
* @description Create a new deedtype * @description Create a new deedtype
* @returns Deedtype created * @returns Deedtype created
*/ */
@Post("/api/v1/super-admin/deed-types") @Post("/api/v1/super-admin/deed-types", [authHandler,ruleHandler])
protected async post(req: Request, response: Response) { protected async post(req: Request, response: Response) {
try { try {
//init DeedType resource with request body values //init DeedType resource with request body values
@ -70,7 +72,7 @@ export default class DeedTypesController extends ApiController {
* @description Modify a specific deedtype by uid * @description Modify a specific deedtype by uid
* @returns Deedtype modified * @returns Deedtype modified
*/ */
@Put("/api/v1/super-admin/deed-types/:uid") @Put("/api/v1/super-admin/deed-types/:uid", [authHandler,ruleHandler])
protected async put(req: Request, response: Response) { protected async put(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];
@ -112,7 +114,7 @@ export default class DeedTypesController extends ApiController {
* @description Get a specific deedtype by uid * @description Get a specific deedtype by uid
* @returns IDeedtype * @returns IDeedtype
*/ */
@Get("/api/v1/super-admin/deed-types/:uid") @Get("/api/v1/super-admin/deed-types/:uid", [authHandler,ruleHandler])
protected async getOneByUid(req: Request, response: Response) { protected async getOneByUid(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];

View File

@ -6,6 +6,8 @@ import { Service } from "typedi";
import { Deeds } from "@prisma/client"; import { Deeds } from "@prisma/client";
import { Deed } from "le-coffre-resources/dist/SuperAdmin"; import { Deed } from "le-coffre-resources/dist/SuperAdmin";
import { validateOrReject } from "class-validator"; import { validateOrReject } from "class-validator";
import authHandler from "@App/middlewares/AuthHandler";
import ruleHandler from "@App/middlewares/RulesHandler";
@Controller() @Controller()
@Service() @Service()
@ -18,7 +20,7 @@ export default class DeedsController extends ApiController {
* @description Get all deeds * @description Get all deeds
* @returns Deed[] list of deeds * @returns Deed[] list of deeds
*/ */
@Get("/api/v1/super-admin/deeds") @Get("/api/v1/super-admin/deeds", [authHandler,ruleHandler])
protected async get(req: Request, response: Response) { protected async get(req: Request, response: Response) {
try { try {
//get query //get query
@ -41,7 +43,7 @@ export default class DeedsController extends ApiController {
* @description Get a specific deed by uid * @description Get a specific deed by uid
* @returns Deed * @returns Deed
*/ */
@Get("/api/v1/super-admin/deeds/:uid") @Get("/api/v1/super-admin/deeds/:uid", [authHandler,ruleHandler])
protected async getOneByUid(req: Request, response: Response) { protected async getOneByUid(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];
@ -79,7 +81,7 @@ export default class DeedsController extends ApiController {
/** /**
* @description Modify a specific deed by uid * @description Modify a specific deed by uid
*/ */
@Put("/api/v1/super-admin/deeds/:uid") @Put("/api/v1/super-admin/deeds/:uid", [authHandler,ruleHandler])
protected async put(req: Request, response: Response) { protected async put(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];

View File

@ -7,6 +7,8 @@ import { DocumentTypes } from "@prisma/client";
import ObjectHydrate from "@Common/helpers/ObjectHydrate"; import ObjectHydrate from "@Common/helpers/ObjectHydrate";
import { DocumentType } from "le-coffre-resources/dist/SuperAdmin"; import { DocumentType } from "le-coffre-resources/dist/SuperAdmin";
import { validateOrReject } from "class-validator"; import { validateOrReject } from "class-validator";
import authHandler from "@App/middlewares/AuthHandler";
import ruleHandler from "@App/middlewares/RulesHandler";
@Controller() @Controller()
@Service() @Service()
@ -18,7 +20,7 @@ export default class DocumentTypesController extends ApiController {
/** /**
* @description Get all document-types * @description Get all document-types
*/ */
@Get("/api/v1/super-admin/document-types") @Get("/api/v1/super-admin/document-types", [authHandler,ruleHandler])
protected async get(req: Request, response: Response) { protected async get(req: Request, response: Response) {
try { try {
//get query //get query
@ -43,7 +45,7 @@ export default class DocumentTypesController extends ApiController {
/** /**
* @description Create a new documentType * @description Create a new documentType
*/ */
@Post("/api/v1/super-admin/document-types") @Post("/api/v1/super-admin/document-types", [authHandler,ruleHandler])
protected async post(req: Request, response: Response) { protected async post(req: Request, response: Response) {
try { try {
//init DocumentType resource with request body values //init DocumentType resource with request body values
@ -67,7 +69,7 @@ export default class DocumentTypesController extends ApiController {
/** /**
* @description Modify a specific documentType by uid * @description Modify a specific documentType by uid
*/ */
@Put("/api/v1/super-admin/document-types/:uid") @Put("/api/v1/super-admin/document-types/:uid", [authHandler,ruleHandler])
protected async put(req: Request, response: Response) { protected async put(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];
@ -107,7 +109,7 @@ export default class DocumentTypesController extends ApiController {
/** /**
* @description Get a specific documentType by uid * @description Get a specific documentType by uid
*/ */
@Get("/api/v1/super-admin/document-types/:uid") @Get("/api/v1/super-admin/document-types/:uid", [authHandler,ruleHandler])
protected async getOneByUid(req: Request, response: Response) { protected async getOneByUid(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];

View File

@ -6,6 +6,8 @@ import DocumentsService from "@Services/super-admin/DocumentsService/DocumentsSe
import { Documents } from "@prisma/client"; import { Documents } from "@prisma/client";
import { Document } from "le-coffre-resources/dist/SuperAdmin"; import { Document } from "le-coffre-resources/dist/SuperAdmin";
import { validateOrReject } from "class-validator"; import { validateOrReject } from "class-validator";
import authHandler from "@App/middlewares/AuthHandler";
import ruleHandler from "@App/middlewares/RulesHandler";
@Controller() @Controller()
@Service() @Service()
@ -18,7 +20,7 @@ export default class DocumentsController extends ApiController {
* @description Get all documents * @description Get all documents
* @returns IDocument[] list of documents * @returns IDocument[] list of documents
*/ */
@Get("/api/v1/super-admin/documents") @Get("/api/v1/super-admin/documents", [authHandler,ruleHandler])
protected async get(req: Request, response: Response) { protected async get(req: Request, response: Response) {
try { try {
//get query //get query
@ -42,7 +44,7 @@ export default class DocumentsController extends ApiController {
* @description Create a new document * @description Create a new document
* @returns IDocument created * @returns IDocument created
*/ */
@Post("/api/v1/super-admin/documents") @Post("/api/v1/super-admin/documents", [authHandler,ruleHandler])
protected async post(req: Request, response: Response) { protected async post(req: Request, response: Response) {
try { try {
//init Document resource with request body values //init Document resource with request body values
@ -70,7 +72,7 @@ export default class DocumentsController extends ApiController {
/** /**
* @description Update a specific document * @description Update a specific document
*/ */
@Put("/api/v1/super-admin/documents/:uid") @Put("/api/v1/super-admin/documents/:uid", [authHandler,ruleHandler])
protected async update(req: Request, response: Response) { protected async update(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];
@ -109,7 +111,7 @@ export default class DocumentsController extends ApiController {
/** /**
* @description Delete a specific document * @description Delete a specific document
*/ */
@Delete("/api/v1/super-admin/documents/:uid") @Delete("/api/v1/super-admin/documents/:uid", [authHandler,ruleHandler])
protected async delete(req: Request, response: Response) { protected async delete(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];
@ -142,7 +144,7 @@ export default class DocumentsController extends ApiController {
/** /**
* @description Get a specific document by uid * @description Get a specific document by uid
*/ */
@Get("/api/v1/super-admin/documents/:uid") @Get("/api/v1/super-admin/documents/:uid", [authHandler,ruleHandler])
protected async getOneByUid(req: Request, response: Response) { protected async getOneByUid(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];

View File

@ -2,11 +2,13 @@ import { Response, Request } from "express";
import { Controller, Delete, Get, Post, Put } from "@ControllerPattern/index"; import { Controller, Delete, Get, Post, Put } from "@ControllerPattern/index";
import ApiController from "@Common/system/controller-pattern/ApiController"; import ApiController from "@Common/system/controller-pattern/ApiController";
import { Service } from "typedi"; import { Service } from "typedi";
import FilesService from "@Services/private-services/FilesService/FilesService"; import FilesService from "@Services/common/FilesService/FilesService";
import { Files } from "@prisma/client"; import { Files } from "@prisma/client";
import { File } from "le-coffre-resources/dist/SuperAdmin"; import { File } from "le-coffre-resources/dist/SuperAdmin";
import { validateOrReject } from "class-validator"; import { validateOrReject } from "class-validator";
import DocumentsService from "@Services/super-admin/DocumentsService/DocumentsService"; import DocumentsService from "@Services/super-admin/DocumentsService/DocumentsService";
import authHandler from "@App/middlewares/AuthHandler";
import ruleHandler from "@App/middlewares/RulesHandler";
@Controller() @Controller()
@Service() @Service()
@ -19,7 +21,7 @@ export default class FilesController extends ApiController {
* @description Get all Files * @description Get all Files
* @returns File[] list of Files * @returns File[] list of Files
*/ */
@Get("/api/v1/super-admin/files") @Get("/api/v1/super-admin/files", [authHandler,ruleHandler])
protected async get(req: Request, response: Response) { protected async get(req: Request, response: Response) {
try { try {
//get query //get query
@ -42,7 +44,7 @@ export default class FilesController extends ApiController {
/** /**
* @description Get a specific File by uid * @description Get a specific File by uid
*/ */
@Get("/api/v1/super-admin/files/download/:uid") @Get("/api/v1/super-admin/files/download/:uid", [authHandler,ruleHandler])
protected async download(req: Request, response: Response) { protected async download(req: Request, response: Response) {
const uid = req.params["uid"]; const uid = req.params["uid"];
if (!uid) { if (!uid) {
@ -71,7 +73,7 @@ export default class FilesController extends ApiController {
* @description Create a new File * @description Create a new File
* @returns File created * @returns File created
*/ */
@Post("/api/v1/super-admin/files") @Post("/api/v1/super-admin/files", [authHandler,ruleHandler])
protected async post(req: Request, response: Response) { protected async post(req: Request, response: Response) {
try { try {
//get file //get file
@ -112,7 +114,7 @@ export default class FilesController extends ApiController {
/** /**
* @description Update a specific file * @description Update a specific file
*/ */
@Put("/api/v1/super-admin/files/:uid") @Put("/api/v1/super-admin/files/:uid", [authHandler,ruleHandler])
protected async update(req: Request, response: Response) { protected async update(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];
@ -150,7 +152,7 @@ export default class FilesController extends ApiController {
/** /**
* @description Delete a specific File * @description Delete a specific File
*/ */
@Delete("/api/v1/super-admin/files/:uid") @Delete("/api/v1/super-admin/files/:uid", [authHandler,ruleHandler])
protected async delete(req: Request, response: Response) { protected async delete(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];
@ -188,7 +190,7 @@ export default class FilesController extends ApiController {
/** /**
* @description Get a specific File by uid * @description Get a specific File by uid
*/ */
@Get("/api/v1/super-admin/files/:uid") @Get("/api/v1/super-admin/files/:uid", [authHandler,ruleHandler])
protected async getOneByUid(req: Request, response: Response) { protected async getOneByUid(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];

View File

@ -6,6 +6,8 @@ import { Service } from "typedi";
import { OfficeFolders } from "@prisma/client"; import { OfficeFolders } from "@prisma/client";
import { OfficeFolder } from "le-coffre-resources/dist/SuperAdmin"; import { OfficeFolder } from "le-coffre-resources/dist/SuperAdmin";
import { validateOrReject } from "class-validator"; import { validateOrReject } from "class-validator";
import authHandler from "@App/middlewares/AuthHandler";
import ruleHandler from "@App/middlewares/RulesHandler";
@Controller() @Controller()
@Service() @Service()
@ -17,7 +19,7 @@ export default class OfficeFoldersController extends ApiController {
/** /**
* @description Get all folders * @description Get all folders
*/ */
@Get("/api/v1/super-admin/folders") @Get("/api/v1/super-admin/folders", [authHandler,ruleHandler])
protected async get(req: Request, response: Response) { protected async get(req: Request, response: Response) {
try { try {
//get query //get query
@ -41,7 +43,7 @@ export default class OfficeFoldersController extends ApiController {
/** /**
* @description Create a new folder * @description Create a new folder
*/ */
@Post("/api/v1/super-admin/folders") @Post("/api/v1/super-admin/folders", [authHandler,ruleHandler])
protected async post(req: Request, response: Response) { protected async post(req: Request, response: Response) {
try { try {
//init OfficeFolder resource with request body values //init OfficeFolder resource with request body values
@ -78,7 +80,7 @@ export default class OfficeFoldersController extends ApiController {
/** /**
* @description Modify a specific folder by uid * @description Modify a specific folder by uid
*/ */
@Put("/api/v1/super-admin/folders/:uid") @Put("/api/v1/super-admin/folders/:uid", [authHandler,ruleHandler])
protected async put(req: Request, response: Response) { protected async put(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];
@ -120,7 +122,7 @@ export default class OfficeFoldersController extends ApiController {
* @description Get a specific folder by uid * @description Get a specific folder by uid
* @returns IFolder * @returns IFolder
*/ */
@Get("/api/v1/super-admin/folders/:uid") @Get("/api/v1/super-admin/folders/:uid", [authHandler,ruleHandler])
protected async getOneByUid(req: Request, response: Response) { protected async getOneByUid(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];
@ -159,7 +161,7 @@ export default class OfficeFoldersController extends ApiController {
/** /**
* @description Delete a specific folder * @description Delete a specific folder
*/ */
@Delete("/api/v1/super-admin/folders/:uid") @Delete("/api/v1/super-admin/folders/:uid", [authHandler,ruleHandler])
protected async delete(req: Request, response: Response) { protected async delete(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];

View File

@ -6,6 +6,8 @@ import { Service } from "typedi";
import { Offices } from "@prisma/client"; import { Offices } from "@prisma/client";
import { Office as OfficeResource } from "le-coffre-resources/dist/SuperAdmin"; import { Office as OfficeResource } from "le-coffre-resources/dist/SuperAdmin";
import { validateOrReject } from "class-validator"; import { validateOrReject } from "class-validator";
import ruleHandler from "@App/middlewares/RulesHandler";
import authHandler from "@App/middlewares/AuthHandler";
@Controller() @Controller()
@Service() @Service()
@ -16,7 +18,7 @@ export default class OfficesController extends ApiController {
/** /**
* @description Get all offices * @description Get all offices
*/ */
@Get("/api/v1/super-admin/offices") @Get("/api/v1/super-admin/offices", [authHandler, ruleHandler])
protected async get(req: Request, response: Response) { protected async get(req: Request, response: Response) {
try { try {
//get query //get query
@ -35,7 +37,7 @@ export default class OfficesController extends ApiController {
/** /**
* @description Create a new office * @description Create a new office
*/ */
@Post("/api/v1/super-admin/offices") @Post("/api/v1/super-admin/offices", [authHandler,ruleHandler])
protected async post(req: Request, response: Response) { protected async post(req: Request, response: Response) {
try { try {
//init IUser resource with request body values //init IUser resource with request body values
@ -58,7 +60,7 @@ export default class OfficesController extends ApiController {
/** /**
* @description Modify a specific office by uid * @description Modify a specific office by uid
*/ */
@Put("/api/v1/super-admin/offices/:uid") @Put("/api/v1/super-admin/offices/:uid", [authHandler,ruleHandler])
protected async put(req: Request, response: Response) { protected async put(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];
@ -93,7 +95,7 @@ export default class OfficesController extends ApiController {
/** /**
* @description Get a specific office by uid * @description Get a specific office by uid
*/ */
@Get("/api/v1/super-admin/offices/:uid") @Get("/api/v1/super-admin/offices/:uid", [authHandler,ruleHandler])
protected async getOneByUid(req: Request, response: Response) { protected async getOneByUid(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];

View File

@ -6,6 +6,8 @@ import { Service } from "typedi";
import { validateOrReject } from "class-validator"; import { validateOrReject } from "class-validator";
import { Role } from "le-coffre-resources/dist/Notary"; import { Role } from "le-coffre-resources/dist/Notary";
import { Roles } from "@prisma/client"; import { Roles } from "@prisma/client";
import authHandler from "@App/middlewares/AuthHandler";
import ruleHandler from "@App/middlewares/RulesHandler";
@Controller() @Controller()
@Service() @Service()
@ -17,7 +19,7 @@ export default class RolesController extends ApiController {
/** /**
* @description Get all roles * @description Get all roles
*/ */
@Get("/api/v1/super-admin/roles") @Get("/api/v1/super-admin/roles", [authHandler,ruleHandler])
protected async get(req: Request, response: Response) { protected async get(req: Request, response: Response) {
try { try {
//get query //get query
@ -40,7 +42,7 @@ export default class RolesController extends ApiController {
/** /**
* @description Create a new role * @description Create a new role
*/ */
@Post("/api/v1/super-admin/roles") @Post("/api/v1/super-admin/roles", [authHandler,ruleHandler])
protected async getAddresses(req: Request, response: Response) { protected async getAddresses(req: Request, response: Response) {
try { try {
//init IRole resource with request body values //init IRole resource with request body values
@ -68,7 +70,7 @@ export default class RolesController extends ApiController {
/** /**
* @description Modify a specific role by uid * @description Modify a specific role by uid
*/ */
@Put("/api/v1/super-admin/roles/:uid") @Put("/api/v1/super-admin/roles/:uid", [authHandler,ruleHandler])
protected async put(req: Request, response: Response) { protected async put(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];
@ -109,7 +111,7 @@ export default class RolesController extends ApiController {
/** /**
* @description Get a specific role by uid * @description Get a specific role by uid
*/ */
@Get("/api/v1/super-admin/roles/:uid") @Get("/api/v1/super-admin/roles/:uid", [authHandler,ruleHandler])
protected async getOneByUid(req: Request, response: Response) { protected async getOneByUid(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];

View File

@ -6,6 +6,8 @@ import { Service } from "typedi";
import { validateOrReject } from "class-validator"; import { validateOrReject } from "class-validator";
import { Rule } from "le-coffre-resources/dist/Notary"; import { Rule } from "le-coffre-resources/dist/Notary";
import { Rules } from "@prisma/client"; import { Rules } from "@prisma/client";
import authHandler from "@App/middlewares/AuthHandler";
import ruleHandler from "@App/middlewares/RulesHandler";
@Controller() @Controller()
@Service() @Service()
@ -17,7 +19,7 @@ export default class RulesController extends ApiController {
/** /**
* @description Get all rules * @description Get all rules
*/ */
@Get("/api/v1/super-admin/rules") @Get("/api/v1/super-admin/rules", [authHandler,ruleHandler])
protected async get(req: Request, response: Response) { protected async get(req: Request, response: Response) {
try { try {
//get query //get query
@ -40,7 +42,7 @@ export default class RulesController extends ApiController {
/** /**
* @description Create a new rule * @description Create a new rule
*/ */
@Post("/api/v1/super-admin/rules") @Post("/api/v1/super-admin/rules", [authHandler,ruleHandler])
protected async getAddresses(req: Request, response: Response) { protected async getAddresses(req: Request, response: Response) {
try { try {
//init IRule resource with request body values //init IRule resource with request body values
@ -68,7 +70,7 @@ export default class RulesController extends ApiController {
/** /**
* @description Modify a specific rule by uid * @description Modify a specific rule by uid
*/ */
@Put("/api/v1/super-admin/rules/:uid") @Put("/api/v1/super-admin/rules/:uid", [authHandler,ruleHandler])
protected async put(req: Request, response: Response) { protected async put(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];
@ -109,7 +111,7 @@ export default class RulesController extends ApiController {
/** /**
* @description Get a specific rule by uid * @description Get a specific rule by uid
*/ */
@Get("/api/v1/super-admin/rules/:uid") @Get("/api/v1/super-admin/rules/:uid", [authHandler,ruleHandler])
protected async getOneByUid(req: Request, response: Response) { protected async getOneByUid(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];

View File

@ -7,6 +7,7 @@ import { validateOrReject } from "class-validator";
import User from "le-coffre-resources/dist/Notary"; import User from "le-coffre-resources/dist/Notary";
import { Users } from "@prisma/client"; import { Users } from "@prisma/client";
import authHandler from "@App/middlewares/AuthHandler"; import authHandler from "@App/middlewares/AuthHandler";
import ruleHandler from "@App/middlewares/RulesHandler";
@Controller() @Controller()
@Service() @Service()
@ -18,7 +19,7 @@ export default class UsersController extends ApiController {
/** /**
* @description Get all users * @description Get all users
*/ */
@Get("/api/v1/super-admin/users", [authHandler]) @Get("/api/v1/super-admin/users", [authHandler,ruleHandler])
protected async get(req: Request, response: Response) { protected async get(req: Request, response: Response) {
try { try {
//get query //get query
@ -41,7 +42,7 @@ export default class UsersController extends ApiController {
/** /**
* @description Create a new user * @description Create a new user
*/ */
@Post("/api/v1/super-admin/users", [authHandler]) @Post("/api/v1/super-admin/users", [authHandler, ruleHandler])
protected async getAddresses(req: Request, response: Response) { protected async getAddresses(req: Request, response: Response) {
try { try {
//init IUser resource with request body values //init IUser resource with request body values
@ -69,7 +70,7 @@ export default class UsersController extends ApiController {
/** /**
* @description Modify a specific user by uid * @description Modify a specific user by uid
*/ */
@Put("/api/v1/super-admin/users/:uid") @Put("/api/v1/super-admin/users/:uid", [authHandler,ruleHandler])
protected async put(req: Request, response: Response) { protected async put(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];
@ -110,7 +111,7 @@ export default class UsersController extends ApiController {
/** /**
* @description Get a specific user by uid * @description Get a specific user by uid
*/ */
@Get("/api/v1/super-admin/users/:uid") @Get("/api/v1/super-admin/users/:uid",[authHandler,ruleHandler])
protected async getOneByUid(req: Request, response: Response) { protected async getOneByUid(req: Request, response: Response) {
try { try {
const uid = req.params["uid"]; const uid = req.params["uid"];

View File

@ -8,7 +8,7 @@ import DeedsController from "./api/super-admin/DeedsController";
import DeedTypesController from "./api/super-admin/DeedTypesController"; import DeedTypesController from "./api/super-admin/DeedTypesController";
import DocumentsController from "./api/super-admin/DocumentsController"; import DocumentsController from "./api/super-admin/DocumentsController";
import DocumentTypesController from "./api/super-admin/DocumentTypesController"; import DocumentTypesController from "./api/super-admin/DocumentTypesController";
import IdNotUserInfoController from "./api/idnot-user/UserInfoController"; import IdNotUserController from "./api/idnot/UserController";
import DocumentsControllerCustomer from "./api/customer/DocumentsController"; import DocumentsControllerCustomer from "./api/customer/DocumentsController";
import FilesController from "./api/super-admin/FilesController"; import FilesController from "./api/super-admin/FilesController";
import RulesController from "./api/super-admin/RolesController"; import RulesController from "./api/super-admin/RolesController";
@ -29,7 +29,7 @@ export default {
Container.get(DeedTypesController); Container.get(DeedTypesController);
Container.get(DocumentsController); Container.get(DocumentsController);
Container.get(DocumentTypesController); Container.get(DocumentTypesController);
Container.get(IdNotUserInfoController); Container.get(IdNotUserController);
Container.get(FilesController); Container.get(FilesController);
Container.get(DocumentsControllerCustomer); Container.get(DocumentsControllerCustomer);
Container.get(RulesController); Container.get(RulesController);

View File

@ -1,5 +1,5 @@
import HttpCodes from "@Common/system/controller-pattern/HttpCodes"; import HttpCodes from "@Common/system/controller-pattern/HttpCodes";
import AuthService from "@Services/private-services/AuthService/AuthService"; import AuthService from "@Services/common/AuthService/AuthService";
import { NextFunction, Request, Response } from "express"; import { NextFunction, Request, Response } from "express";
import Container from "typedi"; import Container from "typedi";
@ -7,14 +7,20 @@ export default function authHandler(req: Request, response: Response, next: Next
const authHeader = req.headers['authorization']; const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1]; const token = authHeader && authHeader.split(' ')[1];
if (!token) return response.sendStatus(HttpCodes.UNAUTHORIZED) if (!token) {
response.sendStatus(HttpCodes.UNAUTHORIZED)
return;
}
const authService = Container.get(AuthService); const authService = Container.get(AuthService);
authService.verifyAccessToken(token, (err, userPayload) => { authService.verifyAccessToken(token, (err, userPayload) => {
if (err) return response.sendStatus(HttpCodes.UNAUTHORIZED); if (err) {
req.body.user = userPayload; response.sendStatus(HttpCodes.UNAUTHORIZED);
return; return;
}) }
return next(); console.log(userPayload);
req.body.user = userPayload
next();
});
} }

View File

@ -0,0 +1,22 @@
import HttpCodes from "@Common/system/controller-pattern/HttpCodes";
import { NextFunction, Request, Response } from "express";
export default async function ruleHandler(req: Request, response: Response, next: NextFunction) {
const rules = req.body.user.rules;
const service = req.path && req.path.split('/')[4];
const namespace = req.path && req.path.split('/')[3];
const role = req.body.user.role;
if(namespace != 'notary' && role != namespace) {
response.sendStatus(HttpCodes.UNAUTHORIZED);
return;
}
if(!rules.includes(req.method + ' ' + service)) {
response.sendStatus(HttpCodes.UNAUTHORIZED);
return;
}
next();
}

View File

@ -0,0 +1,37 @@
/*
Warnings:
- You are about to drop the column `office_role_has_rules_uid` on the `rules` table. All the data in the column will be lost.
- You are about to drop the column `role_has_rules_uid` on the `rules` table. All the data in the column will be lost.
- Added the required column `office_uid` to the `office_role_has_rules` table without a default value. This is not possible if the table is not empty.
*/
-- DropForeignKey
ALTER TABLE "rules" DROP CONSTRAINT "rules_office_role_has_rules_uid_fkey";
-- DropForeignKey
ALTER TABLE "rules" DROP CONSTRAINT "rules_role_has_rules_uid_fkey";
-- DropForeignKey
ALTER TABLE "users" DROP CONSTRAINT "users_roles_uid_fkey";
-- AlterTable
ALTER TABLE "office_role_has_rules" ADD COLUMN "office_uid" VARCHAR(255) NOT NULL;
-- AlterTable
ALTER TABLE "rules" DROP COLUMN "office_role_has_rules_uid",
DROP COLUMN "role_has_rules_uid",
ADD COLUMN "officesRolesHasRulesUid" TEXT,
ADD COLUMN "rolesHasRulesUid" TEXT;
-- AddForeignKey
ALTER TABLE "users" ADD CONSTRAINT "users_roles_uid_fkey" FOREIGN KEY ("roles_uid") REFERENCES "roles"("uid") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "rules" ADD CONSTRAINT "rules_rolesHasRulesUid_fkey" FOREIGN KEY ("rolesHasRulesUid") REFERENCES "role_has_rules"("uid") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "rules" ADD CONSTRAINT "rules_officesRolesHasRulesUid_fkey" FOREIGN KEY ("officesRolesHasRulesUid") REFERENCES "office_role_has_rules"("uid") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "office_role_has_rules" ADD CONSTRAINT "office_role_has_rules_office_uid_fkey" FOREIGN KEY ("office_uid") REFERENCES "offices"("uid") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,24 @@
/*
Warnings:
- You are about to drop the column `officesRolesHasRulesUid` on the `rules` table. All the data in the column will be lost.
- You are about to drop the column `rolesHasRulesUid` on the `rules` table. All the data in the column will be lost.
*/
-- DropForeignKey
ALTER TABLE "rules" DROP CONSTRAINT "rules_officesRolesHasRulesUid_fkey";
-- DropForeignKey
ALTER TABLE "rules" DROP CONSTRAINT "rules_rolesHasRulesUid_fkey";
-- AlterTable
ALTER TABLE "rules" DROP COLUMN "officesRolesHasRulesUid",
DROP COLUMN "rolesHasRulesUid",
ADD COLUMN "office_role_has_rules_uid" TEXT,
ADD COLUMN "role_has_rules_uid" TEXT;
-- AddForeignKey
ALTER TABLE "rules" ADD CONSTRAINT "rules_role_has_rules_uid_fkey" FOREIGN KEY ("role_has_rules_uid") REFERENCES "role_has_rules"("uid") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "rules" ADD CONSTRAINT "rules_office_role_has_rules_uid_fkey" FOREIGN KEY ("office_role_has_rules_uid") REFERENCES "office_role_has_rules"("uid") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -0,0 +1,12 @@
/*
Warnings:
- You are about to drop the column `rule_uid` on the `office_role_has_rules` table. All the data in the column will be lost.
- You are about to drop the column `rule_uid` on the `role_has_rules` table. All the data in the column will be lost.
*/
-- AlterTable
ALTER TABLE "office_role_has_rules" DROP COLUMN "rule_uid";
-- AlterTable
ALTER TABLE "role_has_rules" DROP COLUMN "rule_uid";

View File

@ -0,0 +1,30 @@
/*
Warnings:
- You are about to drop the column `office_role_has_rules_uid` on the `rules` table. All the data in the column will be lost.
- You are about to drop the column `role_has_rules_uid` on the `rules` table. All the data in the column will be lost.
- Added the required column `rule_uid` to the `office_role_has_rules` table without a default value. This is not possible if the table is not empty.
- Added the required column `rule_uid` to the `role_has_rules` table without a default value. This is not possible if the table is not empty.
*/
-- DropForeignKey
ALTER TABLE "rules" DROP CONSTRAINT "rules_office_role_has_rules_uid_fkey";
-- DropForeignKey
ALTER TABLE "rules" DROP CONSTRAINT "rules_role_has_rules_uid_fkey";
-- AlterTable
ALTER TABLE "office_role_has_rules" ADD COLUMN "rule_uid" VARCHAR(255) NOT NULL;
-- AlterTable
ALTER TABLE "role_has_rules" ADD COLUMN "rule_uid" VARCHAR(255) NOT NULL;
-- AlterTable
ALTER TABLE "rules" DROP COLUMN "office_role_has_rules_uid",
DROP COLUMN "role_has_rules_uid";
-- AddForeignKey
ALTER TABLE "role_has_rules" ADD CONSTRAINT "role_has_rules_rule_uid_fkey" FOREIGN KEY ("rule_uid") REFERENCES "rules"("uid") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "office_role_has_rules" ADD CONSTRAINT "office_role_has_rules_rule_uid_fkey" FOREIGN KEY ("rule_uid") REFERENCES "rules"("uid") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -67,19 +67,20 @@ model Users {
} }
model Offices { model Offices {
uid String @id @unique @default(uuid()) uid String @id @unique @default(uuid())
idNot String @unique @db.VarChar(255) idNot String @unique @db.VarChar(255)
name String @db.VarChar(255) name String @db.VarChar(255)
crpcen String @unique @db.VarChar(255) crpcen String @unique @db.VarChar(255)
address Addresses @relation(fields: [address_uid], references: [uid], onDelete: Cascade) address Addresses @relation(fields: [address_uid], references: [uid], onDelete: Cascade)
address_uid String @unique @db.VarChar(255) address_uid String @unique @db.VarChar(255)
office_status EOfficeStatus @default(DESACTIVATED) office_status EOfficeStatus @default(DESACTIVATED)
created_at DateTime? @default(now()) created_at DateTime? @default(now())
updated_at DateTime? @updatedAt updated_at DateTime? @updatedAt
deed_types DeedTypes[] deed_types DeedTypes[]
users Users[] users Users[]
office_folders OfficeFolders[] office_folders OfficeFolders[]
document_types DocumentTypes[] document_types DocumentTypes[]
office_role_has_rules OfficesRolesHasRules[]
@@map("offices") @@map("offices")
} }
@ -299,26 +300,24 @@ model DeedTypeHasDocumentTypes {
} }
model Roles { model Roles {
uid String @id @unique @default(uuid()) uid String @id @unique @default(uuid())
name String @db.VarChar(255) name String @db.VarChar(255)
created_at DateTime? @default(now()) created_at DateTime? @default(now())
updated_at DateTime? @updatedAt updated_at DateTime? @updatedAt
role_has_rules RolesHasRules[] role_has_rules RolesHasRules[]
office_role_has_rules OfficesRolesHasRules[] office_role_has_rules OfficesRolesHasRules[]
users Users[] users Users[]
@@map("roles") @@map("roles")
} }
model Rules { model Rules {
uid String @id @unique @default(uuid()) uid String @id @unique @default(uuid())
name String @db.VarChar(255) name String @db.VarChar(255)
created_at DateTime? @default(now()) created_at DateTime? @default(now())
updated_at DateTime? @updatedAt updated_at DateTime? @updatedAt
role_has_rules RolesHasRules? @relation(fields: [role_has_rules_uid], references: [uid]) role_has_rules RolesHasRules[]
role_has_rules_uid String? office_roles_has_rules OfficesRolesHasRules[]
office_role_has_rules OfficesRolesHasRules? @relation(fields: [office_role_has_rules_uid], references: [uid])
office_role_has_rules_uid String?
@@map("rules") @@map("rules")
} }
@ -327,22 +326,24 @@ model RolesHasRules {
uid String @id @unique @default(uuid()) uid String @id @unique @default(uuid())
role Roles @relation(fields: [role_uid], references: [uid], onDelete: Cascade) role Roles @relation(fields: [role_uid], references: [uid], onDelete: Cascade)
role_uid String @db.VarChar(255) role_uid String @db.VarChar(255)
rule Rules @relation(fields: [rule_uid], references: [uid], onDelete: Cascade)
rule_uid String @db.VarChar(255) rule_uid String @db.VarChar(255)
created_at DateTime? @default(now()) created_at DateTime? @default(now())
updated_at DateTime? @updatedAt updated_at DateTime? @updatedAt
rules Rules[]
@@map("role_has_rules") @@map("role_has_rules")
} }
model OfficesRolesHasRules { model OfficesRolesHasRules {
uid String @id @unique @default(uuid()) uid String @id @unique @default(uuid())
office Offices @relation(fields: [office_uid], references: [uid], onDelete: Cascade)
role Roles @relation(fields: [role_uid], references: [uid], onDelete: Cascade) role Roles @relation(fields: [role_uid], references: [uid], onDelete: Cascade)
rule Rules @relation(fields: [rule_uid], references: [uid], onDelete: Cascade)
office_uid String @db.VarChar(255)
role_uid String @db.VarChar(255) role_uid String @db.VarChar(255)
rule_uid String @db.VarChar(255) rule_uid String @db.VarChar(255)
created_at DateTime? @default(now()) created_at DateTime? @default(now())
updated_at DateTime? @updatedAt updated_at DateTime? @updatedAt
rules Rules[]
@@map("office_role_has_rules") @@map("office_role_has_rules")
} }

View File

@ -18,6 +18,9 @@ import {
ECustomerStatus, ECustomerStatus,
PrismaClient, PrismaClient,
Roles, Roles,
OfficesRolesHasRules,
RolesHasRules,
Rules,
} from "@prisma/client"; } from "@prisma/client";
(async () => { (async () => {
@ -104,6 +107,9 @@ import {
const uidRole1: string = randomString(); const uidRole1: string = randomString();
const uidRole2: string = randomString(); const uidRole2: string = randomString();
const uidRule1: string = randomString();
const uidRule2: string = randomString();
const uidOfficeFolder1: string = randomString(); const uidOfficeFolder1: string = randomString();
const uidOfficeFolder2: string = randomString(); const uidOfficeFolder2: string = randomString();
const uidOfficeFolder3: string = randomString(); const uidOfficeFolder3: string = randomString();
@ -167,6 +173,12 @@ import {
const uidOfficeFolderHasCustomer3: string = randomString(); const uidOfficeFolderHasCustomer3: string = randomString();
const uidOfficeFolderHasCustomer4: string = randomString(); const uidOfficeFolderHasCustomer4: string = randomString();
const uidOfficeRoleHasRule1: string = randomString();
const uidOfficeRoleHasRule2: string = randomString();
const uidRoleHasRule1: string = randomString();
const uidRoleHasRule2: string = randomString();
const uidDeedHasDocumentType1: string = randomString(); const uidDeedHasDocumentType1: string = randomString();
const uidDeedHasDocumentType2: string = randomString(); const uidDeedHasDocumentType2: string = randomString();
const uidDeedHasDocumentType3: string = randomString(); const uidDeedHasDocumentType3: string = randomString();
@ -1688,6 +1700,57 @@ import {
}, },
]; ];
const officeRoleHasRules: OfficesRolesHasRules[] = [
{
uid: uidOfficeRoleHasRule1,
office_uid: uidOffice1,
role_uid: uidRole1,
rule_uid: uidRule1,
created_at: new Date(),
updated_at: new Date(),
},
{
uid: uidOfficeRoleHasRule2,
office_uid: uidOffice1,
role_uid: uidRole2,
rule_uid: uidRule2,
created_at: new Date(),
updated_at: new Date(),
},
];
const roleHasRules: RolesHasRules[] = [
{
uid: uidRoleHasRule1,
role_uid: uidRole1,
rule_uid: uidRule2,
created_at: new Date(),
updated_at: new Date(),
},
{
uid: uidRoleHasRule2,
role_uid: uidRole2,
rule_uid: uidRule1,
created_at: new Date(),
updated_at: new Date(),
},
];
const rules: Rules[] = [
{
uid: uidRule1,
name: 'GET users',
created_at: new Date(),
updated_at: new Date(),
},
{
uid: uidRule2,
name: 'GET offices',
created_at: new Date(),
updated_at: new Date(),
}
];
const deedTypeHasDocumentTypes: DeedTypeHasDocumentTypes[] = [ const deedTypeHasDocumentTypes: DeedTypeHasDocumentTypes[] = [
{ {
uid: uidDeedTypeHasDocumentType1, uid: uidDeedTypeHasDocumentType1,
@ -1868,6 +1931,10 @@ import {
await prisma.roles.create({ data: role }); await prisma.roles.create({ data: role });
} }
for (const rule of rules) {
await prisma.rules.create({ data: rule });
}
for (const user of users) { for (const user of users) {
await prisma.users.create({ data: user }); await prisma.users.create({ data: user });
} }
@ -1899,6 +1966,14 @@ import {
await prisma.officeFolderHasCustomers.create({ data: officeFolderHasCustomer }); await prisma.officeFolderHasCustomers.create({ data: officeFolderHasCustomer });
} }
for (const officeRoleHasRule of officeRoleHasRules) {
await prisma.officesRolesHasRules.create({ data: officeRoleHasRule });
}
for (const roleHasRule of roleHasRules) {
await prisma.rolesHasRules.create({ data: roleHasRule });
}
for (const deedHasDocumentType of deedHasDocumentTypes) { for (const deedHasDocumentType of deedHasDocumentTypes) {
await prisma.deedHasDocumentTypes.create({ data: deedHasDocumentType }); await prisma.deedHasDocumentTypes.create({ data: deedHasDocumentType });
} }

View File

@ -41,6 +41,17 @@ export default class RolesRepository extends BaseRepository {
}, },
}, },
}; };
if (role.office_role_has_rules) {
createArgs.data.office_role_has_rules = {
createMany: {
data: role.office_role_has_rules.rules.map((relation) => ({
office_uid: role.office_role_has_rules!.office.uid!,
rule_uid: relation.uid!,
})),
skipDuplicates: true,
},
};
}
return this.model.create(createArgs); return this.model.create(createArgs);
} }
@ -66,11 +77,12 @@ export default class RolesRepository extends BaseRepository {
}, },
}, },
}; };
if(role.office_role_has_rules) { if (role.office_role_has_rules) {
updateArgs.data.office_role_has_rules = { updateArgs.data.office_role_has_rules = {
deleteMany: { role_uid: role.uid }, deleteMany: { role_uid: role.uid },
createMany: { createMany: {
data: role.office_role_has_rules.rules.map((relation) => ({ data: role.office_role_has_rules.rules.map((relation) => ({
office_uid: role.office_role_has_rules!.office.uid!,
rule_uid: relation.uid!, rule_uid: relation.uid!,
})), })),
skipDuplicates: true, skipDuplicates: true,

View File

@ -0,0 +1,16 @@
export type Payload = {
sub: string;
email: string;
};
export type Tokens = {
access_token: string;
expires_in: number;
id_token: string;
token_type: string;
};
export default interface OpenIdInterface {
verifyIdToken(signingKey: string): Promise<Payload>;
getSigningKeys(jwksUri: string): Promise<string[]>;
}

View File

@ -11,6 +11,7 @@ import { BackendVariables } from "@Common/config/variables/Variables";
//import fileHandler from "@App/middlewares/FileHandler"; //import fileHandler from "@App/middlewares/FileHandler";
import multer from "multer"; import multer from "multer";
const storage = multer.memoryStorage(); const storage = multer.memoryStorage();
(async () => { (async () => {

View File

@ -0,0 +1,65 @@
import jwt, { VerifyCallback } from "jsonwebtoken";
import BaseService from "@Services/BaseService";
import "reflect-metadata";
import { BackendVariables } from "@Common/config/variables/Variables";
import { Service } from "typedi";
import UsersService from "@Services/super-admin/UsersService/UsersService";
export type UserPayload = {
uid: string;
idNot: string;
office_idNot: string;
role: string;
rules: string[];
};
@Service()
export default class AuthService extends BaseService {
constructor(protected variables: BackendVariables, private userService: UsersService) {
super();
}
public async getUserPayload(id: string): Promise<UserPayload> {
const user: any = (
await this.userService.get({
where: { idNot: id },
include: {
role: { include: { role_has_rules: { include: { rule: true } }, office_role_has_rules: { include: { rule: true } } } },
office_membership: true,
},
})
)[0];
if (!user) throw new Error("User not found");
let rules: string[] = [];
if (user.role.office_role_has_rules.length) {
user.role.office_role_has_rules.forEach((relation: any) => {
if (relation.office_uid === user.office_membership.uid) rules.push(relation.rule.name);
});
return { uid: user.uid, idNot: user.idNot, office_idNot: user.office_membership.idNot, role: user.role.name, rules: rules };
}
if (!rules.length) {
user.role.role_has_rules.forEach((relation: any) => {
rules.push(relation.rule.name);
});
}
return { uid: user.uid, idNot: user.idNot, office_idNot: user.office_membership.idNot, role: user.role.name, rules: rules };
}
public generateAccessToken(user: any): string {
return jwt.sign({ ...user }, this.variables.ACCESS_TOKEN_SECRET, { expiresIn: "15m" });
}
public generateRefreshToken(user: any): string {
return jwt.sign({ ...user }, this.variables.REFRESH_TOKEN_SECRET, { expiresIn: "1h" });
}
public verifyAccessToken(token: string, callback?: VerifyCallback) {
return jwt.verify(token, this.variables.ACCESS_TOKEN_SECRET, callback);
}
public verifyRefreshToken(token: string, callback?: VerifyCallback) {
return jwt.verify(token, this.variables.REFRESH_TOKEN_SECRET, callback);
}
}

View File

@ -1,69 +0,0 @@
import jwt, { VerifyCallback } from "jsonwebtoken";
import BaseService from "@Services/BaseService";
import "reflect-metadata";
import { BackendVariables } from "@Common/config/variables/Variables";
import { Service } from "typedi";
type IdNotTokens = {
access_token: string;
id_token: string;
};
@Service()
export default class AuthService extends BaseService {
constructor(protected variables: BackendVariables) {
super();
}
/**
* @description : Get IdNot id_token and access_token
* @throws {Error} If jwt pair cannot be get
*/
public async getUserFromIdNotTokens(code: string) {
const tokens = await this.getIdNotTokens(code);
return jwt.decode(tokens.id_token);
}
private async getIdNotTokens(code: string): Promise<IdNotTokens> {
const url = new URL(
this.variables.IDNOT_CONNEXION_URL.concat("?") +
new URLSearchParams({
client_id: this.variables.IDNOT_CLIENT_ID,
client_secret: this.variables.IDNOT_CLIENT_SECRET,
redirect_uri: this.variables.IDNOT_REDIRECT_URL,
code: code,
grant_type: "authorization_code",
}),
);
try {
const headers = new Headers({
"Content-Type": "application/x-www-form-urlencoded",
});
const res = await fetch(url, {
method: "POST",
headers: headers,
});
const data = await res.json();
return data as IdNotTokens;
} catch (error) {
throw new Error();
}
}
public generateAccessToken(user: any) {
return jwt.sign({...user}, this.variables.ACCESS_TOKEN_SECRET, { expiresIn: "15m" });
}
public generateRefreshToken(user: any) {
return jwt.sign({...user}, this.variables.REFRESH_TOKEN_SECRET, { expiresIn: "1h" });
}
public verifyAccessToken(token: string, callback?: VerifyCallback) {
return jwt.verify(token, this.variables.ACCESS_TOKEN_SECRET, callback);
}
public verifyRefreshToken(token: string, callback?: VerifyCallback) {
return jwt.verify(token, this.variables.REFRESH_TOKEN_SECRET, callback);
}
}