@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,308 @@
1
+ /*
2
+ * Copyright 2017 - Alain CHARLES
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License
15
+ */
16
+
17
+ package fr.cerema.dsi.commons.beans.errors;
18
+
19
+ import com.fasterxml.jackson.annotation.JsonFormat;
20
+ import com.fasterxml.jackson.annotation.JsonIgnore;
21
+ import com.fasterxml.jackson.annotation.JsonProperty;
22
+ import com.fasterxml.jackson.annotation.JsonPropertyOrder;
23
+ import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
24
+ import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
25
+ import org.springframework.http.HttpStatus;
26
+
27
+ import java.time.LocalDateTime;
28
+ import java.util.ArrayList;
29
+ import java.util.List;
30
+ import java.util.Objects;
31
+
32
+ /**
33
+ * This class holds the necessary fields of the error
34
+ * that has to be sent in case of API call failure.
35
+ * <p>
36
+ * Error fields are stored in an instance of an inner class {@link JsonApiError.ApiError}.
37
+ * The Json error is sent back as an array (one element in this case) as asked by the Json Api Specification V1.0
38
+ * See <a href="http://jsonapi.org/format/#errors">http://jsonapi.org/format/#errors</a>
39
+ * <p>
40
+ * Generally, your {@link org.springframework.web.bind.annotation.RestController} will
41
+ * throw an exception and you will instantiate {@link JsonApiError} in a exception handler
42
+ * as done for instance in {@link fr.cerema.dsi.commons.controllers.RestResponseEntityExceptionHandler}
43
+ *
44
+ * @author alain.charles
45
+ */
46
+ public class JsonApiError {
47
+
48
+ private JsonApiError.ApiError error;
49
+
50
+ /**
51
+ * Returns the API Error as an array of one error in this case
52
+ * as aked by Json Api Specification V1.0
53
+ *
54
+ * @return the list of (one) error.
55
+ */
56
+ @JsonProperty
57
+ @JacksonXmlElementWrapper(localName = "errors")
58
+ @JacksonXmlProperty(localName = "error")
59
+ public List<JsonApiError.ApiError> getErrors() {
60
+ List<ApiError> returnValue = new ArrayList<>();
61
+ returnValue.add(this.error);
62
+ return returnValue;
63
+ }
64
+
65
+ private JsonApiError() {
66
+ this.error = new JsonApiError.ApiError();
67
+ }
68
+
69
+ /**
70
+ * Creates a new instance of {@link JsonApiError}
71
+ * using supplied {@link HttpStatus}
72
+ *
73
+ * @param status the HTTP status
74
+ */
75
+ public JsonApiError(HttpStatus status) {
76
+ this();
77
+ this.error.status = status;
78
+ this.error.message = status.getReasonPhrase();
79
+ }
80
+
81
+ /**
82
+ * Creates a new instance of {@link JsonApiError}
83
+ * using supplied {@link HttpStatus} and {@link Throwable}
84
+ *
85
+ * @param status the HTTP status
86
+ * @param ex the Throwable whose message will be included in {@link JsonApiError#getDebugMessage()}
87
+ */
88
+ public JsonApiError(HttpStatus status, Throwable ex) {
89
+ this(status);
90
+ if (Objects.nonNull(ex)) this.error.debugMessage = ex.getLocalizedMessage();
91
+ }
92
+
93
+ /**
94
+ * Creates a new instance of {@link JsonApiError}
95
+ * using supplied {@link HttpStatus}, {@link String} and {@link Throwable}
96
+ *
97
+ * @param status the HTTP status
98
+ * @param message the message that will be stored in {@link JsonApiError#getMessage()}
99
+ * @param ex the Throwable whose message will be included in {@link JsonApiError#getDebugMessage()}
100
+ */
101
+ public JsonApiError(HttpStatus status, String message, Throwable ex) {
102
+ this(status, ex);
103
+ this.error.message = message;
104
+ }
105
+
106
+
107
+ /**
108
+ * Returns the error time stamp
109
+ *
110
+ * @return the timestamp
111
+ */
112
+ @JsonIgnore
113
+ public LocalDateTime getTimestamp() {
114
+ return error.timestamp;
115
+ }
116
+
117
+ /**
118
+ * Returns the Http Status Code value
119
+ *
120
+ * @return the status code value
121
+ */
122
+ @JsonIgnore
123
+ public int getHttpErrorCode() {
124
+ return error.status.value();
125
+ }
126
+
127
+ /**
128
+ * Returns the reason of Http Error
129
+ *
130
+ * <p>See <a href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html">
131
+ * https://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html</a>
132
+ *
133
+ * @return the reason of error
134
+ */
135
+ @JsonIgnore
136
+ public String getStatusReasonPhrase() {
137
+ return error.status.getReasonPhrase();
138
+ }
139
+
140
+ /**
141
+ * Returns the error main message
142
+ *
143
+ * @return the main message
144
+ */
145
+ @JsonIgnore
146
+ public String getMessage() {
147
+ return error.message;
148
+ }
149
+
150
+ /**
151
+ * Returns the error debug message
152
+ *
153
+ * @return the debug message
154
+ */
155
+ @JsonIgnore
156
+ private String getDebugMessage() {
157
+ return error.debugMessage;
158
+ }
159
+
160
+ /**
161
+ * Returns the list of {@link ApiSubError} instances or {@code null}
162
+ *
163
+ * @return the list of subErrors
164
+ */
165
+ @JsonIgnore
166
+ public List<ApiSubError> getSubErrors() {
167
+ return error.subErrors;
168
+ }
169
+
170
+ /**
171
+ * Retourne the {@link HttpStatus} of the error
172
+ *
173
+ * @return the Http status
174
+ */
175
+ @JsonIgnore
176
+ public HttpStatus getStatus() {
177
+ return error.status;
178
+ }
179
+
180
+
181
+ @JsonIgnore
182
+ public List<ApiSubError> getApiSubErrors() {
183
+ return error.getSubErrors();
184
+ }
185
+
186
+ /**
187
+ * Minimalist output of the error contained in this instance
188
+ * Used when the json or xml serialization failed
189
+ */
190
+ @Override
191
+ public String toString() {
192
+ return error.toString();
193
+ }
194
+
195
+ /**
196
+ * This class holds the necessary fields of the error
197
+ * that has to be sent in case of API call failure.
198
+ *
199
+ * <p>Generally, you will instantiate {@link JsonApiError} in the
200
+ * {@link org.springframework.web.bind.annotation.RestController} if the API call raised an exception.
201
+ *
202
+ * @author alain.charles
203
+ */
204
+ @JsonPropertyOrder({"httpErrorCode", "reason", "timestamp", "message", "debugMessage", "subErrors"})
205
+ public class ApiError {
206
+
207
+ private HttpStatus status;
208
+
209
+ private LocalDateTime timestamp;
210
+
211
+ private String message;
212
+
213
+ private String debugMessage;
214
+
215
+ private List<ApiSubError> subErrors;
216
+
217
+ private ApiError() {
218
+ timestamp = LocalDateTime.now();
219
+ }
220
+
221
+
222
+ /**
223
+ * Returns the error time stamp
224
+ *
225
+ * @return the timestamp
226
+ */
227
+ @JsonProperty
228
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy HH:mm:ss")
229
+ public LocalDateTime getTimestamp() {
230
+ return timestamp;
231
+ }
232
+
233
+ /**
234
+ * Returns the Http Status Code value
235
+ *
236
+ * @return the status code value
237
+ */
238
+ @JsonProperty
239
+ public int getHttpErrorCode() {
240
+ return status.value();
241
+ }
242
+
243
+ /**
244
+ * Returns the reason of Http Error
245
+ *
246
+ * <p>See <a href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html">
247
+ * https://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html</a>
248
+ *
249
+ * @return the reason of error
250
+ */
251
+ @JsonProperty("reason")
252
+ public String getStatusReasonPhrase() {
253
+ return status.getReasonPhrase();
254
+ }
255
+
256
+ /**
257
+ * Returns the error main message
258
+ *
259
+ * @return the main message
260
+ */
261
+ @JsonProperty
262
+ public String getMessage() {
263
+ return message;
264
+ }
265
+
266
+ /**
267
+ * Returns the error debug message
268
+ *
269
+ * @return the debug message
270
+ */
271
+ @JsonProperty
272
+ public String getDebugMessage() {
273
+ return debugMessage;
274
+ }
275
+
276
+ /**
277
+ * Returns the list of {@link ApiSubError} instances or {@code null}
278
+ *
279
+ * @return the list of subErrors
280
+ */
281
+ @JsonProperty
282
+ List<ApiSubError> getSubErrors() {
283
+ return subErrors;
284
+ }
285
+
286
+ @Override
287
+ public String toString() {
288
+ final String UNKNOWN = "inconnu";
289
+
290
+ StringBuilder sb = new StringBuilder();
291
+
292
+ sb.append("httpErrorCode : ");
293
+ sb.append(error.status != null ? error.status.value() : UNKNOWN);
294
+ sb.append("\nreason : ");
295
+ sb.append(error.status != null ? error.status.getReasonPhrase() : UNKNOWN);
296
+ sb.append("\ntimestamp : ");
297
+ sb.append(error.timestamp != null ? error.timestamp : UNKNOWN);
298
+ sb.append("\nmessage : ");
299
+ sb.append(error.message != null ? error.message : UNKNOWN);
300
+ sb.append("\ndebugMessage : ");
301
+ sb.append(error.debugMessage != null ? error.debugMessage : UNKNOWN);
302
+ sb.append("\nsubErrors : ");
303
+ sb.append(error.subErrors != null ? error.subErrors : UNKNOWN);
304
+
305
+ return sb.toString();
306
+ }
307
+ }
308
+ }
@@ -0,0 +1,67 @@
1
+ package fr.cerema.dsi.commons.controllers;
2
+
3
+ import com.fasterxml.jackson.databind.ObjectMapper;
4
+ import com.fasterxml.jackson.databind.SerializationFeature;
5
+ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
6
+ import fr.cerema.dsi.commons.beans.errors.JsonApiError;
7
+ import jakarta.servlet.http.HttpServletResponse;
8
+ import org.slf4j.Logger;
9
+ import org.slf4j.LoggerFactory;
10
+ import org.springframework.beans.factory.annotation.Autowired;
11
+ import org.springframework.http.HttpStatus;
12
+ import org.springframework.http.MediaType;
13
+ import org.springframework.stereotype.Component;
14
+
15
+ import java.io.PrintWriter;
16
+
17
+ /**
18
+ * Permet d'afficher les erreurs en les présentant à l'utilisateur sous forme de json
19
+ * Si cela échoue, on affiche une version de secours en utilisant un toString()
20
+ * Le but est de limiter le plus possible la survenue d'erreur pendant ce processus : risque de boucle infinie.
21
+ */
22
+ @Component
23
+ public abstract class AbstractErrorHandler {
24
+ private static final Logger logger = LoggerFactory.getLogger(AbstractErrorHandler.class);
25
+
26
+ private final ObjectMapper mapper;
27
+
28
+ @Autowired
29
+ public AbstractErrorHandler(ObjectMapper mapper) {
30
+ this.mapper = mapper;
31
+ mapper.registerModule(new JavaTimeModule());
32
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
33
+ }
34
+
35
+ public void sendError(JsonApiError error, HttpServletResponse response) {
36
+ response.setStatus(getStatusFromError(error));
37
+ response.setContentType(MediaType.APPLICATION_JSON_VALUE);
38
+ response.setCharacterEncoding("UTF-8");
39
+ try {
40
+ PrintWriter writer = response.getWriter();
41
+ try {
42
+ writer.write(mapper.writeValueAsString(error));
43
+ } catch (Exception e) {
44
+ logger.warn("Problème lors de l'envoi formaté en json de l'erreur : {}", error);
45
+ logger.warn(" Le problème était : {}", e.getLocalizedMessage());
46
+ logger.warn(" On envoie l'erreur en mode simple string");
47
+ writer.write(error.toString());
48
+ } finally {
49
+ writer.close();
50
+ }
51
+ } catch (Exception ex) {
52
+ logger.error("Impossible d'envoyer en simple mode texte l'erreur suivante : " + error, ex);
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Si le statut n'est pas défini, on retourne par défaut une simple erreur 500 générique
58
+ */
59
+ private int getStatusFromError(JsonApiError error) {
60
+ if (error.getStatus() != null) {
61
+ return error.getStatus().value();
62
+ } else {
63
+ return HttpStatus.INTERNAL_SERVER_ERROR.value();
64
+ }
65
+ }
66
+
67
+ }
@@ -0,0 +1,19 @@
1
+ package fr.cerema.dsi.commons.controllers;
2
+
3
+ import org.springframework.stereotype.Controller;
4
+ import org.springframework.web.bind.annotation.GetMapping;
5
+
6
+ @Controller
7
+ public class ClientForwardController {
8
+
9
+ /**
10
+ * Forwards any unmapped paths (except those containing a period) to the client
11
+ * {@code index.html}.
12
+ *
13
+ * @return forward to client {@code index.html}.
14
+ */
15
+ @GetMapping(value = "/**/{path:[^\\.]*}")
16
+ public String forward() {
17
+ return "forward:/";
18
+ }
19
+ }
@@ -0,0 +1,57 @@
1
+ package fr.cerema.dsi.commons.controllers;
2
+
3
+ import com.fasterxml.jackson.databind.ObjectMapper;
4
+ import fr.cerema.dsi.commons.beans.errors.JsonApiError;
5
+ import io.swagger.v3.oas.annotations.Hidden;
6
+ import jakarta.servlet.http.HttpServletResponse;
7
+ import org.springframework.beans.factory.annotation.Autowired;
8
+ import org.springframework.boot.web.servlet.error.ErrorAttributes;
9
+ import org.springframework.boot.web.servlet.error.ErrorController;
10
+ import org.springframework.http.HttpStatus;
11
+ import org.springframework.http.MediaType;
12
+ import org.springframework.web.bind.annotation.GetMapping;
13
+ import org.springframework.web.bind.annotation.PostMapping;
14
+ import org.springframework.web.bind.annotation.PutMapping;
15
+ import org.springframework.web.bind.annotation.RestController;
16
+ import org.springframework.web.context.request.WebRequest;
17
+
18
+ // TODO Verifier API qui génére une erreur pour les tests.
19
+ // surement redirection d'erreur
20
+
21
+ @Hidden
22
+ @RestController
23
+ public class CustomErrorController extends AbstractErrorHandler implements ErrorController {
24
+
25
+ private static final String PATH = "/error";
26
+
27
+ private final ErrorAttributes errorAttributes;
28
+
29
+ @Autowired
30
+ public CustomErrorController(ObjectMapper mapper, ErrorAttributes errorAttributes) {
31
+ super(mapper);
32
+ this.errorAttributes = errorAttributes;
33
+ }
34
+
35
+ @GetMapping(value = PATH, produces = MediaType.ALL_VALUE)
36
+ public void getHandleError(WebRequest request, HttpServletResponse response) {
37
+ JsonApiError error = new JsonApiError(HttpStatus.resolve(response.getStatus()), errorAttributes.getError(request));
38
+
39
+ sendError(error, response);
40
+ }
41
+
42
+ @PostMapping(value = PATH, produces = MediaType.ALL_VALUE)
43
+ public void postHandleError(WebRequest request, HttpServletResponse response) {
44
+ JsonApiError error = new JsonApiError(HttpStatus.resolve(response.getStatus()), errorAttributes.getError(request));
45
+
46
+ sendError(error, response);
47
+ }
48
+
49
+ @PutMapping(value = PATH, produces = MediaType.ALL_VALUE)
50
+ public void putHandleError(WebRequest request, HttpServletResponse response) {
51
+ JsonApiError error = new JsonApiError(HttpStatus.resolve(response.getStatus()), errorAttributes.getError(request));
52
+
53
+ sendError(error, response);
54
+ }
55
+
56
+ }
57
+
@@ -0,0 +1,75 @@
1
+ package fr.cerema.dsi.commons.controllers;
2
+
3
+ import com.fasterxml.jackson.databind.ObjectMapper;
4
+ import fr.cerema.dsi.commons.beans.errors.JsonApiError;
5
+ import fr.cerema.dsi.commons.exceptions.EntityNotFoundException;
6
+ import fr.cerema.dsi.commons.exceptions.UserNotFoundException;
7
+ import jakarta.servlet.http.HttpServletResponse;
8
+ import org.springframework.beans.factory.annotation.Autowired;
9
+ import org.springframework.http.HttpStatus;
10
+ import org.springframework.security.access.AccessDeniedException;
11
+ import org.springframework.security.authentication.AuthenticationServiceException;
12
+ import org.springframework.web.HttpMediaTypeNotAcceptableException;
13
+ import org.springframework.web.bind.annotation.ExceptionHandler;
14
+ import org.springframework.web.bind.annotation.RestControllerAdvice;
15
+ import org.springframework.web.servlet.NoHandlerFoundException;
16
+
17
+ @RestControllerAdvice
18
+ public class RestResponseEntityExceptionHandler extends AbstractErrorHandler {
19
+
20
+ @Autowired
21
+ public RestResponseEntityExceptionHandler(ObjectMapper mapper) {
22
+ super(mapper);
23
+ }
24
+
25
+ @ExceptionHandler(NoHandlerFoundException.class)
26
+ public void handleNoHandlerFound(NoHandlerFoundException ex, HttpServletResponse response) {
27
+ JsonApiError error = new JsonApiError(HttpStatus.NOT_FOUND,
28
+ "La requête ne correspond pas à un service existant.", ex);
29
+ sendError(error, response);
30
+ }
31
+
32
+ @ExceptionHandler({AccessDeniedException.class})
33
+ public void handleAccessDeniedException(AccessDeniedException ex, HttpServletResponse response) {
34
+ JsonApiError error = new JsonApiError(HttpStatus.FORBIDDEN,
35
+ "Accès refusé, vous n'avez pas les droits suffisants", ex);
36
+ sendError(error, response);
37
+ }
38
+
39
+ @ExceptionHandler(HttpMediaTypeNotAcceptableException.class)
40
+ public void handleError(HttpMediaTypeNotAcceptableException ex, HttpServletResponse response) {
41
+ JsonApiError error = new JsonApiError(HttpStatus.NOT_ACCEPTABLE,
42
+ "Le serveur ne sait pas générer une réponse avec le mediaType demandé.", ex);
43
+ sendError(error, response);
44
+ }
45
+
46
+ @ExceptionHandler(value = EntityNotFoundException.class)
47
+ public void handleNotFound(EntityNotFoundException ex, HttpServletResponse response) {
48
+ JsonApiError error = new JsonApiError(HttpStatus.NOT_FOUND,
49
+ "Entité recherchée non trouvée", ex);
50
+ sendError(error, response);
51
+ }
52
+
53
+ @ExceptionHandler(value = UserNotFoundException.class)
54
+ public void handleUserNotFound(UserNotFoundException ex, HttpServletResponse response) {
55
+ JsonApiError error = new JsonApiError(HttpStatus.UNAUTHORIZED,
56
+ "Utilisateur recherché non trouvé", ex);
57
+ sendError(error, response);
58
+ }
59
+
60
+ @ExceptionHandler(value = IllegalArgumentException.class)
61
+ public void handleIllegalArgument(IllegalArgumentException ex, HttpServletResponse response) {
62
+ JsonApiError error = new JsonApiError(HttpStatus.BAD_REQUEST,
63
+ "Un argument de la requête est incorrect", ex);
64
+ sendError(error, response);
65
+ }
66
+
67
+ @ExceptionHandler(value = AuthenticationServiceException.class)
68
+ public void handleAuthenticationServiceException(AuthenticationServiceException ex,
69
+ HttpServletResponse response) {
70
+ JsonApiError error = new JsonApiError(HttpStatus.UNAUTHORIZED,
71
+ "Authentification incorrecte.", ex);
72
+ sendError(error, response);
73
+ }
74
+
75
+ }
@@ -0,0 +1,30 @@
1
+ /*
2
+ * Copyright (c) 2018 - Alain CHARLES
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License
15
+ *
16
+ */
17
+
18
+ package fr.cerema.dsi.commons.security.auth.jwt.exceptions;
19
+
20
+ import org.springframework.security.core.AuthenticationException;
21
+
22
+ public class InvalidTokenException extends AuthenticationException {
23
+ public InvalidTokenException(String msg, Throwable t) {
24
+ super(msg, t);
25
+ }
26
+
27
+ public InvalidTokenException(String msg) {
28
+ super(msg);
29
+ }
30
+ }
@@ -0,0 +1,45 @@
1
+ /*
2
+ * Copyright (c) 2018 - Alain CHARLES
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License
15
+ *
16
+ */
17
+
18
+ package fr.cerema.dsi.commons.security.filters;
19
+
20
+ import org.springframework.web.cors.CorsConfiguration;
21
+ import org.springframework.web.cors.CorsConfigurationSource;
22
+ import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
23
+ import org.springframework.web.filter.CorsFilter;
24
+
25
+ import java.util.Arrays;
26
+
27
+ public class AppCorsFilter extends CorsFilter {
28
+
29
+ public AppCorsFilter() {
30
+ super(configurationSource());
31
+ }
32
+
33
+ private static CorsConfigurationSource configurationSource() {
34
+ CorsConfiguration config = new CorsConfiguration();
35
+ config.setAllowCredentials(true);
36
+ //config.addAllowedOriginPattern("*");
37
+ config.addAllowedOrigin("*");
38
+ config.addAllowedHeader("*");
39
+ config.setMaxAge(36000L);
40
+ config.setAllowedMethods(Arrays.asList("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS"));
41
+ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
42
+ source.registerCorsConfiguration("/**", config);
43
+ return source;
44
+ }
45
+ }
@@ -0,0 +1,2 @@
1
+ org.springframework.boot.diagnostics.FailureAnalyzer=\
2
+ fr.cerema.dsi.aaaa.config.analyzer.JwtConfMalformedAnalyzer
@@ -0,0 +1,3 @@
1
+ ${AnsiColor.GREEN}§§projectNS§§ ${AnsiColor.BLUE}${info.app.version}
2
+ ${AnsiColor.CYAN}POC gestion de données spatiales
3
+ ${AnsiColor.DEFAULT}
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <configuration>
3
+ <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
4
+ <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
5
+
6
+ <logger name="org.springframework" level="ERROR"/>
7
+ <logger name="org.springframework.web" level="ERROR"/>
8
+ <logger name="org.hibernate" level="ERROR"/>
9
+ <logger name="fr.cerema.dsi.aaaa" level="ERROR"/>
10
+
11
+ <root level="ERROR">
12
+ <appender-ref ref="CONSOLE"/>
13
+ </root>
14
+
15
+ </configuration>
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <configuration>
3
+ <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
4
+ <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
5
+
6
+ <logger name="org.springframework" level="ERROR"/>
7
+ <logger name="org.springframework.web" level="ERROR"/>
8
+ <logger name="org.hibernate" level="ERROR"/>
9
+ <logger name="fr.cerema.dsi.aaaa" level="INFO"/>
10
+
11
+ <root level="INFO">
12
+ <appender-ref ref="CONSOLE"/>
13
+ </root>
14
+
15
+ </configuration>