diff --git a/src/app/api/idnot-user/UserInfoController.ts b/src/app/api/idnot-user/UserInfoController.ts deleted file mode 100644 index 80b6dc4a..00000000 --- a/src/app/api/idnot-user/UserInfoController.ts +++ /dev/null @@ -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(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(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; - } - } -} diff --git a/src/app/api/idnot/UserController.ts b/src/app/api/idnot/UserController.ts new file mode 100644 index 00000000..ad72402d --- /dev/null +++ b/src/app/api/idnot/UserController.ts @@ -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; + } + } +} diff --git a/src/app/api/super-admin/CustomersController.ts b/src/app/api/super-admin/CustomersController.ts index 6bd28b1e..440de50b 100644 --- a/src/app/api/super-admin/CustomersController.ts +++ b/src/app/api/super-admin/CustomersController.ts @@ -6,6 +6,8 @@ import { Service } from "typedi"; import { Customer } from "le-coffre-resources/dist/SuperAdmin"; import { Customers } from "@prisma/client"; import { validateOrReject } from "class-validator"; +import authHandler from "@App/middlewares/AuthHandler"; +import ruleHandler from "@App/middlewares/RulesHandler"; @Controller() @Service() @@ -17,7 +19,7 @@ export default class CustomersController extends ApiController { /** * @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) { try { //get query @@ -40,7 +42,7 @@ export default class CustomersController extends ApiController { /** * @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) { try { //init IUser resource with request body values @@ -66,7 +68,7 @@ export default class CustomersController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; @@ -107,7 +109,7 @@ export default class CustomersController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/DeedTypesController.ts b/src/app/api/super-admin/DeedTypesController.ts index 5f038ba9..d890bc2c 100644 --- a/src/app/api/super-admin/DeedTypesController.ts +++ b/src/app/api/super-admin/DeedTypesController.ts @@ -6,6 +6,8 @@ import DeedTypesService from "@Services/super-admin/DeedTypesService/DeedTypesSe import { DeedTypes } from "@prisma/client"; import { DeedType } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; +import authHandler from "@App/middlewares/AuthHandler"; +import ruleHandler from "@App/middlewares/RulesHandler"; @Controller() @Service() @@ -18,7 +20,7 @@ export default class DeedTypesController extends ApiController { * @description Get all 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) { try { //get query @@ -41,7 +43,7 @@ export default class DeedTypesController extends ApiController { * @description Create a new deedtype * @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) { try { //init DeedType resource with request body values @@ -70,7 +72,7 @@ export default class DeedTypesController extends ApiController { * @description Modify a specific deedtype by uid * @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) { try { const uid = req.params["uid"]; @@ -112,7 +114,7 @@ export default class DeedTypesController extends ApiController { * @description Get a specific deedtype by uid * @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) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/DeedsController.ts b/src/app/api/super-admin/DeedsController.ts index 3f4d3c62..2dd94592 100644 --- a/src/app/api/super-admin/DeedsController.ts +++ b/src/app/api/super-admin/DeedsController.ts @@ -6,6 +6,8 @@ import { Service } from "typedi"; import { Deeds } from "@prisma/client"; import { Deed } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; +import authHandler from "@App/middlewares/AuthHandler"; +import ruleHandler from "@App/middlewares/RulesHandler"; @Controller() @Service() @@ -18,7 +20,7 @@ export default class DeedsController extends ApiController { * @description Get all 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) { try { //get query @@ -41,7 +43,7 @@ export default class DeedsController extends ApiController { * @description Get a specific deed by uid * @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) { try { const uid = req.params["uid"]; @@ -79,7 +81,7 @@ export default class DeedsController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/DocumentTypesController.ts b/src/app/api/super-admin/DocumentTypesController.ts index ecd89e14..99cef9ac 100644 --- a/src/app/api/super-admin/DocumentTypesController.ts +++ b/src/app/api/super-admin/DocumentTypesController.ts @@ -7,6 +7,8 @@ import { DocumentTypes } from "@prisma/client"; import ObjectHydrate from "@Common/helpers/ObjectHydrate"; import { DocumentType } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; +import authHandler from "@App/middlewares/AuthHandler"; +import ruleHandler from "@App/middlewares/RulesHandler"; @Controller() @Service() @@ -18,7 +20,7 @@ export default class DocumentTypesController extends ApiController { /** * @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) { try { //get query @@ -43,7 +45,7 @@ export default class DocumentTypesController extends ApiController { /** * @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) { try { //init DocumentType resource with request body values @@ -67,7 +69,7 @@ export default class DocumentTypesController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; @@ -107,7 +109,7 @@ export default class DocumentTypesController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/DocumentsController.ts b/src/app/api/super-admin/DocumentsController.ts index 009d33ca..cfc5bb2f 100644 --- a/src/app/api/super-admin/DocumentsController.ts +++ b/src/app/api/super-admin/DocumentsController.ts @@ -6,6 +6,8 @@ import DocumentsService from "@Services/super-admin/DocumentsService/DocumentsSe import { Documents } from "@prisma/client"; import { Document } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; +import authHandler from "@App/middlewares/AuthHandler"; +import ruleHandler from "@App/middlewares/RulesHandler"; @Controller() @Service() @@ -18,7 +20,7 @@ export default class DocumentsController extends ApiController { * @description Get all 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) { try { //get query @@ -42,7 +44,7 @@ export default class DocumentsController extends ApiController { * @description Create a new document * @returns IDocument created */ - @Post("/api/v1/super-admin/documents") + @Post("/api/v1/super-admin/documents", [authHandler,ruleHandler]) protected async post(req: Request, response: Response) { try { //init Document resource with request body values @@ -70,7 +72,7 @@ export default class DocumentsController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; @@ -109,7 +111,7 @@ export default class DocumentsController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; @@ -142,7 +144,7 @@ export default class DocumentsController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/FilesController.ts b/src/app/api/super-admin/FilesController.ts index 3bfd52da..465e684f 100644 --- a/src/app/api/super-admin/FilesController.ts +++ b/src/app/api/super-admin/FilesController.ts @@ -2,11 +2,13 @@ import { Response, Request } from "express"; import { Controller, Delete, Get, Post, Put } from "@ControllerPattern/index"; import ApiController from "@Common/system/controller-pattern/ApiController"; 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 { File } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; import DocumentsService from "@Services/super-admin/DocumentsService/DocumentsService"; +import authHandler from "@App/middlewares/AuthHandler"; +import ruleHandler from "@App/middlewares/RulesHandler"; @Controller() @Service() @@ -19,7 +21,7 @@ export default class FilesController extends ApiController { * @description Get all 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) { try { //get query @@ -42,7 +44,7 @@ export default class FilesController extends ApiController { /** * @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) { const uid = req.params["uid"]; if (!uid) { @@ -71,7 +73,7 @@ export default class FilesController extends ApiController { * @description Create a new File * @returns File created */ - @Post("/api/v1/super-admin/files") + @Post("/api/v1/super-admin/files", [authHandler,ruleHandler]) protected async post(req: Request, response: Response) { try { //get file @@ -112,7 +114,7 @@ export default class FilesController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; @@ -150,7 +152,7 @@ export default class FilesController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; @@ -188,7 +190,7 @@ export default class FilesController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/OfficeFoldersController.ts b/src/app/api/super-admin/OfficeFoldersController.ts index ed2dbce1..6999e03b 100644 --- a/src/app/api/super-admin/OfficeFoldersController.ts +++ b/src/app/api/super-admin/OfficeFoldersController.ts @@ -6,6 +6,8 @@ import { Service } from "typedi"; import { OfficeFolders } from "@prisma/client"; import { OfficeFolder } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; +import authHandler from "@App/middlewares/AuthHandler"; +import ruleHandler from "@App/middlewares/RulesHandler"; @Controller() @Service() @@ -17,7 +19,7 @@ export default class OfficeFoldersController extends ApiController { /** * @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) { try { //get query @@ -41,7 +43,7 @@ export default class OfficeFoldersController extends ApiController { /** * @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) { try { //init OfficeFolder resource with request body values @@ -78,7 +80,7 @@ export default class OfficeFoldersController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; @@ -120,7 +122,7 @@ export default class OfficeFoldersController extends ApiController { * @description Get a specific folder by uid * @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) { try { const uid = req.params["uid"]; @@ -159,7 +161,7 @@ export default class OfficeFoldersController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/OfficesController.ts b/src/app/api/super-admin/OfficesController.ts index 86de50f5..2ec24cc1 100644 --- a/src/app/api/super-admin/OfficesController.ts +++ b/src/app/api/super-admin/OfficesController.ts @@ -6,6 +6,8 @@ import { Service } from "typedi"; import { Offices } from "@prisma/client"; import { Office as OfficeResource } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; +import ruleHandler from "@App/middlewares/RulesHandler"; +import authHandler from "@App/middlewares/AuthHandler"; @Controller() @Service() @@ -16,7 +18,7 @@ export default class OfficesController extends ApiController { /** * @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) { try { //get query @@ -35,7 +37,7 @@ export default class OfficesController extends ApiController { /** * @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) { try { //init IUser resource with request body values @@ -58,7 +60,7 @@ export default class OfficesController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; @@ -93,7 +95,7 @@ export default class OfficesController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/RolesController.ts b/src/app/api/super-admin/RolesController.ts index d7d8bc8e..c4ac55af 100644 --- a/src/app/api/super-admin/RolesController.ts +++ b/src/app/api/super-admin/RolesController.ts @@ -6,6 +6,8 @@ import { Service } from "typedi"; import { validateOrReject } from "class-validator"; import { Role } from "le-coffre-resources/dist/Notary"; import { Roles } from "@prisma/client"; +import authHandler from "@App/middlewares/AuthHandler"; +import ruleHandler from "@App/middlewares/RulesHandler"; @Controller() @Service() @@ -17,7 +19,7 @@ export default class RolesController extends ApiController { /** * @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) { try { //get query @@ -40,7 +42,7 @@ export default class RolesController extends ApiController { /** * @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) { try { //init IRole resource with request body values @@ -68,7 +70,7 @@ export default class RolesController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; @@ -109,7 +111,7 @@ export default class RolesController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/RulesController.ts b/src/app/api/super-admin/RulesController.ts index 53b8d9a6..fe7e4ee3 100644 --- a/src/app/api/super-admin/RulesController.ts +++ b/src/app/api/super-admin/RulesController.ts @@ -6,6 +6,8 @@ import { Service } from "typedi"; import { validateOrReject } from "class-validator"; import { Rule } from "le-coffre-resources/dist/Notary"; import { Rules } from "@prisma/client"; +import authHandler from "@App/middlewares/AuthHandler"; +import ruleHandler from "@App/middlewares/RulesHandler"; @Controller() @Service() @@ -17,7 +19,7 @@ export default class RulesController extends ApiController { /** * @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) { try { //get query @@ -40,7 +42,7 @@ export default class RulesController extends ApiController { /** * @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) { try { //init IRule resource with request body values @@ -68,7 +70,7 @@ export default class RulesController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; @@ -109,7 +111,7 @@ export default class RulesController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/UsersController.ts b/src/app/api/super-admin/UsersController.ts index e25bd351..aa2de89c 100644 --- a/src/app/api/super-admin/UsersController.ts +++ b/src/app/api/super-admin/UsersController.ts @@ -7,6 +7,7 @@ import { validateOrReject } from "class-validator"; import User from "le-coffre-resources/dist/Notary"; import { Users } from "@prisma/client"; import authHandler from "@App/middlewares/AuthHandler"; +import ruleHandler from "@App/middlewares/RulesHandler"; @Controller() @Service() @@ -18,7 +19,7 @@ export default class UsersController extends ApiController { /** * @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) { try { //get query @@ -41,7 +42,7 @@ export default class UsersController extends ApiController { /** * @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) { try { //init IUser resource with request body values @@ -69,7 +70,7 @@ export default class UsersController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; @@ -110,7 +111,7 @@ export default class UsersController extends ApiController { /** * @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) { try { const uid = req.params["uid"]; diff --git a/src/app/index.ts b/src/app/index.ts index 62bb1c58..f23a9a7d 100644 --- a/src/app/index.ts +++ b/src/app/index.ts @@ -8,7 +8,7 @@ import DeedsController from "./api/super-admin/DeedsController"; import DeedTypesController from "./api/super-admin/DeedTypesController"; import DocumentsController from "./api/super-admin/DocumentsController"; 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 FilesController from "./api/super-admin/FilesController"; import RulesController from "./api/super-admin/RolesController"; @@ -29,7 +29,7 @@ export default { Container.get(DeedTypesController); Container.get(DocumentsController); Container.get(DocumentTypesController); - Container.get(IdNotUserInfoController); + Container.get(IdNotUserController); Container.get(FilesController); Container.get(DocumentsControllerCustomer); Container.get(RulesController); diff --git a/src/app/middlewares/AuthHandler.ts b/src/app/middlewares/AuthHandler.ts index f2bf8cb7..549cfe1f 100644 --- a/src/app/middlewares/AuthHandler.ts +++ b/src/app/middlewares/AuthHandler.ts @@ -1,5 +1,5 @@ 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 Container from "typedi"; @@ -7,14 +7,20 @@ export default function authHandler(req: Request, response: Response, next: Next const authHeader = req.headers['authorization']; 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); authService.verifyAccessToken(token, (err, userPayload) => { - if (err) return response.sendStatus(HttpCodes.UNAUTHORIZED); - req.body.user = userPayload; - return; - }) - return next(); + if (err) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + console.log(userPayload); + req.body.user = userPayload + next(); + }); } diff --git a/src/app/middlewares/RulesHandler.ts b/src/app/middlewares/RulesHandler.ts new file mode 100644 index 00000000..c1a4d6e6 --- /dev/null +++ b/src/app/middlewares/RulesHandler.ts @@ -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(); +} + diff --git a/src/common/databases/migrations/20230622172124_v2/migration.sql b/src/common/databases/migrations/20230622172124_v2/migration.sql new file mode 100644 index 00000000..34d5f531 --- /dev/null +++ b/src/common/databases/migrations/20230622172124_v2/migration.sql @@ -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; diff --git a/src/common/databases/migrations/20230622172838_v3/migration.sql b/src/common/databases/migrations/20230622172838_v3/migration.sql new file mode 100644 index 00000000..b218d50d --- /dev/null +++ b/src/common/databases/migrations/20230622172838_v3/migration.sql @@ -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; diff --git a/src/common/databases/migrations/20230623070044_v4/migration.sql b/src/common/databases/migrations/20230623070044_v4/migration.sql new file mode 100644 index 00000000..865da2cf --- /dev/null +++ b/src/common/databases/migrations/20230623070044_v4/migration.sql @@ -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"; diff --git a/src/common/databases/migrations/20230623072820_v5/migration.sql b/src/common/databases/migrations/20230623072820_v5/migration.sql new file mode 100644 index 00000000..417d4724 --- /dev/null +++ b/src/common/databases/migrations/20230623072820_v5/migration.sql @@ -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; diff --git a/src/common/databases/schema.prisma b/src/common/databases/schema.prisma index 1208df65..fa2ad5eb 100644 --- a/src/common/databases/schema.prisma +++ b/src/common/databases/schema.prisma @@ -67,19 +67,20 @@ model Users { } model Offices { - uid String @id @unique @default(uuid()) - idNot String @unique @db.VarChar(255) - name String @db.VarChar(255) - crpcen String @unique @db.VarChar(255) - address Addresses @relation(fields: [address_uid], references: [uid], onDelete: Cascade) - address_uid String @unique @db.VarChar(255) - office_status EOfficeStatus @default(DESACTIVATED) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - deed_types DeedTypes[] - users Users[] - office_folders OfficeFolders[] - document_types DocumentTypes[] + uid String @id @unique @default(uuid()) + idNot String @unique @db.VarChar(255) + name String @db.VarChar(255) + crpcen String @unique @db.VarChar(255) + address Addresses @relation(fields: [address_uid], references: [uid], onDelete: Cascade) + address_uid String @unique @db.VarChar(255) + office_status EOfficeStatus @default(DESACTIVATED) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + deed_types DeedTypes[] + users Users[] + office_folders OfficeFolders[] + document_types DocumentTypes[] + office_role_has_rules OfficesRolesHasRules[] @@map("offices") } @@ -299,26 +300,24 @@ model DeedTypeHasDocumentTypes { } model Roles { - uid String @id @unique @default(uuid()) - name String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - role_has_rules RolesHasRules[] + uid String @id @unique @default(uuid()) + name String @db.VarChar(255) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + role_has_rules RolesHasRules[] office_role_has_rules OfficesRolesHasRules[] - users Users[] + users Users[] @@map("roles") } model Rules { - uid String @id @unique @default(uuid()) - name String @db.VarChar(255) - created_at DateTime? @default(now()) - updated_at DateTime? @updatedAt - role_has_rules RolesHasRules? @relation(fields: [role_has_rules_uid], references: [uid]) - role_has_rules_uid String? - office_role_has_rules OfficesRolesHasRules? @relation(fields: [office_role_has_rules_uid], references: [uid]) - office_role_has_rules_uid String? + uid String @id @unique @default(uuid()) + name String @db.VarChar(255) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + role_has_rules RolesHasRules[] + office_roles_has_rules OfficesRolesHasRules[] @@map("rules") } @@ -327,22 +326,24 @@ model RolesHasRules { uid String @id @unique @default(uuid()) role Roles @relation(fields: [role_uid], references: [uid], onDelete: Cascade) role_uid String @db.VarChar(255) + rule Rules @relation(fields: [rule_uid], references: [uid], onDelete: Cascade) rule_uid String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt - rules Rules[] @@map("role_has_rules") } model OfficesRolesHasRules { 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) + rule Rules @relation(fields: [rule_uid], references: [uid], onDelete: Cascade) + office_uid String @db.VarChar(255) role_uid String @db.VarChar(255) rule_uid String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt - rules Rules[] @@map("office_role_has_rules") } diff --git a/src/common/databases/seeders/seeder2.ts b/src/common/databases/seeders/seeder2.ts index f76f8cde..ce81192e 100644 --- a/src/common/databases/seeders/seeder2.ts +++ b/src/common/databases/seeders/seeder2.ts @@ -18,6 +18,9 @@ import { ECustomerStatus, PrismaClient, Roles, + OfficesRolesHasRules, + RolesHasRules, + Rules, } from "@prisma/client"; (async () => { @@ -104,6 +107,9 @@ import { const uidRole1: string = randomString(); const uidRole2: string = randomString(); + const uidRule1: string = randomString(); + const uidRule2: string = randomString(); + const uidOfficeFolder1: string = randomString(); const uidOfficeFolder2: string = randomString(); const uidOfficeFolder3: string = randomString(); @@ -167,6 +173,12 @@ import { const uidOfficeFolderHasCustomer3: 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 uidDeedHasDocumentType2: 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[] = [ { uid: uidDeedTypeHasDocumentType1, @@ -1868,6 +1931,10 @@ import { await prisma.roles.create({ data: role }); } + for (const rule of rules) { + await prisma.rules.create({ data: rule }); + } + for (const user of users) { await prisma.users.create({ data: user }); } @@ -1899,6 +1966,14 @@ import { 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) { await prisma.deedHasDocumentTypes.create({ data: deedHasDocumentType }); } diff --git a/src/common/repositories/RolesRepository.ts b/src/common/repositories/RolesRepository.ts index 159674a5..3b69797a 100644 --- a/src/common/repositories/RolesRepository.ts +++ b/src/common/repositories/RolesRepository.ts @@ -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); } @@ -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 = { deleteMany: { role_uid: role.uid }, 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, diff --git a/src/common/system/OpenIdInterface.ts b/src/common/system/OpenIdInterface.ts new file mode 100644 index 00000000..d2d25049 --- /dev/null +++ b/src/common/system/OpenIdInterface.ts @@ -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; + getSigningKeys(jwksUri: string): Promise; +} diff --git a/src/entries/App.ts b/src/entries/App.ts index d9874748..0b426b5d 100644 --- a/src/entries/App.ts +++ b/src/entries/App.ts @@ -11,6 +11,7 @@ import { BackendVariables } from "@Common/config/variables/Variables"; //import fileHandler from "@App/middlewares/FileHandler"; import multer from "multer"; + const storage = multer.memoryStorage(); (async () => { diff --git a/src/services/private-services/AddressesService/AddressesService.ts b/src/services/common/AddressesService/AddressesService.ts similarity index 100% rename from src/services/private-services/AddressesService/AddressesService.ts rename to src/services/common/AddressesService/AddressesService.ts diff --git a/src/services/common/AuthService/AuthService.ts b/src/services/common/AuthService/AuthService.ts new file mode 100644 index 00000000..8d497fa9 --- /dev/null +++ b/src/services/common/AuthService/AuthService.ts @@ -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 { + 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); + } +} diff --git a/src/services/private-services/ContactsService/ContactsService.ts b/src/services/common/ContactsService/ContactsService.ts similarity index 100% rename from src/services/private-services/ContactsService/ContactsService.ts rename to src/services/common/ContactsService/ContactsService.ts diff --git a/src/services/private-services/CryptoService/CryptoService.ts b/src/services/common/CryptoService/CryptoService.ts similarity index 100% rename from src/services/private-services/CryptoService/CryptoService.ts rename to src/services/common/CryptoService/CryptoService.ts diff --git a/src/services/private-services/FilesService/FilesService.ts b/src/services/common/FilesService/FilesService.ts similarity index 100% rename from src/services/private-services/FilesService/FilesService.ts rename to src/services/common/FilesService/FilesService.ts diff --git a/src/services/private-services/IpfsService/IpfsService.ts b/src/services/common/IpfsService/IpfsService.ts similarity index 100% rename from src/services/private-services/IpfsService/IpfsService.ts rename to src/services/common/IpfsService/IpfsService.ts diff --git a/src/services/private-services/NotificationsService/NotificationsService.ts b/src/services/common/NotificationsService/NotificationsService.ts similarity index 100% rename from src/services/private-services/NotificationsService/NotificationsService.ts rename to src/services/common/NotificationsService/NotificationsService.ts diff --git a/src/services/private-services/AuthService/AuthService.ts b/src/services/private-services/AuthService/AuthService.ts deleted file mode 100644 index d8a0cf54..00000000 --- a/src/services/private-services/AuthService/AuthService.ts +++ /dev/null @@ -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 { - 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); - } -}