|
1 | 1 | import Joi from 'joi';
|
2 | 2 |
|
| 3 | +import { securityPreHandlers } from '../../../shared/application/security-pre-handlers.js'; |
| 4 | +import { LOCALE } from '../../../shared/domain/constants.js'; |
3 | 5 | import { identifiersType } from '../../../shared/domain/types/identifiers-type.js';
|
4 | 6 | import { certificationController } from './certification-controller.js';
|
5 | 7 |
|
| 8 | +const { FRENCH_SPOKEN, ENGLISH_SPOKEN } = LOCALE; |
| 9 | + |
6 | 10 | const register = async function (server) {
|
7 | 11 | server.route([
|
8 | 12 | {
|
@@ -54,6 +58,90 @@ const register = async function (server) {
|
54 | 58 | tags: ['api', 'certifications'],
|
55 | 59 | },
|
56 | 60 | },
|
| 61 | + { |
| 62 | + method: 'GET', |
| 63 | + path: '/api/admin/sessions/{sessionId}/attestations', |
| 64 | + config: { |
| 65 | + validate: { |
| 66 | + params: Joi.object({ |
| 67 | + sessionId: identifiersType.sessionId, |
| 68 | + }), |
| 69 | + }, |
| 70 | + pre: [ |
| 71 | + { |
| 72 | + method: (request, h) => |
| 73 | + securityPreHandlers.hasAtLeastOneAccessOf([ |
| 74 | + securityPreHandlers.checkAdminMemberHasRoleSuperAdmin, |
| 75 | + securityPreHandlers.checkAdminMemberHasRoleCertif, |
| 76 | + securityPreHandlers.checkAdminMemberHasRoleSupport, |
| 77 | + ])(request, h), |
| 78 | + assign: 'hasAuthorizationToAccessAdminScope', |
| 79 | + }, |
| 80 | + ], |
| 81 | + handler: certificationController.getCertificationPDFAttestationsForSession, |
| 82 | + plugins: { |
| 83 | + 'hapi-swagger': { |
| 84 | + produces: ['application/pdf'], |
| 85 | + }, |
| 86 | + }, |
| 87 | + notes: [ |
| 88 | + '- **Route accessible par un user Admin**\n' + |
| 89 | + "- Récupération des certifications d'une session au format PDF" + |
| 90 | + ' via un id de session et un user id', |
| 91 | + ], |
| 92 | + tags: ['api', 'certifications', 'PDF'], |
| 93 | + }, |
| 94 | + }, |
| 95 | + { |
| 96 | + method: 'GET', |
| 97 | + path: '/api/attestation/{certificationCourseId}', |
| 98 | + config: { |
| 99 | + validate: { |
| 100 | + params: Joi.object({ |
| 101 | + certificationCourseId: identifiersType.certificationCourseId, |
| 102 | + }), |
| 103 | + query: Joi.object({ |
| 104 | + isFrenchDomainExtension: Joi.boolean().required(), |
| 105 | + lang: Joi.string().valid(FRENCH_SPOKEN, ENGLISH_SPOKEN), |
| 106 | + }), |
| 107 | + }, |
| 108 | + handler: certificationController.getPDFAttestation, |
| 109 | + notes: [ |
| 110 | + '- **Route accessible par un user authentifié**\n' + |
| 111 | + '- Récupération des informations d’une certification au format PDF' + |
| 112 | + ' via un id de certification et un user id', |
| 113 | + ], |
| 114 | + tags: ['api', 'certifications', 'PDF'], |
| 115 | + }, |
| 116 | + }, |
| 117 | + { |
| 118 | + method: 'GET', |
| 119 | + path: '/api/organizations/{organizationId}/certification-attestations', |
| 120 | + config: { |
| 121 | + pre: [ |
| 122 | + { |
| 123 | + method: securityPreHandlers.checkUserIsAdminInSCOOrganizationManagingStudents, |
| 124 | + assign: 'belongsToOrganizationManagingStudents', |
| 125 | + }, |
| 126 | + ], |
| 127 | + validate: { |
| 128 | + params: Joi.object({ |
| 129 | + organizationId: identifiersType.organizationId, |
| 130 | + }), |
| 131 | + query: Joi.object({ |
| 132 | + division: Joi.string().required(), |
| 133 | + isFrenchDomainExtension: Joi.boolean().required(), |
| 134 | + lang: Joi.string().valid(FRENCH_SPOKEN, ENGLISH_SPOKEN), |
| 135 | + }), |
| 136 | + }, |
| 137 | + handler: certificationController.downloadCertificationAttestationsForDivision, |
| 138 | + tags: ['api', 'organizations'], |
| 139 | + notes: [ |
| 140 | + 'Cette route est restreinte aux utilisateurs authentifiés', |
| 141 | + "Elle retourne les certificats par classe liées à l'organisation sous forme de fichier PDF.", |
| 142 | + ], |
| 143 | + }, |
| 144 | + }, |
57 | 145 | ]);
|
58 | 146 | };
|
59 | 147 |
|
|
0 commit comments