@cerema/cadriciel 1.0.8 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/aaaa/.cadriciel/.uuid +1 -0
  2. package/aaaa/.cadriciel/bin/db-update.js +337 -0
  3. package/aaaa/.cadriciel/bin/gen/api/api.js +484 -0
  4. package/aaaa/.cadriciel/bin/gen/component/component.js +36 -0
  5. package/aaaa/.cadriciel/bin/gen/page/page.js +163 -0
  6. package/aaaa/.cadriciel/bin/gen/project/project.js +172 -0
  7. package/aaaa/.cadriciel/bin/gen/query/query.js +92 -0
  8. package/aaaa/.cadriciel/bin/gen/service/service.js +18 -0
  9. package/aaaa/.cadriciel/bin/gen.js +19 -0
  10. package/aaaa/.cadriciel/bin/lib/convert.js +94 -0
  11. package/aaaa/.cadriciel/bin/lib/global.js +140 -0
  12. package/aaaa/.cadriciel/bin/lib/templates.js +48 -0
  13. package/aaaa/.cadriciel/bin/lib/utils.js +76 -0
  14. package/aaaa/.cadriciel/bin/logs.js +34 -0
  15. package/aaaa/.cadriciel/bin/reset.js +45 -0
  16. package/aaaa/.cadriciel/bin/restart.js +30 -0
  17. package/aaaa/.cadriciel/bin/start.js +194 -0
  18. package/aaaa/.cadriciel/bin/stop.js +32 -0
  19. package/aaaa/.cadriciel/bin/templates/components/{{name}}.component.html +1 -0
  20. package/aaaa/.cadriciel/bin/templates/components/{{name}}.component.scss +0 -0
  21. package/aaaa/.cadriciel/bin/templates/components/{{name}}.component.ts +15 -0
  22. package/aaaa/.cadriciel/bin/templates/java/config.java +59 -0
  23. package/aaaa/.cadriciel/bin/templates/routing.module.ts +30 -0
  24. package/aaaa/.cadriciel/bin/templates/{{name}}.component.html +1 -0
  25. package/aaaa/.cadriciel/bin/templates/{{name}}.component.scss +0 -0
  26. package/aaaa/.cadriciel/bin/templates/{{name}}.component.ts +16 -0
  27. package/aaaa/.cadriciel/bin/templates/{{name}}.service.ts +20 -0
  28. package/aaaa/.cadriciel/routes/root.json +1 -0
  29. package/aaaa/.gitlab-ci.yml +65 -0
  30. package/aaaa/.project +1 -0
  31. package/aaaa/.vscode/settings.json +3 -0
  32. package/aaaa/angular.json +165 -0
  33. package/aaaa/api/aaaa-data/Readme.md +27 -0
  34. package/aaaa/api/aaaa-data/pom.xml +46 -0
  35. package/aaaa/api/aaaa-data/src/main/resources/db/dev/Readme.md +5 -0
  36. package/aaaa/api/aaaa-data/src/main/resources/db/dev/V2022.06.02.1513__dev-data.sql +7 -0
  37. package/aaaa/api/aaaa-data/src/main/resources/db/migration/Readme.md +38 -0
  38. package/aaaa/api/aaaa-data/src/main/resources/db/migration/V2021.10.14.0819__Init.sql +23 -0
  39. package/aaaa/api/aaaa-data/src/main/resources/flyway.properties +4 -0
  40. package/aaaa/api/aaaa-metier/pom.xml +134 -0
  41. package/aaaa/api/aaaa-metier/src/main/java/fr/cerema/dsi/aaaa/services/CustomUserDetailsService.java +12 -0
  42. package/aaaa/api/aaaa-metier/src/main/java/fr/cerema/dsi/aaaa/services/ProfilService.java +24 -0
  43. package/aaaa/api/aaaa-metier/src/main/java/fr/cerema/dsi/aaaa/services/UserService.java +36 -0
  44. package/aaaa/api/aaaa-metier/src/main/java/fr/cerema/dsi/aaaa/services/impl/CustomUserDetailsServiceImpl.java +79 -0
  45. package/aaaa/api/aaaa-metier/src/main/java/fr/cerema/dsi/aaaa/services/impl/ProfilServiceImpl.java +27 -0
  46. package/aaaa/api/aaaa-metier/src/main/java/fr/cerema/dsi/aaaa/services/impl/UserServiceImpl.java +75 -0
  47. package/aaaa/api/aaaa-metier/src/main/java/fr/cerema/dsi/commons/security/UserSecurityServiceUtil.java +30 -0
  48. package/aaaa/api/aaaa-metier/src/main/java/fr/cerema/dsi/commons/services/GenericService.java +30 -0
  49. package/aaaa/api/aaaa-metier/src/main/java/fr/cerema/dsi/commons/services/GenericServiceImpl.java +62 -0
  50. package/aaaa/api/aaaa-metier/src/test/java/fr/cerema/dsi/aaaa/services/UserServiceImplTest.java +60 -0
  51. package/aaaa/api/aaaa-persistance/pom.xml +72 -0
  52. package/aaaa/api/aaaa-persistance/src/main/java/fr/cerema/dsi/aaaa/repositories/ProfilRepository.java +18 -0
  53. package/aaaa/api/aaaa-persistance/src/main/java/fr/cerema/dsi/aaaa/repositories/UserRepository.java +28 -0
  54. package/aaaa/api/aaaa-persistance/src/main/java/fr/cerema/dsi/commons/repositories/AbstractDao.java +118 -0
  55. package/aaaa/api/aaaa-persistance/src/main/java/fr/cerema/dsi/commons/repositories/GenericRepository.java +101 -0
  56. package/aaaa/api/aaaa-persistance/src/main/java/fr/cerema/dsi/commons/repositories/IAbstractDao.java +66 -0
  57. package/aaaa/api/aaaa-presentation/Readme.md +98 -0
  58. package/aaaa/api/aaaa-presentation/pom.xml +385 -0
  59. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/aaaa/App.java +20 -0
  60. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/aaaa/config/AspectJConfiguration.java +58 -0
  61. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/aaaa/config/AuthenticationTokenFilter.java +134 -0
  62. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/aaaa/config/SecurityConfiguration.java +71 -0
  63. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/aaaa/config/StaticResourcesWebConfiguration.java +41 -0
  64. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/aaaa/config/WebConfiguration.java +59 -0
  65. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/aaaa/controllers/AccountController.java +59 -0
  66. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/aaaa/controllers/ApiOpenController.java +63 -0
  67. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/aaaa/controllers/UserController.java +63 -0
  68. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/aaaa/dto/GenericDTO.java +20 -0
  69. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/aaaa/dto/ProfilDTO.java +26 -0
  70. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/aaaa/dto/UserDTO.java +57 -0
  71. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/aaaa/dto/UserWithCurrentAuthorityDTO.java +31 -0
  72. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/aaaa/mapper/UserMapper.java +30 -0
  73. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/commons/beans/errors/ApiSubError.java +5 -0
  74. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/commons/beans/errors/ApiValidationSubError.java +13 -0
  75. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/commons/beans/errors/JsonApiError.java +308 -0
  76. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/commons/controllers/AbstractErrorHandler.java +67 -0
  77. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/commons/controllers/ClientForwardController.java +19 -0
  78. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/commons/controllers/CustomErrorController.java +57 -0
  79. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/commons/controllers/RestResponseEntityExceptionHandler.java +75 -0
  80. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/commons/security/auth/jwt/exceptions/InvalidTokenException.java +30 -0
  81. package/aaaa/api/aaaa-presentation/src/main/java/fr/cerema/dsi/commons/security/filters/AppCorsFilter.java +45 -0
  82. package/aaaa/api/aaaa-presentation/src/main/resources/META-INF/spring.factories +2 -0
  83. package/aaaa/api/aaaa-presentation/src/main/resources/banner.txt +3 -0
  84. package/aaaa/api/aaaa-presentation/src/main/resources/logback-spring-ci.xml +15 -0
  85. package/aaaa/api/aaaa-presentation/src/main/resources/logback-spring.xml +15 -0
  86. package/aaaa/api/aaaa-presentation/src/main/resources-filtered/application-ci.yml +59 -0
  87. package/aaaa/api/aaaa-presentation/src/main/resources-filtered/application-prod.yml +59 -0
  88. package/aaaa/api/aaaa-presentation/src/main/resources-filtered/application.yml +134 -0
  89. package/aaaa/api/aaaa-presentation/src/test/java/fr/cerema/dsi/aaaa/service/IntegrationTest.java +18 -0
  90. package/aaaa/api/aaaa-presentation/src/test/java/fr/cerema/dsi/aaaa/service/UserServiceImplIT.java +43 -0
  91. package/aaaa/api/aaaa-presentation/src/test/resources/application.yml +41 -0
  92. package/aaaa/api/aaaa-presentation/src/test/resources/db.migration/Readme.md +6 -0
  93. package/aaaa/api/aaaa-presentation/target/classes/META-INF/spring.factories +2 -0
  94. package/aaaa/api/aaaa-presentation/target/classes/application-ci.yml +59 -0
  95. package/aaaa/api/aaaa-presentation/target/classes/application-prod.yml +59 -0
  96. package/aaaa/api/aaaa-presentation/target/classes/application.yml +134 -0
  97. package/aaaa/api/aaaa-presentation/target/classes/banner.txt +3 -0
  98. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/App.class +0 -0
  99. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/config/AspectJConfiguration.class +0 -0
  100. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/config/AuthenticationTokenFilter.class +0 -0
  101. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/config/SecurityConfiguration.class +0 -0
  102. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/config/StaticResourcesWebConfiguration.class +0 -0
  103. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/config/WebConfiguration.class +0 -0
  104. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/controllers/AccountController.class +0 -0
  105. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/controllers/ApiOpenController.class +0 -0
  106. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/controllers/UserController.class +0 -0
  107. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/dto/GenericDTO.class +0 -0
  108. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/dto/ProfilDTO.class +0 -0
  109. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/dto/UserDTO.class +0 -0
  110. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/dto/UserWithCurrentAuthorityDTO.class +0 -0
  111. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/mapper/UserMapper.class +0 -0
  112. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/aaaa/mapper/UserMapperImpl.class +0 -0
  113. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/commons/beans/errors/ApiSubError.class +0 -0
  114. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/commons/beans/errors/ApiValidationSubError.class +0 -0
  115. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/commons/beans/errors/JsonApiError$ApiError.class +0 -0
  116. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/commons/beans/errors/JsonApiError.class +0 -0
  117. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/commons/controllers/AbstractErrorHandler.class +0 -0
  118. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/commons/controllers/ClientForwardController.class +0 -0
  119. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/commons/controllers/CustomErrorController.class +0 -0
  120. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/commons/controllers/RestResponseEntityExceptionHandler.class +0 -0
  121. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/commons/security/auth/jwt/exceptions/InvalidTokenException.class +0 -0
  122. package/aaaa/api/aaaa-presentation/target/classes/fr/cerema/dsi/commons/security/filters/AppCorsFilter.class +0 -0
  123. package/aaaa/api/aaaa-presentation/target/classes/logback-spring-ci.xml +15 -0
  124. package/aaaa/api/aaaa-presentation/target/classes/logback-spring.xml +15 -0
  125. package/aaaa/api/aaaa-presentation/target/generated-sources/annotations/fr/cerema/dsi/aaaa/mapper/UserMapperImpl.java +136 -0
  126. package/aaaa/api/aaaa-presentation/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +25 -0
  127. package/aaaa/api/aaaa-presentation/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +23 -0
  128. package/aaaa/api/aaaa-transverse/pom.xml +25 -0
  129. package/aaaa/api/aaaa-transverse/src/main/java/fr/cerema/dsi/aaaa/entities/Profil.java +53 -0
  130. package/aaaa/api/aaaa-transverse/src/main/java/fr/cerema/dsi/aaaa/entities/User.java +79 -0
  131. package/aaaa/api/aaaa-transverse/src/main/java/fr/cerema/dsi/aaaa/enums/Role.java +9 -0
  132. package/aaaa/api/aaaa-transverse/src/main/java/fr/cerema/dsi/aaaa/exceptions/JwtConfMalformedException.java +9 -0
  133. package/aaaa/api/aaaa-transverse/src/main/java/fr/cerema/dsi/aaaa/exceptions/security/AuthenticationServiceException.java +30 -0
  134. package/aaaa/api/aaaa-transverse/src/main/java/fr/cerema/dsi/aaaa/exceptions/security/NoRoleForUserServiceException.java +29 -0
  135. package/aaaa/api/aaaa-transverse/src/main/java/fr/cerema/dsi/aaaa/exceptions/security/UserNotFoundServiceException.java +29 -0
  136. package/aaaa/api/aaaa-transverse/src/main/java/fr/cerema/dsi/commons/entities/GenericEntity.java +43 -0
  137. package/aaaa/api/aaaa-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/BadRequestException.java +43 -0
  138. package/aaaa/api/aaaa-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/EntityNotFoundException.java +9 -0
  139. package/aaaa/api/aaaa-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/GenericRepositoryException.java +29 -0
  140. package/aaaa/api/aaaa-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/GenericServiceException.java +29 -0
  141. package/aaaa/api/aaaa-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/UserNotFoundException.java +11 -0
  142. package/aaaa/api/aaaa-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/UtilsException.java +13 -0
  143. package/aaaa/api/pom.xml +156 -0
  144. package/aaaa/client/app/components/.gitkeep +0 -0
  145. package/aaaa/client/app/interfaces/.gitkeep +0 -0
  146. package/aaaa/client/app/interfaces/dbschema.ts +171 -0
  147. package/aaaa/client/app/menu.json +41 -0
  148. package/aaaa/client/app/pages/pages-routing.module.ts +19 -0
  149. package/aaaa/client/app/pages/profils/profils.component.html +4 -0
  150. package/aaaa/client/app/pages/profils/profils.component.scss +0 -0
  151. package/aaaa/client/app/pages/profils/profils.component.ts +21 -0
  152. package/aaaa/client/app/pages/root/root.component.html +2 -0
  153. package/aaaa/client/app/pages/root/root.component.scss +24 -0
  154. package/aaaa/client/app/pages/root/root.component.ts +29 -0
  155. package/aaaa/client/app/services/demo.service.ts +21 -0
  156. package/aaaa/client/app/services/profils.service.ts +25 -0
  157. package/aaaa/client/app/services/test.service.ts +20 -0
  158. package/aaaa/client/app-routing.module.ts +50 -0
  159. package/aaaa/client/app.component.css +46 -0
  160. package/aaaa/client/app.component.html +1 -0
  161. package/aaaa/client/app.component.ts +62 -0
  162. package/aaaa/client/app.module.ts +99 -0
  163. package/aaaa/client/assets/favicon.ico +0 -0
  164. package/aaaa/client/assets/i18n/fr.json +33 -0
  165. package/aaaa/client/assets/images/dollar.svg +1 -0
  166. package/aaaa/client/assets/images/logo.png +0 -0
  167. package/aaaa/client/assets/images/logo_title.png +0 -0
  168. package/aaaa/client/assets/images/work-in-progress.svg +64 -0
  169. package/aaaa/client/assets/layout/fonts/lato-v17-latin-ext_latin-300.woff +0 -0
  170. package/aaaa/client/assets/layout/fonts/lato-v17-latin-ext_latin-300.woff2 +0 -0
  171. package/aaaa/client/assets/layout/fonts/lato-v17-latin-ext_latin-700.woff +0 -0
  172. package/aaaa/client/assets/layout/fonts/lato-v17-latin-ext_latin-700.woff2 +0 -0
  173. package/aaaa/client/assets/layout/fonts/lato-v17-latin-ext_latin-regular.woff +0 -0
  174. package/aaaa/client/assets/layout/fonts/lato-v17-latin-ext_latin-regular.woff2 +0 -0
  175. package/aaaa/client/assets/layout/images/LogoCerema.svg +226 -0
  176. package/aaaa/client/assets/layout/images/LogoCerema_horizontal.svg +167 -0
  177. package/aaaa/client/assets/layout/images/SpinnerCerema.svg +6 -0
  178. package/aaaa/client/assets/layout/images/authentication.svg +1 -0
  179. package/aaaa/client/assets/layout/images/mail.svg +1 -0
  180. package/aaaa/client/assets/layout/images/postgresql.svg +1 -0
  181. package/aaaa/client/assets/layout/images/user.png +0 -0
  182. package/aaaa/client/assets/layout/styles/layout/_breadcrumb.scss +18 -0
  183. package/aaaa/client/assets/layout/styles/layout/_config.scss +33 -0
  184. package/aaaa/client/assets/layout/styles/layout/_content.scss +20 -0
  185. package/aaaa/client/assets/layout/styles/layout/_fonts.scss +29 -0
  186. package/aaaa/client/assets/layout/styles/layout/_footer.scss +25 -0
  187. package/aaaa/client/assets/layout/styles/layout/_main.scss +29 -0
  188. package/aaaa/client/assets/layout/styles/layout/_responsive.scss +159 -0
  189. package/aaaa/client/assets/layout/styles/layout/_sidebar.scss +2 -0
  190. package/aaaa/client/assets/layout/styles/layout/_topbar.scss +250 -0
  191. package/aaaa/client/assets/layout/styles/layout/_typography.scss +63 -0
  192. package/aaaa/client/assets/layout/styles/layout/_utils.scss +19 -0
  193. package/aaaa/client/assets/layout/styles/layout/layout.scss +15 -0
  194. package/aaaa/client/assets/layout/styles/layout/preloading.css +73 -0
  195. package/aaaa/client/assets/layout/styles/layout/preloading.scss +79 -0
  196. package/aaaa/client/assets/layout/styles/layout/sidebar/_sidebar_slim.scss +131 -0
  197. package/aaaa/client/assets/layout/styles/layout/sidebar/_sidebar_vertical.scss +132 -0
  198. package/aaaa/client/assets/layout/styles/layout/theme/_dark.scss +10 -0
  199. package/aaaa/client/assets/layout/styles/layout/theme/_light.scss +10 -0
  200. package/aaaa/client/assets/layout/styles/layout/theme/_primary.scss +10 -0
  201. package/aaaa/client/assets/layout/styles/layout/theme/_themes.scss +3 -0
  202. package/aaaa/client/assets/layout/styles/theme/designer/_colors.scss +17 -0
  203. package/aaaa/client/assets/layout/styles/theme/designer/_common.scss +68 -0
  204. package/aaaa/client/assets/layout/styles/theme/designer/_components.scss +102 -0
  205. package/aaaa/client/assets/layout/styles/theme/designer/_mixins.scss +203 -0
  206. package/aaaa/client/assets/layout/styles/theme/designer/components/button/_button.scss +560 -0
  207. package/aaaa/client/assets/layout/styles/theme/designer/components/button/_speeddial.scss +81 -0
  208. package/aaaa/client/assets/layout/styles/theme/designer/components/button/_splitbutton.scss +381 -0
  209. package/aaaa/client/assets/layout/styles/theme/designer/components/data/_carousel.scss +37 -0
  210. package/aaaa/client/assets/layout/styles/theme/designer/components/data/_datatable.scss +278 -0
  211. package/aaaa/client/assets/layout/styles/theme/designer/components/data/_dataview.scss +55 -0
  212. package/aaaa/client/assets/layout/styles/theme/designer/components/data/_filter.scss +138 -0
  213. package/aaaa/client/assets/layout/styles/theme/designer/components/data/_fullcalendar.scss +329 -0
  214. package/aaaa/client/assets/layout/styles/theme/designer/components/data/_orderlist.scss +103 -0
  215. package/aaaa/client/assets/layout/styles/theme/designer/components/data/_organizationchart.scss +50 -0
  216. package/aaaa/client/assets/layout/styles/theme/designer/components/data/_paginator.scss +92 -0
  217. package/aaaa/client/assets/layout/styles/theme/designer/components/data/_picklist.scss +103 -0
  218. package/aaaa/client/assets/layout/styles/theme/designer/components/data/_timeline.scss +38 -0
  219. package/aaaa/client/assets/layout/styles/theme/designer/components/data/_tree.scss +144 -0
  220. package/aaaa/client/assets/layout/styles/theme/designer/components/data/_treetable.scss +246 -0
  221. package/aaaa/client/assets/layout/styles/theme/designer/components/data/_virtualscroller.scss +28 -0
  222. package/aaaa/client/assets/layout/styles/theme/designer/components/file/_fileupload.scss +58 -0
  223. package/aaaa/client/assets/layout/styles/theme/designer/components/menu/_breadcrumb.scss +42 -0
  224. package/aaaa/client/assets/layout/styles/theme/designer/components/menu/_contextmenu.scss +56 -0
  225. package/aaaa/client/assets/layout/styles/theme/designer/components/menu/_dock.scss +86 -0
  226. package/aaaa/client/assets/layout/styles/theme/designer/components/menu/_megamenu.scss +106 -0
  227. package/aaaa/client/assets/layout/styles/theme/designer/components/menu/_menu.scss +45 -0
  228. package/aaaa/client/assets/layout/styles/theme/designer/components/menu/_menubar.scss +183 -0
  229. package/aaaa/client/assets/layout/styles/theme/designer/components/menu/_panelmenu.scss +140 -0
  230. package/aaaa/client/assets/layout/styles/theme/designer/components/menu/_slidemenu.scss +59 -0
  231. package/aaaa/client/assets/layout/styles/theme/designer/components/menu/_steps.scss +56 -0
  232. package/aaaa/client/assets/layout/styles/theme/designer/components/menu/_tabmenu.scss +69 -0
  233. package/aaaa/client/assets/layout/styles/theme/designer/components/menu/_tieredmenu.scss +60 -0
  234. package/aaaa/client/assets/layout/styles/theme/designer/components/messages/_inlinemessage.scss +64 -0
  235. package/aaaa/client/assets/layout/styles/theme/designer/components/messages/_message.scss +102 -0
  236. package/aaaa/client/assets/layout/styles/theme/designer/components/messages/_toast.scss +95 -0
  237. package/aaaa/client/assets/layout/styles/theme/designer/components/misc/_avatar.scss +30 -0
  238. package/aaaa/client/assets/layout/styles/theme/designer/components/misc/_badge.scss +48 -0
  239. package/aaaa/client/assets/layout/styles/theme/designer/components/misc/_blockui.scss +0 -0
  240. package/aaaa/client/assets/layout/styles/theme/designer/components/misc/_chip.scss +38 -0
  241. package/aaaa/client/assets/layout/styles/theme/designer/components/misc/_inplace.scss +17 -0
  242. package/aaaa/client/assets/layout/styles/theme/designer/components/misc/_progressbar.scss +17 -0
  243. package/aaaa/client/assets/layout/styles/theme/designer/components/misc/_scrolltop.scss +20 -0
  244. package/aaaa/client/assets/layout/styles/theme/designer/components/misc/_skeleton.scss +8 -0
  245. package/aaaa/client/assets/layout/styles/theme/designer/components/misc/_tag.scss +35 -0
  246. package/aaaa/client/assets/layout/styles/theme/designer/components/misc/_terminal.scss +11 -0
  247. package/aaaa/client/assets/layout/styles/theme/designer/components/multimedia/_galleria.scss +139 -0
  248. package/aaaa/client/assets/layout/styles/theme/designer/components/multimedia/_image.scss +44 -0
  249. package/aaaa/client/assets/layout/styles/theme/designer/components/overlay/_confirmpopup.scss +65 -0
  250. package/aaaa/client/assets/layout/styles/theme/designer/components/overlay/_dialog.scss +64 -0
  251. package/aaaa/client/assets/layout/styles/theme/designer/components/overlay/_overlaypanel.scss +62 -0
  252. package/aaaa/client/assets/layout/styles/theme/designer/components/overlay/_sidebar.scss +23 -0
  253. package/aaaa/client/assets/layout/styles/theme/designer/components/overlay/_tooltip.scss +33 -0
  254. package/aaaa/client/assets/layout/styles/theme/designer/components/panel/_accordion.scss +119 -0
  255. package/aaaa/client/assets/layout/styles/theme/designer/components/panel/_card.scss +30 -0
  256. package/aaaa/client/assets/layout/styles/theme/designer/components/panel/_divider.scss +31 -0
  257. package/aaaa/client/assets/layout/styles/theme/designer/components/panel/_fieldset.scss +47 -0
  258. package/aaaa/client/assets/layout/styles/theme/designer/components/panel/_panel.scss +58 -0
  259. package/aaaa/client/assets/layout/styles/theme/designer/components/panel/_scrollpanel.scss +6 -0
  260. package/aaaa/client/assets/layout/styles/theme/designer/components/panel/_splitter.scss +19 -0
  261. package/aaaa/client/assets/layout/styles/theme/designer/components/panel/_tabview.scss +78 -0
  262. package/aaaa/client/assets/layout/styles/theme/designer/components/panel/_toolbar.scss +10 -0
  263. package/aaaa/client/assets/layout/styles/theme/theme-dark/_extensions.scss +90 -0
  264. package/aaaa/client/assets/layout/styles/theme/theme-dark/_variables.scss +867 -0
  265. package/aaaa/client/assets/layout/styles/theme/theme-dark/blue/theme.css +7341 -0
  266. package/aaaa/client/assets/layout/styles/theme/theme-dark/blue/theme.scss +12 -0
  267. package/aaaa/client/assets/layout/styles/theme/theme-dark/cyan/theme.css +7341 -0
  268. package/aaaa/client/assets/layout/styles/theme/theme-dark/cyan/theme.scss +12 -0
  269. package/aaaa/client/assets/layout/styles/theme/theme-dark/deeppurple/theme.css +7341 -0
  270. package/aaaa/client/assets/layout/styles/theme/theme-dark/deeppurple/theme.scss +12 -0
  271. package/aaaa/client/assets/layout/styles/theme/theme-dark/green/theme.css +7341 -0
  272. package/aaaa/client/assets/layout/styles/theme/theme-dark/green/theme.scss +12 -0
  273. package/aaaa/client/assets/layout/styles/theme/theme-dark/indigo/theme.css +7341 -0
  274. package/aaaa/client/assets/layout/styles/theme/theme-dark/indigo/theme.scss +12 -0
  275. package/aaaa/client/assets/layout/styles/theme/theme-dark/lime/theme.css +7341 -0
  276. package/aaaa/client/assets/layout/styles/theme/theme-dark/lime/theme.scss +12 -0
  277. package/aaaa/client/assets/layout/styles/theme/theme-dark/orange/theme.css +7341 -0
  278. package/aaaa/client/assets/layout/styles/theme/theme-dark/orange/theme.scss +12 -0
  279. package/aaaa/client/assets/layout/styles/theme/theme-dark/pink/theme.css +7341 -0
  280. package/aaaa/client/assets/layout/styles/theme/theme-dark/pink/theme.scss +12 -0
  281. package/aaaa/client/assets/layout/styles/theme/theme-dark/purple/theme.css +7341 -0
  282. package/aaaa/client/assets/layout/styles/theme/theme-dark/purple/theme.scss +12 -0
  283. package/aaaa/client/assets/layout/styles/theme/theme-dark/yellow/theme.css +7341 -0
  284. package/aaaa/client/assets/layout/styles/theme/theme-dark/yellow/theme.scss +12 -0
  285. package/aaaa/client/assets/layout/styles/theme/theme-light/_extensions.scss +90 -0
  286. package/aaaa/client/assets/layout/styles/theme/theme-light/_variables.scss +870 -0
  287. package/aaaa/client/assets/layout/styles/theme/theme-light/blue/theme.css +7540 -0
  288. package/aaaa/client/assets/layout/styles/theme/theme-light/blue/theme.scss +12 -0
  289. package/aaaa/client/assets/layout/styles/theme/theme-light/cyan/theme.css +7341 -0
  290. package/aaaa/client/assets/layout/styles/theme/theme-light/cyan/theme.scss +12 -0
  291. package/aaaa/client/assets/layout/styles/theme/theme-light/deeppurple/theme.css +7341 -0
  292. package/aaaa/client/assets/layout/styles/theme/theme-light/deeppurple/theme.scss +12 -0
  293. package/aaaa/client/assets/layout/styles/theme/theme-light/green/theme.css +7341 -0
  294. package/aaaa/client/assets/layout/styles/theme/theme-light/green/theme.scss +12 -0
  295. package/aaaa/client/assets/layout/styles/theme/theme-light/indigo/theme.css +7341 -0
  296. package/aaaa/client/assets/layout/styles/theme/theme-light/indigo/theme.scss +12 -0
  297. package/aaaa/client/assets/layout/styles/theme/theme-light/lime/theme.css +7341 -0
  298. package/aaaa/client/assets/layout/styles/theme/theme-light/lime/theme.scss +12 -0
  299. package/aaaa/client/assets/layout/styles/theme/theme-light/orange/theme.css +7341 -0
  300. package/aaaa/client/assets/layout/styles/theme/theme-light/orange/theme.scss +12 -0
  301. package/aaaa/client/assets/layout/styles/theme/theme-light/pink/theme.css +7341 -0
  302. package/aaaa/client/assets/layout/styles/theme/theme-light/pink/theme.scss +12 -0
  303. package/aaaa/client/assets/layout/styles/theme/theme-light/purple/theme.css +7341 -0
  304. package/aaaa/client/assets/layout/styles/theme/theme-light/purple/theme.scss +12 -0
  305. package/aaaa/client/assets/layout/styles/theme/theme-light/yellow/theme.css +7341 -0
  306. package/aaaa/client/assets/layout/styles/theme/theme-light/yellow/theme.scss +12 -0
  307. package/aaaa/client/environments/environment.ts +9 -0
  308. package/aaaa/client/index.dev.html +33 -0
  309. package/aaaa/client/index.prod.html +33 -0
  310. package/aaaa/client/layout/api/menuchangeevent.ts +4 -0
  311. package/aaaa/client/layout/api/tabcloseevent.ts +6 -0
  312. package/aaaa/client/layout/app.breadcrumb.component.html +14 -0
  313. package/aaaa/client/layout/app.breadcrumb.component.ts +48 -0
  314. package/aaaa/client/layout/app.footer.component.html +20 -0
  315. package/aaaa/client/layout/app.footer.component.ts +23 -0
  316. package/aaaa/client/layout/app.menu.component.html +3 -0
  317. package/aaaa/client/layout/app.menu.service.ts +23 -0
  318. package/aaaa/client/layout/app.menuitem.component.ts +310 -0
  319. package/aaaa/client/layout/app.sidebar.component.html +5 -0
  320. package/aaaa/client/layout/app.sidebar.component.ts +13 -0
  321. package/aaaa/client/layout/app.topbar.component.html +72 -0
  322. package/aaaa/client/layout/app.topbar.component.ts +67 -0
  323. package/aaaa/client/layout/common/err-403/err-403.component.html +24 -0
  324. package/aaaa/client/layout/common/err-403/err-403.component.scss +340 -0
  325. package/aaaa/client/layout/common/err-403/err-403.ts +19 -0
  326. package/aaaa/client/layout/common/work-in-progress/work-in-progress.component.html +1 -0
  327. package/aaaa/client/layout/common/work-in-progress/work-in-progress.component.scss +8 -0
  328. package/aaaa/client/layout/common/work-in-progress/work-in-progress.component.ts +14 -0
  329. package/aaaa/client/layout/config/app.config.component.html +86 -0
  330. package/aaaa/client/layout/config/app.config.component.scss +0 -0
  331. package/aaaa/client/layout/config/app.config.component.ts +241 -0
  332. package/aaaa/client/layout/config/config.module.ts +27 -0
  333. package/aaaa/client/layout/main/main.component.html +15 -0
  334. package/aaaa/client/layout/main/main.component.spec.ts +34 -0
  335. package/aaaa/client/layout/main/main.component.ts +186 -0
  336. package/aaaa/client/layout/main.module.ts +45 -0
  337. package/aaaa/client/layout/service/app.layout.service.ts +124 -0
  338. package/aaaa/client/layout/shared/components/app.menu.component.ts +69 -0
  339. package/aaaa/client/layout/shared/components/auth/accessdenied/accessdenied-routing.module.ts +12 -0
  340. package/aaaa/client/layout/shared/components/auth/accessdenied/accessdenied.component.html +11 -0
  341. package/aaaa/client/layout/shared/components/auth/accessdenied/accessdenied.component.ts +7 -0
  342. package/aaaa/client/layout/shared/components/auth/accessdenied/accessdenied.module.ts +17 -0
  343. package/aaaa/client/layout/shared/components/auth/auth-routing.module.ts +14 -0
  344. package/aaaa/client/layout/shared/components/auth/auth.module.ts +13 -0
  345. package/aaaa/client/layout/shared/components/auth/error/error-routing.module.ts +12 -0
  346. package/aaaa/client/layout/shared/components/auth/error/error.component.html +10 -0
  347. package/aaaa/client/layout/shared/components/auth/error/error.component.ts +7 -0
  348. package/aaaa/client/layout/shared/components/auth/error/error.module.ts +12 -0
  349. package/aaaa/client/layout/shared/components/auth/login/login-routing.module.ts +12 -0
  350. package/aaaa/client/layout/shared/components/auth/login/login.component.html +15 -0
  351. package/aaaa/client/layout/shared/components/auth/login/login.component.ts +47 -0
  352. package/aaaa/client/layout/shared/components/auth/login/login.module.ts +21 -0
  353. package/aaaa/client/layout/shared/components/auth/logout/logout/logout.component.html +8 -0
  354. package/aaaa/client/layout/shared/components/auth/logout/logout/logout.component.scss +21 -0
  355. package/aaaa/client/layout/shared/components/auth/logout/logout/logout.component.ts +15 -0
  356. package/aaaa/client/layout/shared/components/auth/logout/logout.module.ts +26 -0
  357. package/aaaa/client/layout/shared/components/code/code.component.ts +17 -0
  358. package/aaaa/client/layout/shared/components/indic/indic.component.html +8 -0
  359. package/aaaa/client/layout/shared/components/indic/indic.component.scss +0 -0
  360. package/aaaa/client/layout/shared/components/indic/indic.component.ts +60 -0
  361. package/aaaa/client/layout/shared/components/lookup-input/lookup-input.component.html +70 -0
  362. package/aaaa/client/layout/shared/components/lookup-input/lookup-input.component.scss +0 -0
  363. package/aaaa/client/layout/shared/components/lookup-input/lookup-input.component.ts +121 -0
  364. package/aaaa/client/layout/shared/components/notfound/notfound-routing.module.ts +12 -0
  365. package/aaaa/client/layout/shared/components/notfound/notfound.component.html +42 -0
  366. package/aaaa/client/layout/shared/components/notfound/notfound.component.ts +7 -0
  367. package/aaaa/client/layout/shared/components/notfound/notfound.module.ts +12 -0
  368. package/aaaa/client/layout/shared/constants/dateFormat.constants.ts +1 -0
  369. package/aaaa/client/layout/shared/constants/mocks/user-mocks.constants.ts +36 -0
  370. package/aaaa/client/layout/shared/constants/pagination.constants.ts +1 -0
  371. package/aaaa/client/layout/shared/core/config/application-config.service.ts +34 -0
  372. package/aaaa/client/layout/shared/core/config/db-config.service.ts +20 -0
  373. package/aaaa/client/layout/shared/core/guard/can-modify.guard.ts +51 -0
  374. package/aaaa/client/layout/shared/core/guard/login.guard.ts +24 -0
  375. package/aaaa/client/layout/shared/core/guard/ui.guard.ts +94 -0
  376. package/aaaa/client/layout/shared/core/interceptor/handle-req.interceptor.ts +31 -0
  377. package/aaaa/client/layout/shared/core/interceptor/index.ts +10 -0
  378. package/aaaa/client/layout/shared/core/request/pageable.model.ts +5 -0
  379. package/aaaa/client/layout/shared/core/request/request-util.ts +21 -0
  380. package/aaaa/client/layout/shared/core/resolver/accueil.resolver.ts +19 -0
  381. package/aaaa/client/layout/shared/core/storage/MyLocalStorageService.ts +22 -0
  382. package/aaaa/client/layout/shared/core/storage/MyStorageService.ts +17 -0
  383. package/aaaa/client/layout/shared/dev/dev-dashboard/dev-dashboard.component.html +26 -0
  384. package/aaaa/client/layout/shared/dev/dev-dashboard/dev-dashboard.component.scss +68 -0
  385. package/aaaa/client/layout/shared/dev/dev-dashboard/dev-dashboard.component.ts +24 -0
  386. package/aaaa/client/layout/shared/dev/dev-routing.module.ts +19 -0
  387. package/aaaa/client/layout/shared/dev/dev.module.ts +76 -0
  388. package/aaaa/client/layout/shared/entities/claims.model.ts +9 -0
  389. package/aaaa/client/layout/shared/entities/user.model.ts +9 -0
  390. package/aaaa/client/layout/shared/i18n/fr.json +74 -0
  391. package/aaaa/client/layout/shared/service/dev.service.ts +21 -0
  392. package/aaaa/client/layout/shared/service/policy.service.ts +22 -0
  393. package/aaaa/client/layout/shared/service/user.service.ts +71 -0
  394. package/aaaa/client/layout/shared/shared.module.ts +11 -0
  395. package/aaaa/client/layout/shared/utils/globals.ts +85 -0
  396. package/aaaa/client/layout/shared/utils/misc.ts +31 -0
  397. package/aaaa/client/main-routing.module.ts +47 -0
  398. package/aaaa/client/main.ts +13 -0
  399. package/aaaa/client/pages.module.ts +76 -0
  400. package/aaaa/client/polyfills.ts +64 -0
  401. package/aaaa/client/styles.scss +45 -0
  402. package/aaaa/client/themes.scss +84 -0
  403. package/aaaa/cypress/fixtures/example.json +5 -0
  404. package/aaaa/cypress/support/commands.ts +37 -0
  405. package/aaaa/cypress/support/component-index.html +12 -0
  406. package/aaaa/cypress/support/component.ts +39 -0
  407. package/aaaa/cypress.config.ts +11 -0
  408. package/aaaa/logo.png +0 -0
  409. package/aaaa/package.json +84 -0
  410. package/aaaa/policies/ui.policy.json +4 -0
  411. package/aaaa/pom.xml +59 -0
  412. package/aaaa/run.sh +7 -0
  413. package/aaaa/tsconfig.app.json +9 -0
  414. package/aaaa/tsconfig.json +39 -0
  415. package/aaaa/tsconfig.spec.json +9 -0
  416. package/aaaa/yarn.lock +8987 -0
  417. package/cmd/init.js +2 -1
  418. package/cmd/login.js +1 -1
  419. package/cmd/update.js +1 -1
  420. package/lib/s3.js +2 -8
  421. package/package.json +1 -1
@@ -0,0 +1,134 @@
1
+ package fr.cerema.dsi.aaaa.config;
2
+
3
+ import fr.cerema.dsi.commons.security.auth.jwt.exceptions.InvalidTokenException;
4
+ import fr.cerema.dsi.aaaa.services.CustomUserDetailsService;
5
+ import io.jsonwebtoken.Claims;
6
+ import io.jsonwebtoken.Header;
7
+ import io.jsonwebtoken.Jwt;
8
+ import io.jsonwebtoken.Jwts;
9
+ import jakarta.servlet.FilterChain;
10
+ import jakarta.servlet.ServletException;
11
+ import jakarta.servlet.http.HttpServletRequest;
12
+ import jakarta.servlet.http.HttpServletResponse;
13
+ import org.apache.commons.lang3.StringUtils;
14
+ import org.slf4j.Logger;
15
+ import org.slf4j.LoggerFactory;
16
+ import org.springframework.beans.factory.annotation.Autowired;
17
+ import org.springframework.beans.factory.annotation.Value;
18
+ import org.springframework.lang.NonNull;
19
+ import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
20
+ import org.springframework.security.core.context.SecurityContextHolder;
21
+ import org.springframework.security.core.userdetails.UserDetails;
22
+ import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
23
+ import org.springframework.stereotype.Component;
24
+ import org.springframework.web.filter.OncePerRequestFilter;
25
+ import org.springframework.core.env.Environment;
26
+
27
+ import java.io.IOException;
28
+
29
+ @Component
30
+ public class AuthenticationTokenFilter extends OncePerRequestFilter {
31
+ @Autowired
32
+ private Environment env;
33
+
34
+ // Nommé différemment de "logger" car celui-ci existe déjà dans le GenericBeanFilter (JCL)
35
+ private static final Logger slfLogger = LoggerFactory.getLogger(AuthenticationTokenFilter.class);
36
+
37
+ private static final String JWT_EMAIL = "email";
38
+ private static final String JWT_ORIONID = "sub";
39
+ private static final String JWT_BEARER = "Bearer";
40
+ public static final String AUTHORIZATION_HEADER = "Authorization";
41
+
42
+ private static final String JWT_TYPE = "typ";
43
+
44
+ @Value("${info.app.issuer}")
45
+ private String urlSSO;
46
+
47
+ @Value("${info.app.audience}")
48
+ private String tokenAudience;
49
+
50
+
51
+ private final CustomUserDetailsService userDetailsService;
52
+
53
+ public AuthenticationTokenFilter(CustomUserDetailsService userDetailsService) {
54
+ this.userDetailsService = userDetailsService;
55
+ }
56
+
57
+
58
+ @Override
59
+ protected void doFilterInternal(HttpServletRequest request, @NonNull HttpServletResponse response,
60
+ @NonNull FilterChain filterChain) throws ServletException, IOException {
61
+ final String requestTokenHeader = request.getHeader(AUTHORIZATION_HEADER);
62
+ if (requestTokenHeader != null && !StringUtils.isEmpty(requestTokenHeader)) {
63
+ String jwtToken = this.resolveToken(requestTokenHeader);
64
+ if (jwtToken != null) {
65
+ String[] splitToken = jwtToken.split("\\.");
66
+ String unsignedToken = splitToken[0] + "." + splitToken[1] + ".";
67
+ Jwt<Header, Claims> jwsClaims = Jwts.parserBuilder().build().parseClaimsJwt(unsignedToken);
68
+ String username = (String) jwsClaims.getBody().get(JWT_EMAIL);
69
+ String orionId = (String) jwsClaims.getBody().get(JWT_ORIONID);
70
+
71
+ if (orionId != null && username != null) {
72
+ UserDetails userDetails = this.userDetailsService.loadAndMajInfoUser(orionId, username);
73
+ this.isValidToken(jwsClaims);
74
+ UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken =
75
+ new UsernamePasswordAuthenticationToken(
76
+ userDetails, null, userDetails.getAuthorities());
77
+ usernamePasswordAuthenticationToken
78
+ .setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
79
+ SecurityContextHolder.getContext()
80
+ .setAuthentication(usernamePasswordAuthenticationToken);
81
+ }
82
+ }
83
+ }
84
+
85
+ filterChain.doFilter(request, response);
86
+ }
87
+
88
+ private String resolveToken(String requestTokenHeader) {
89
+ if (requestTokenHeader.startsWith(JWT_BEARER)) {
90
+ return requestTokenHeader.substring(7);
91
+ }
92
+ return null;
93
+ }
94
+
95
+
96
+ private void isValidToken(Jwt<Header, Claims> jwtToken) {
97
+ /*String devMode = env.getProperty("CADRICIEL_DEV");
98
+ this.checkType(jwtToken.getBody());
99
+ if (devMode == null || !devMode.equalsIgnoreCase("true")) {
100
+ this.checkIssuer(jwtToken.getBody());
101
+ this.checkAudience(jwtToken.getBody());
102
+ }*/
103
+ }
104
+
105
+ private void checkType(Claims jwsClaims) {
106
+ String type = jwsClaims.get(JWT_TYPE, String.class);
107
+
108
+ if (!StringUtils.equalsIgnoreCase(type, JWT_BEARER)) {
109
+ slfLogger.warn("Type non conforme, type: {}, attendu: {}", type, JWT_BEARER);
110
+ throw new InvalidTokenException("Le jeton d'authentification n'est pas du bon type.");
111
+ }
112
+ }
113
+
114
+ private void checkIssuer(Claims jwsClaims) {
115
+ String issuer = jwsClaims.getIssuer();
116
+
117
+ if (!StringUtils.equalsIgnoreCase(issuer, urlSSO)) {
118
+ slfLogger.warn("Issuer non conforme, issuer: {}, attendu: {}", issuer, urlSSO);
119
+ throw new InvalidTokenException(
120
+ "Le jeton d'authentification ne provient pas de la bonne source.");
121
+ }
122
+ }
123
+
124
+ private void checkAudience(Claims jwsClaims) {
125
+ String audience = jwsClaims.getAudience();
126
+
127
+ if (!StringUtils.containsAnyIgnoreCase(audience, tokenAudience)) {
128
+ slfLogger.warn(
129
+ "Audience non conforme, attendue: {}, fournie: {}", tokenAudience, audience);
130
+ throw new InvalidTokenException("Le jeton d'authentification ne nous est pas destiné.");
131
+ }
132
+ }
133
+
134
+ }
@@ -0,0 +1,71 @@
1
+ package fr.cerema.dsi.aaaa.config;
2
+
3
+ import fr.cerema.dsi.commons.security.filters.AppCorsFilter;
4
+ import fr.cerema.dsi.aaaa.services.CustomUserDetailsService;
5
+ import org.springframework.beans.factory.annotation.Autowired;
6
+ import org.springframework.context.annotation.Bean;
7
+ import org.springframework.context.annotation.Configuration;
8
+ import org.springframework.http.HttpMethod;
9
+ import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
10
+ import org.springframework.security.config.annotation.web.builders.HttpSecurity;
11
+ import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
12
+ import org.springframework.security.config.http.SessionCreationPolicy;
13
+ import org.springframework.security.web.SecurityFilterChain;
14
+ import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
15
+ import org.springframework.web.cors.CorsConfiguration;
16
+ import org.springframework.web.cors.CorsConfigurationSource;
17
+ import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
18
+
19
+ import java.util.Arrays;
20
+ import java.util.List;
21
+
22
+ @Configuration
23
+ @EnableWebSecurity
24
+ public class SecurityConfiguration {
25
+
26
+ @Autowired
27
+ private CustomUserDetailsService userDetailsService;
28
+
29
+ @Autowired
30
+ private AuthenticationTokenFilter authenticationTokenFilter;
31
+
32
+
33
+ @Bean
34
+ private static CorsConfigurationSource configurationSource() {
35
+ CorsConfiguration config = new CorsConfiguration();
36
+ config.setAllowedOriginPatterns(List.of("*"));
37
+ config.setAllowCredentials(true);
38
+ //config.addAllowedOriginPattern("*");
39
+ config.setAllowedHeaders(List.of("*"));
40
+ config.setMaxAge(36000L);
41
+ config.setAllowedMethods(Arrays.asList("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS"));
42
+ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
43
+ source.registerCorsConfiguration("/**", config);
44
+ return source;
45
+ }
46
+
47
+ @Bean
48
+ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
49
+ http.cors().configurationSource(configurationSource())
50
+ .and()
51
+ .csrf().disable()
52
+ .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
53
+ .and()
54
+ .anonymous()
55
+ .and()
56
+ .authorizeHttpRequests()
57
+ .requestMatchers("/api/**").authenticated()
58
+ .requestMatchers("/**").permitAll()
59
+ .and()
60
+ .addFilterBefore(new AppCorsFilter(), UsernamePasswordAuthenticationFilter.class)
61
+ .oauth2ResourceServer()
62
+ .jwt();
63
+
64
+ return http.build();
65
+ }
66
+
67
+ @Autowired
68
+ public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
69
+ auth.userDetailsService(userDetailsService);
70
+ }
71
+ }
@@ -0,0 +1,41 @@
1
+ package fr.cerema.dsi.aaaa.config;
2
+
3
+ import org.springframework.context.annotation.Configuration;
4
+ import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistration;
5
+ import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
6
+ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
7
+
8
+ @Configuration
9
+ public class StaticResourcesWebConfiguration implements WebMvcConfigurer {
10
+
11
+ protected static final String[] RESOURCE_LOCATIONS = new String[]{
12
+ "classpath:/static/",
13
+ "classpath:/static/content/",
14
+ "classpath:/static/i18n/",
15
+ };
16
+ protected static final String[] RESOURCE_PATHS = new String[]{
17
+ "/*.js",
18
+ "/*.css",
19
+ "/*.svg",
20
+ "/*.png",
21
+ "*.ico",
22
+ "/content/**",
23
+ "/i18n/*",
24
+ };
25
+
26
+
27
+ @Override
28
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
29
+ ResourceHandlerRegistration resourceHandlerRegistration = appendResourceHandler(registry);
30
+ initializeResourceHandler(resourceHandlerRegistration);
31
+ }
32
+
33
+ protected ResourceHandlerRegistration appendResourceHandler(ResourceHandlerRegistry registry) {
34
+ return registry.addResourceHandler(RESOURCE_PATHS);
35
+ }
36
+
37
+ protected void initializeResourceHandler(
38
+ ResourceHandlerRegistration resourceHandlerRegistration) {
39
+ resourceHandlerRegistration.addResourceLocations(RESOURCE_LOCATIONS);
40
+ }
41
+ }
@@ -0,0 +1,59 @@
1
+ package fr.cerema.dsi.aaaa.config;
2
+
3
+ import io.swagger.v3.oas.models.OpenAPI;
4
+ import io.swagger.v3.oas.models.info.Info;
5
+ import io.swagger.v3.oas.models.info.License;
6
+ import io.swagger.v3.oas.models.servers.Server;
7
+ import org.apache.commons.lang3.StringUtils;
8
+ import org.slf4j.Logger;
9
+ import org.slf4j.LoggerFactory;
10
+ import org.springframework.beans.factory.annotation.Value;
11
+ import org.springframework.cache.annotation.EnableCaching;
12
+ import org.springframework.context.annotation.Bean;
13
+ import org.springframework.context.annotation.Configuration;
14
+ import org.springframework.http.MediaType;
15
+ import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
16
+ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
17
+
18
+ @Configuration
19
+ @EnableCaching
20
+ public class WebConfiguration implements WebMvcConfigurer {
21
+
22
+ private static Logger logger = LoggerFactory.getLogger(WebConfiguration.class);
23
+
24
+ @Value("${url.externe:}")
25
+ private String urlExterne;
26
+
27
+ @Value("${info.app.version:unknown}")
28
+ private String version;
29
+
30
+ @Override
31
+ public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
32
+
33
+ logger.info("Initialisation de la configuration de la négociation de contenu.");
34
+
35
+ configurer.
36
+ favorParameter(true).
37
+ parameterName("mediaType").
38
+ ignoreAcceptHeader(false).
39
+ defaultContentType(MediaType.APPLICATION_JSON).
40
+ mediaType("xml", MediaType.APPLICATION_XML).
41
+ mediaType("json", MediaType.APPLICATION_JSON);
42
+ }
43
+
44
+ @Bean
45
+ public OpenAPI infoOpenAPI() {
46
+ OpenAPI openAPI = new OpenAPI()
47
+ .info(new Info().title("aaaa")
48
+ .description("<b>mon premier projet</b>.")
49
+ .version(version)
50
+ .license(new License().name("Cecill 2.0")
51
+ .url("http://www.cecill.info/licences/Licence_CeCILL_V2-fr.html")));
52
+
53
+ if (StringUtils.isNotBlank(urlExterne)) {
54
+ openAPI.addServersItem(new Server().url(urlExterne));
55
+ }
56
+ return openAPI;
57
+ }
58
+
59
+ }
@@ -0,0 +1,59 @@
1
+ package fr.cerema.dsi.aaaa.controllers;
2
+
3
+ import fr.cerema.dsi.aaaa.dto.UserWithCurrentAuthorityDTO;
4
+ import fr.cerema.dsi.aaaa.entities.User;
5
+ import fr.cerema.dsi.aaaa.mapper.UserMapper;
6
+ import fr.cerema.dsi.aaaa.services.UserService;
7
+ import io.swagger.v3.oas.annotations.Operation;
8
+ import io.swagger.v3.oas.annotations.media.Content;
9
+ import io.swagger.v3.oas.annotations.media.Schema;
10
+ import io.swagger.v3.oas.annotations.responses.ApiResponse;
11
+ import io.swagger.v3.oas.annotations.responses.ApiResponses;
12
+ import io.swagger.v3.oas.annotations.tags.Tag;
13
+ import org.springframework.http.HttpStatus;
14
+ import org.springframework.http.MediaType;
15
+ import org.springframework.http.ResponseEntity;
16
+ import org.springframework.web.bind.annotation.CrossOrigin;
17
+ import org.springframework.web.bind.annotation.GetMapping;
18
+ import org.springframework.web.bind.annotation.RequestMapping;
19
+ import org.springframework.web.bind.annotation.RestController;
20
+ import org.springframework.web.server.ResponseStatusException;
21
+
22
+ import java.util.Optional;
23
+
24
+ @Tag(name = "Account", description = "Permet d'interroger le niveau d'authorisation des utilisateurs")
25
+ @RestController
26
+ @RequestMapping("/api")
27
+ @CrossOrigin
28
+ public class AccountController {
29
+
30
+ private final UserService userService;
31
+
32
+ private final UserMapper userMapper;
33
+
34
+ public AccountController(UserService userService, UserMapper userMapper) {
35
+ this.userService = userService;
36
+ this.userMapper = userMapper;
37
+ }
38
+
39
+
40
+ @Operation(summary = "Récupère l'utilisateur actuellement connecté")
41
+ @ApiResponses(value = {
42
+ @ApiResponse(responseCode = "200", description = "L'utilisateur connecté", content = {
43
+ @Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
44
+ schema = @Schema(implementation = UserWithCurrentAuthorityDTO.class)
45
+ )
46
+ }),
47
+ @ApiResponse(responseCode = "404", description = "L'utilisateur n'existe pas dans l'application", content = @Content)
48
+ })
49
+ @GetMapping("/user")
50
+ public ResponseEntity<UserWithCurrentAuthorityDTO> getCurrentUser() {
51
+ Optional<User> userOptional = this.userService.getCurrentUser();
52
+ if (userOptional.isPresent()) {
53
+ return new ResponseEntity<>(userMapper.toDtoWithCurrentAuthority(userOptional.get()),
54
+ HttpStatus.OK);
55
+ }
56
+ throw new ResponseStatusException(HttpStatus.NOT_FOUND,
57
+ "L'utilisateur n'existe pas dans l'application");
58
+ }
59
+ }
@@ -0,0 +1,63 @@
1
+ package fr.cerema.dsi.aaaa.controllers;
2
+
3
+ import fr.cerema.dsi.aaaa.dto.UserDTO;
4
+ import fr.cerema.dsi.aaaa.entities.User;
5
+ import fr.cerema.dsi.aaaa.mapper.UserMapper;
6
+ import fr.cerema.dsi.aaaa.services.UserService;
7
+ import io.swagger.v3.oas.annotations.Operation;
8
+ import io.swagger.v3.oas.annotations.media.ArraySchema;
9
+ import io.swagger.v3.oas.annotations.media.Content;
10
+ import io.swagger.v3.oas.annotations.media.Schema;
11
+ import io.swagger.v3.oas.annotations.responses.ApiResponse;
12
+ import io.swagger.v3.oas.annotations.tags.Tag;
13
+ import org.slf4j.Logger;
14
+ import org.slf4j.LoggerFactory;
15
+ import org.springframework.beans.factory.annotation.Autowired;
16
+ import org.springframework.http.HttpStatus;
17
+ import org.springframework.http.MediaType;
18
+ import org.springframework.http.ResponseEntity;
19
+ import org.springframework.web.bind.annotation.CrossOrigin;
20
+ import org.springframework.web.bind.annotation.GetMapping;
21
+ import org.springframework.web.bind.annotation.RequestMapping;
22
+ import org.springframework.web.bind.annotation.RestController;
23
+
24
+ import java.util.List;
25
+ import java.util.stream.Collectors;
26
+
27
+ @Tag(name = "API open", description = "Permet d'interroger et de parcourir les API sans authentification")
28
+ @RestController
29
+ @RequestMapping("/api-open")
30
+ @CrossOrigin
31
+ public class ApiOpenController {
32
+
33
+ private final Logger log = LoggerFactory.getLogger(ApiOpenController.class);
34
+
35
+ private final UserService userService;
36
+
37
+ private final UserMapper userMapper;
38
+
39
+ @Autowired
40
+ public ApiOpenController(UserService userService, UserMapper userMapper) {
41
+ this.userService = userService;
42
+ this.userMapper = userMapper;
43
+ }
44
+
45
+ @Operation(summary = "Récupère tous les administrateurs AAAA",
46
+ description =
47
+ "Permet d'obtenir la liste de tous les utilisateurs qui sont administrateurs AAAA")
48
+ @ApiResponse(responseCode = "200", description = "Les administrateurs AAAA demandés", content = {
49
+ @Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
50
+ array = @ArraySchema(schema = @Schema(implementation = User.class))
51
+ )}
52
+ )
53
+
54
+ @GetMapping("/users/admin-aaaa")
55
+ public ResponseEntity<List<UserDTO>> getAllAdmin§§projectNS§§() {
56
+ log.debug("Requête REST pour obtenir tous les administrateurs AAAA");
57
+ List<UserDTO> userDTOList = this.userService.findAllAdmin§§projectNS§§()
58
+ .stream()
59
+ .map(this.userMapper::toDtoWithoutProfilSet)
60
+ .collect(Collectors.toList());
61
+ return new ResponseEntity<>(userDTOList, HttpStatus.OK);
62
+ }
63
+ }
@@ -0,0 +1,63 @@
1
+ package fr.cerema.dsi.aaaa.controllers;
2
+
3
+ import fr.cerema.dsi.aaaa.dto.UserDTO;
4
+ import fr.cerema.dsi.aaaa.entities.User;
5
+ import fr.cerema.dsi.aaaa.mapper.UserMapper;
6
+ import fr.cerema.dsi.aaaa.services.UserService;
7
+ import io.swagger.v3.oas.annotations.Operation;
8
+ import io.swagger.v3.oas.annotations.media.ArraySchema;
9
+ import io.swagger.v3.oas.annotations.media.Content;
10
+ import io.swagger.v3.oas.annotations.media.Schema;
11
+ import io.swagger.v3.oas.annotations.responses.ApiResponse;
12
+ import io.swagger.v3.oas.annotations.tags.Tag;
13
+ import org.slf4j.Logger;
14
+ import org.slf4j.LoggerFactory;
15
+ import org.springframework.beans.factory.annotation.Autowired;
16
+ import org.springframework.http.HttpStatus;
17
+ import org.springframework.http.MediaType;
18
+ import org.springframework.http.ResponseEntity;
19
+ import org.springframework.web.bind.annotation.CrossOrigin;
20
+ import org.springframework.web.bind.annotation.GetMapping;
21
+ import org.springframework.web.bind.annotation.RequestMapping;
22
+ import org.springframework.web.bind.annotation.RestController;
23
+
24
+ import java.util.List;
25
+ import java.util.stream.Collectors;
26
+
27
+ @Tag(name = "Account", description = "Permet d'interroger et de parcourir les utilisateurs")
28
+ @RestController
29
+ @RequestMapping("/api")
30
+ @CrossOrigin
31
+ public class UserController {
32
+
33
+ private final Logger log = LoggerFactory.getLogger(UserController.class);
34
+
35
+ private final UserService userService;
36
+
37
+ private final UserMapper userMapper;
38
+
39
+ @Autowired
40
+ public UserController(UserService userService, UserMapper userMapper) {
41
+ this.userService = userService;
42
+ this.userMapper = userMapper;
43
+ }
44
+
45
+ @Operation(summary = "Récupère tous les administrateurs AAAA",
46
+ description =
47
+ "Permet d'obtenir la liste de tous les utilisateurs qui sont administrateurs AAAA")
48
+ @ApiResponse(responseCode = "200", description = "Les administrateurs AAAA demandés", content = {
49
+ @Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
50
+ array = @ArraySchema(schema = @Schema(implementation = User.class))
51
+ )}
52
+ )
53
+ @GetMapping("/users/admin-aaaa")
54
+ public ResponseEntity<List<UserDTO>> getAllAdmin§§projectNS§§() {
55
+ log.debug("Requête REST pour obtenir tous les administrateurs AAAA");
56
+ List<UserDTO> userDTOList = this.userService.findAllAdmin§§projectNS§§()
57
+ .stream()
58
+ .map(this.userMapper::toDtoWithoutProfilSet)
59
+ .collect(Collectors.toList());
60
+ return new ResponseEntity<>(userDTOList, HttpStatus.OK);
61
+ }
62
+
63
+ }
@@ -0,0 +1,20 @@
1
+ package fr.cerema.dsi.aaaa.dto;
2
+
3
+ import com.fasterxml.jackson.annotation.JsonProperty;
4
+
5
+ import java.io.Serializable;
6
+
7
+ public abstract class GenericDTO implements Serializable {
8
+
9
+ @JsonProperty("id")
10
+ private Long id;
11
+
12
+ public Long getId() {
13
+ return id;
14
+ }
15
+
16
+ public void setId(Long id) {
17
+ this.id = id;
18
+ }
19
+
20
+ }
@@ -0,0 +1,26 @@
1
+ package fr.cerema.dsi.aaaa.dto;
2
+
3
+ import fr.cerema.dsi.aaaa.enums.Role;
4
+
5
+ public class ProfilDTO extends GenericDTO {
6
+
7
+ private Role profilUtilisateur;
8
+
9
+
10
+ public Role getProfilUtilisateur() {
11
+ return profilUtilisateur;
12
+ }
13
+
14
+ public void setProfilUtilisateur(Role profilUtilisateur) {
15
+ this.profilUtilisateur = profilUtilisateur;
16
+ }
17
+
18
+
19
+ @Override
20
+ public String toString() {
21
+ return "ProfilDTO{" +
22
+ "id=" + this.getId() +
23
+ ", profilUtilisateur=" + profilUtilisateur +
24
+ '}';
25
+ }
26
+ }
@@ -0,0 +1,57 @@
1
+ package fr.cerema.dsi.aaaa.dto;
2
+
3
+ import java.util.Set;
4
+
5
+ public class UserDTO extends GenericDTO {
6
+
7
+ private String email;
8
+
9
+ private String orionId;
10
+
11
+ private Set<ProfilDTO> profilSet;
12
+
13
+ private Long idDirectionCourante;
14
+
15
+ public String getEmail() {
16
+ return email;
17
+ }
18
+
19
+ public void setEmail(String email) {
20
+ this.email = email;
21
+ }
22
+
23
+ public String getOrionId() {
24
+ return orionId;
25
+ }
26
+
27
+ public void setOrionId(String orionId) {
28
+ this.orionId = orionId;
29
+ }
30
+
31
+ public Set<ProfilDTO> getProfilSet() {
32
+ return profilSet;
33
+ }
34
+
35
+ public void setProfilSet(Set<ProfilDTO> profilSet) {
36
+ this.profilSet = profilSet;
37
+ }
38
+
39
+ public Long getIdDirectionCourante() {
40
+ return idDirectionCourante;
41
+ }
42
+
43
+ public void setIdDirectionCourante(Long idDirectionCourante) {
44
+ this.idDirectionCourante = idDirectionCourante;
45
+ }
46
+
47
+
48
+ @Override
49
+ public String toString() {
50
+ return "UserDTO{" +
51
+ "email='" + email + '\'' +
52
+ ", orionId='" + orionId + '\'' +
53
+ ", profilSet=" + profilSet +
54
+ ", idDirectionCourante=" + idDirectionCourante +
55
+ '}';
56
+ }
57
+ }
@@ -0,0 +1,31 @@
1
+ package fr.cerema.dsi.aaaa.dto;
2
+
3
+ import fr.cerema.dsi.aaaa.enums.Role;
4
+ import lombok.Getter;
5
+ import lombok.Setter;
6
+
7
+ import java.io.Serializable;
8
+ import java.util.List;
9
+
10
+ @Getter
11
+ @Setter
12
+ public class UserWithCurrentAuthorityDTO implements Serializable {
13
+
14
+ private Long id;
15
+
16
+ private String email;
17
+
18
+ private String orionId;
19
+
20
+ private List<Role> roleActifList;
21
+
22
+ @Override
23
+ public String toString() {
24
+ return "UserWithCurrentAuthorityDTO{" +
25
+ "id=" + id +
26
+ ", email='" + email + '\'' +
27
+ ", orionId='" + orionId + '\'' +
28
+ ", roleActifList=" + roleActifList +
29
+ '}';
30
+ }
31
+ }
@@ -0,0 +1,30 @@
1
+ package fr.cerema.dsi.aaaa.mapper;
2
+
3
+ import fr.cerema.dsi.aaaa.dto.UserDTO;
4
+ import fr.cerema.dsi.aaaa.dto.UserWithCurrentAuthorityDTO;
5
+ import fr.cerema.dsi.aaaa.entities.User;
6
+ import fr.cerema.dsi.aaaa.services.ProfilService;
7
+ import org.mapstruct.Mapper;
8
+ import org.mapstruct.Mapping;
9
+ import org.mapstruct.Named;
10
+
11
+ import org.springframework.beans.factory.annotation.Autowired;
12
+
13
+ @Mapper(componentModel = "spring", uses = {})
14
+ public abstract class UserMapper {
15
+
16
+ @Autowired
17
+ public ProfilService profilService;
18
+
19
+ @Named("toDto")
20
+ public abstract UserDTO toDto(User user);
21
+
22
+ @Named("toDtoWithoutProfilSet")
23
+ @Mapping(target = "profilSet", ignore = true)
24
+ public abstract UserDTO toDtoWithoutProfilSet(User user);
25
+
26
+ public abstract User toEntity(UserDTO userDTO);
27
+
28
+ @Mapping(target = "roleActifList", expression = "java(this.profilService.findAllCurrentRolesByUsername(user.getEmail()))")
29
+ public abstract UserWithCurrentAuthorityDTO toDtoWithCurrentAuthority(User user);
30
+ }
@@ -0,0 +1,5 @@
1
+ package fr.cerema.dsi.commons.beans.errors;
2
+
3
+ public abstract class ApiSubError {
4
+
5
+ }
@@ -0,0 +1,13 @@
1
+ package fr.cerema.dsi.commons.beans.errors;
2
+
3
+ public class ApiValidationSubError extends ApiSubError {
4
+ private String object;
5
+ private String field;
6
+ private Object rejectedValue;
7
+ private String message;
8
+
9
+ ApiValidationSubError(String object, String message) {
10
+ this.object = object;
11
+ this.message = message;
12
+ }
13
+ }