@cerema/cadriciel 1.4.23 → 1.4.26

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 (1359) hide show
  1. package/aqtion/.cadriciel/.settings +25 -0
  2. package/aqtion/.cadriciel/bin/.settings +0 -0
  3. package/aqtion/.cadriciel/bin/build.js +106 -0
  4. package/aqtion/.cadriciel/bin/env.js +145 -0
  5. package/aqtion/.cadriciel/bin/gen/api/api.js +886 -0
  6. package/aqtion/.cadriciel/bin/gen/component/component.js +36 -0
  7. package/aqtion/.cadriciel/bin/gen/db/db.js +3 -0
  8. package/aqtion/.cadriciel/bin/gen/db/ext/create.js +124 -0
  9. package/aqtion/.cadriciel/bin/gen/db/ext/ext.js +91 -0
  10. package/aqtion/.cadriciel/bin/gen/db/ext/import.js +636 -0
  11. package/aqtion/.cadriciel/bin/gen/db/ext/models.js +843 -0
  12. package/aqtion/.cadriciel/bin/gen/db/ext/query.js +127 -0
  13. package/aqtion/.cadriciel/bin/gen/db/ext/reverse.js +201 -0
  14. package/aqtion/.cadriciel/bin/gen/db/ext/reverse_lib.js +253 -0
  15. package/aqtion/.cadriciel/bin/gen/db/ext/snapshot.js +112 -0
  16. package/aqtion/.cadriciel/bin/gen/db/ext/sql.js +380 -0
  17. package/aqtion/.cadriciel/bin/gen/page/page.js +163 -0
  18. package/aqtion/.cadriciel/bin/gen/project/project.js +220 -0
  19. package/aqtion/.cadriciel/bin/gen/service/service.js +18 -0
  20. package/aqtion/.cadriciel/bin/gen.js +19 -0
  21. package/aqtion/.cadriciel/bin/lib/cadriciel.js +91 -0
  22. package/aqtion/.cadriciel/bin/lib/convert.js +94 -0
  23. package/aqtion/.cadriciel/bin/lib/docker.js +63 -0
  24. package/aqtion/.cadriciel/bin/lib/global.js +140 -0
  25. package/aqtion/.cadriciel/bin/lib/templates.js +48 -0
  26. package/aqtion/.cadriciel/bin/lib/utils.js +268 -0
  27. package/aqtion/.cadriciel/bin/link.js +139 -0
  28. package/aqtion/.cadriciel/bin/logs.js +42 -0
  29. package/aqtion/.cadriciel/bin/project/_update.js +268 -0
  30. package/aqtion/.cadriciel/bin/project/ext/logo.js +109 -0
  31. package/aqtion/.cadriciel/bin/project/ext/version.js +267 -0
  32. package/aqtion/.cadriciel/bin/project/update.js +3 -0
  33. package/aqtion/.cadriciel/bin/project.js +12 -0
  34. package/aqtion/.cadriciel/bin/reset.js +73 -0
  35. package/aqtion/.cadriciel/bin/rm/api/api.js +244 -0
  36. package/aqtion/.cadriciel/bin/rm/component/component.js +16 -0
  37. package/aqtion/.cadriciel/bin/rm/db/db.js +3 -0
  38. package/aqtion/.cadriciel/bin/rm/db/ext/ext.js +60 -0
  39. package/aqtion/.cadriciel/bin/rm/db/ext/models.js +357 -0
  40. package/aqtion/.cadriciel/bin/rm/page/page.js +62 -0
  41. package/aqtion/.cadriciel/bin/rm/service/service.js +17 -0
  42. package/aqtion/.cadriciel/bin/rm.js +18 -0
  43. package/aqtion/.cadriciel/bin/run/backend.js +122 -0
  44. package/aqtion/.cadriciel/bin/run/frontend.js +52 -0
  45. package/aqtion/.cadriciel/bin/run/stop-backend.js +39 -0
  46. package/aqtion/.cadriciel/bin/run/stop-frontend.js +55 -0
  47. package/aqtion/.cadriciel/bin/start/docker.js +448 -0
  48. package/aqtion/.cadriciel/bin/start/update.js +120 -0
  49. package/aqtion/.cadriciel/bin/start/workspace.js +398 -0
  50. package/aqtion/.cadriciel/bin/start.js +29 -0
  51. package/aqtion/.cadriciel/bin/stop/docker.js +28 -0
  52. package/aqtion/.cadriciel/bin/stop/workspace.js +54 -0
  53. package/aqtion/.cadriciel/bin/stop.js +26 -0
  54. package/aqtion/.cadriciel/bin/templates/angular-prod/main.module.ts +43 -0
  55. package/aqtion/.cadriciel/bin/templates/angular-prod/shared.module.ts +10 -0
  56. package/aqtion/.cadriciel/bin/templates/components/{{name}}.component.html +1 -0
  57. package/aqtion/.cadriciel/bin/templates/components/{{name}}.component.scss +0 -0
  58. package/aqtion/.cadriciel/bin/templates/components/{{name}}.component.ts +15 -0
  59. package/aqtion/.cadriciel/bin/templates/environment.tpl.ts +12 -0
  60. package/aqtion/.cadriciel/bin/templates/idea/compiler.xml +28 -0
  61. package/aqtion/.cadriciel/bin/templates/idea/dataSources.local.xml +20 -0
  62. package/aqtion/.cadriciel/bin/templates/idea/dataSources.xml +12 -0
  63. package/aqtion/.cadriciel/bin/templates/idea/encodings.xml +12 -0
  64. package/aqtion/.cadriciel/bin/templates/idea/jarRepositories.xml +20 -0
  65. package/aqtion/.cadriciel/bin/templates/idea/jpa-buddy-datasource.xml +8 -0
  66. package/aqtion/.cadriciel/bin/templates/idea/jpa-buddy.xml +7 -0
  67. package/aqtion/.cadriciel/bin/templates/idea/misc.xml +16 -0
  68. package/aqtion/.cadriciel/bin/templates/idea/modules.xml +8 -0
  69. package/aqtion/.cadriciel/bin/templates/idea/vcs.xml +6 -0
  70. package/aqtion/.cadriciel/bin/templates/idea/workspace-docker.xml +114 -0
  71. package/aqtion/.cadriciel/bin/templates/idea/workspace.xml +122 -0
  72. package/aqtion/.cadriciel/bin/templates/java/config.java +59 -0
  73. package/aqtion/.cadriciel/bin/templates/jpb/jpb-settings.xml +12 -0
  74. package/aqtion/.cadriciel/bin/templates/routing.module.ts +30 -0
  75. package/aqtion/.cadriciel/bin/templates/start/backend.sh +15 -0
  76. package/aqtion/.cadriciel/bin/templates/start/frontend.sh +3 -0
  77. package/aqtion/.cadriciel/bin/templates/studio-env.tpl.ts +9 -0
  78. package/aqtion/.cadriciel/bin/templates/{{name}}.component.html +1 -0
  79. package/aqtion/.cadriciel/bin/templates/{{name}}.component.scss +0 -0
  80. package/aqtion/.cadriciel/bin/templates/{{name}}.component.ts +16 -0
  81. package/aqtion/.cadriciel/bin/templates/{{name}}.service.ts +20 -0
  82. package/aqtion/.cadriciel/bin/unlink.js +0 -0
  83. package/aqtion/.cadriciel/bin/upgrade.js +0 -0
  84. package/aqtion/.cadriciel/bin/version.json +4 -0
  85. package/aqtion/.cadriciel/cli/build.js +8 -0
  86. package/aqtion/.cadriciel/cli/env.js +9 -0
  87. package/aqtion/.cadriciel/cli/gen.js +34 -0
  88. package/aqtion/.cadriciel/cli/link.js +8 -0
  89. package/aqtion/.cadriciel/cli/logs.js +8 -0
  90. package/aqtion/.cadriciel/cli/project.js +14 -0
  91. package/aqtion/.cadriciel/cli/reset.js +8 -0
  92. package/aqtion/.cadriciel/cli/restart.js +8 -0
  93. package/aqtion/.cadriciel/cli/rm.js +34 -0
  94. package/aqtion/.cadriciel/cli/start.js +8 -0
  95. package/aqtion/.cadriciel/cli/stop.js +8 -0
  96. package/aqtion/.cadriciel/cli/unlink.js +8 -0
  97. package/aqtion/.cadriciel/cli/upgrade.js +8 -0
  98. package/aqtion/.cadriciel/routes/root.json +1 -0
  99. package/aqtion/.cadriciel/shared/.gitkeep +0 -0
  100. package/aqtion/.cadriciel/watcher/pid +1 -0
  101. package/aqtion/.dockerignore +5 -0
  102. package/aqtion/.gitlab-ci.yml +102 -0
  103. package/aqtion/.jpb/jpb-settings.xml +12 -0
  104. package/aqtion/.project +1 -0
  105. package/aqtion/.vscode/launch.json +23 -0
  106. package/aqtion/.vscode/settings.json +3 -0
  107. package/aqtion/.vscode/tasks.json +55 -0
  108. package/aqtion/Dockerfile +8 -0
  109. package/aqtion/angular.json +208 -0
  110. package/aqtion/backend/.mvn/wrapper/MavenWrapperDownloader.java +116 -0
  111. package/aqtion/backend/.mvn/wrapper/maven-wrapper.properties +4 -0
  112. package/aqtion/backend/Dockerfile +13 -0
  113. package/aqtion/backend/aqtion-data/Readme.md +27 -0
  114. package/aqtion/backend/aqtion-data/pom.xml +36 -0
  115. package/aqtion/backend/aqtion-data/src/main/resources/db/dev/Readme.md +5 -0
  116. package/aqtion/backend/aqtion-data/src/main/resources/db/dev/V2022.06.02.1513__dev-data.sql +7 -0
  117. package/aqtion/backend/aqtion-data/src/main/resources/db/migration/Readme.md +38 -0
  118. package/aqtion/backend/aqtion-data/src/main/resources/db/migration/V2021.10.14.0819__Init.sql +23 -0
  119. package/aqtion/backend/aqtion-data/target/classes/db/dev/Readme.md +5 -0
  120. package/aqtion/backend/aqtion-data/target/classes/db/dev/V2022.06.02.1513__dev-data.sql +7 -0
  121. package/aqtion/backend/aqtion-data/target/classes/db/migration/Readme.md +38 -0
  122. package/aqtion/backend/aqtion-data/target/classes/db/migration/V2021.10.14.0819__Init.sql +23 -0
  123. package/aqtion/backend/aqtion-data/target/maven-archiver/pom.properties +3 -0
  124. package/aqtion/backend/aqtion-metier/pom.xml +110 -0
  125. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/aqtion/services/CustomUserDetailsService.java +12 -0
  126. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/aqtion/services/ProfilService.java +24 -0
  127. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/aqtion/services/UserService.java +36 -0
  128. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/aqtion/services/impl/CustomUserDetailsServiceImpl.java +79 -0
  129. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/aqtion/services/impl/ProfilServiceImpl.java +27 -0
  130. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/aqtion/services/impl/UserServiceImpl.java +75 -0
  131. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/commons/security/UserSecurityServiceUtil.java +30 -0
  132. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/commons/services/GenericService.java +30 -0
  133. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/commons/services/GenericServiceImpl.java +62 -0
  134. package/aqtion/backend/aqtion-metier/src/test/java/fr/cerema/dsi/aqtion/services/UserServiceImplTest.java +60 -0
  135. package/aqtion/backend/aqtion-metier/target/maven-archiver/pom.properties +3 -0
  136. package/aqtion/backend/aqtion-metier/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +9 -0
  137. package/aqtion/backend/aqtion-metier/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +9 -0
  138. package/aqtion/backend/aqtion-metier/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst +1 -0
  139. package/aqtion/backend/aqtion-metier/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +1 -0
  140. package/aqtion/backend/aqtion-persistance/pom.xml +33 -0
  141. package/aqtion/backend/aqtion-persistance/src/main/java/fr/cerema/dsi/aqtion/repositories/ProfilRepository.java +18 -0
  142. package/aqtion/backend/aqtion-persistance/src/main/java/fr/cerema/dsi/aqtion/repositories/UserRepository.java +28 -0
  143. package/aqtion/backend/aqtion-persistance/src/main/java/fr/cerema/dsi/commons/repositories/AbstractDao.java +118 -0
  144. package/aqtion/backend/aqtion-persistance/src/main/java/fr/cerema/dsi/commons/repositories/GenericRepository.java +101 -0
  145. package/aqtion/backend/aqtion-persistance/src/main/java/fr/cerema/dsi/commons/repositories/IAbstractDao.java +66 -0
  146. package/aqtion/backend/aqtion-persistance/target/maven-archiver/pom.properties +3 -0
  147. package/aqtion/backend/aqtion-persistance/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +5 -0
  148. package/aqtion/backend/aqtion-persistance/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +5 -0
  149. package/aqtion/backend/aqtion-presentation/Readme.md +98 -0
  150. package/aqtion/backend/aqtion-presentation/pom.xml +185 -0
  151. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/App.java +20 -0
  152. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/config/AspectJConfiguration.java +58 -0
  153. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/config/AuthenticationTokenFilter.java +134 -0
  154. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/config/SecurityConfiguration.java +80 -0
  155. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/config/StaticResourcesWebConfiguration.java +41 -0
  156. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/config/WebConfiguration.java +59 -0
  157. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/controllers/AccountController.java +64 -0
  158. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/controllers/ApiOpenController.java +71 -0
  159. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/controllers/UserController.java +65 -0
  160. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/dto/GenericDTO.java +20 -0
  161. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/dto/ProfilDTO.java +26 -0
  162. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/dto/UserDTO.java +57 -0
  163. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/dto/UserWithCurrentAuthorityDTO.java +31 -0
  164. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/mapper/UserMapper.java +33 -0
  165. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/beans/errors/ApiSubError.java +5 -0
  166. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/beans/errors/ApiValidationSubError.java +13 -0
  167. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/beans/errors/JsonApiError.java +308 -0
  168. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/controllers/AbstractErrorHandler.java +67 -0
  169. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/controllers/ClientForwardController.java +19 -0
  170. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/controllers/CustomErrorController.java +57 -0
  171. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/controllers/RestResponseEntityExceptionHandler.java +75 -0
  172. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/security/auth/jwt/exceptions/InvalidTokenException.java +30 -0
  173. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/security/filters/AppCorsFilter.java +45 -0
  174. package/aqtion/backend/aqtion-presentation/src/main/resources/META-INF/spring.factories +2 -0
  175. package/aqtion/backend/aqtion-presentation/src/main/resources/banner.txt +3 -0
  176. package/aqtion/backend/aqtion-presentation/src/main/resources/logback-spring-ci.xml +15 -0
  177. package/aqtion/backend/aqtion-presentation/src/main/resources/logback-spring.xml +15 -0
  178. package/aqtion/backend/aqtion-presentation/src/main/resources-filtered/application-prod.yml +80 -0
  179. package/aqtion/backend/aqtion-presentation/src/main/resources-filtered/application.yml +94 -0
  180. package/aqtion/backend/aqtion-presentation/src/test/java/fr/cerema/dsi/aqtion/service/IntegrationTest.java +18 -0
  181. package/aqtion/backend/aqtion-presentation/src/test/resources/application.yml +41 -0
  182. package/aqtion/backend/aqtion-presentation/src/test/resources/db.migration/Readme.md +6 -0
  183. package/aqtion/backend/aqtion-presentation/target/generated-sources/annotations/fr/cerema/dsi/aqtion/mapper/UserMapperImpl.java +134 -0
  184. package/aqtion/backend/aqtion-presentation/target/maven-archiver/pom.properties +3 -0
  185. package/aqtion/backend/aqtion-presentation/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +25 -0
  186. package/aqtion/backend/aqtion-presentation/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +23 -0
  187. package/aqtion/backend/aqtion-presentation/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst +1 -0
  188. package/aqtion/backend/aqtion-presentation/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +1 -0
  189. package/aqtion/backend/aqtion-transverse/pom.xml +22 -0
  190. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/aqtion/entities/Profil.java +53 -0
  191. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/aqtion/entities/User.java +79 -0
  192. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/aqtion/enums/Role.java +8 -0
  193. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/aqtion/exceptions/JwtConfMalformedException.java +9 -0
  194. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/aqtion/exceptions/security/AuthenticationServiceException.java +30 -0
  195. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/aqtion/exceptions/security/NoRoleForUserServiceException.java +29 -0
  196. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/aqtion/exceptions/security/UserNotFoundServiceException.java +29 -0
  197. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/commons/entities/GenericEntity.java +43 -0
  198. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/BadRequestException.java +43 -0
  199. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/EntityNotFoundException.java +9 -0
  200. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/GenericRepositoryException.java +29 -0
  201. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/GenericServiceException.java +29 -0
  202. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/UserNotFoundException.java +11 -0
  203. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/UtilsException.java +13 -0
  204. package/aqtion/backend/aqtion-transverse/target/maven-archiver/pom.properties +3 -0
  205. package/aqtion/backend/aqtion-transverse/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +15 -0
  206. package/aqtion/backend/aqtion-transverse/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +14 -0
  207. package/aqtion/backend/mvnw +311 -0
  208. package/aqtion/backend/mvnw.cmd +182 -0
  209. package/aqtion/backend/pom.xml +144 -0
  210. package/aqtion/banner.png +0 -0
  211. package/aqtion/bun.lockb +0 -0
  212. package/aqtion/docker/config/keycloak/realms/export/realm.json +63 -0
  213. package/aqtion/docker/config/keycloak/themes/README.txt +3 -0
  214. package/aqtion/docker/config/keycloak/themes/base/account/account.ftl +70 -0
  215. package/aqtion/docker/config/keycloak/themes/base/account/applications.ftl +76 -0
  216. package/aqtion/docker/config/keycloak/themes/base/account/federatedIdentity.ftl +42 -0
  217. package/aqtion/docker/config/keycloak/themes/base/account/log.ftl +35 -0
  218. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_ca.properties +147 -0
  219. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_cs.properties +171 -0
  220. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_da.properties +339 -0
  221. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_de.properties +353 -0
  222. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_en.properties +397 -0
  223. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_es.properties +147 -0
  224. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_fi.properties +400 -0
  225. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_fr.properties +180 -0
  226. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_hu.properties +334 -0
  227. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_it.properties +336 -0
  228. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_ja.properties +335 -0
  229. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_lt.properties +154 -0
  230. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_lv.properties +197 -0
  231. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_nl.properties +133 -0
  232. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_no.properties +152 -0
  233. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_pl.properties +248 -0
  234. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_pt_BR.properties +356 -0
  235. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_ru.properties +155 -0
  236. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_sk.properties +196 -0
  237. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_sv.properties +150 -0
  238. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_tr.properties +315 -0
  239. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_zh_CN.properties +153 -0
  240. package/aqtion/docker/config/keycloak/themes/base/account/password.ftl +59 -0
  241. package/aqtion/docker/config/keycloak/themes/base/account/resource-detail.ftl +277 -0
  242. package/aqtion/docker/config/keycloak/themes/base/account/resources.ftl +403 -0
  243. package/aqtion/docker/config/keycloak/themes/base/account/sessions.ftl +44 -0
  244. package/aqtion/docker/config/keycloak/themes/base/account/template.ftl +88 -0
  245. package/aqtion/docker/config/keycloak/themes/base/account/theme.properties +1 -0
  246. package/aqtion/docker/config/keycloak/themes/base/account/totp.ftl +141 -0
  247. package/aqtion/docker/config/keycloak/themes/base/admin/index.ftl +99 -0
  248. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_ca.properties +477 -0
  249. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_de.properties +1627 -0
  250. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_en.properties +2030 -0
  251. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_es.properties +479 -0
  252. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_fi.properties +1 -0
  253. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_fr.properties +155 -0
  254. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_it.properties +0 -0
  255. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_ja.properties +1641 -0
  256. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_lt.properties +1221 -0
  257. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_lv.properties +1 -0
  258. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_nl.properties +0 -0
  259. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_no.properties +1129 -0
  260. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_pl.properties +1 -0
  261. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_pt_BR.properties +1101 -0
  262. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_ru.properties +1279 -0
  263. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_zh_CN.properties +1230 -0
  264. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_ca.properties +8 -0
  265. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_de.properties +29 -0
  266. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_en.properties +67 -0
  267. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_es.properties +8 -0
  268. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_fi.properties +1 -0
  269. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_fr.properties +8 -0
  270. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_it.properties +0 -0
  271. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_ja.properties +30 -0
  272. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_lt.properties +25 -0
  273. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_lv.properties +1 -0
  274. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_nl.properties +27 -0
  275. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_no.properties +14 -0
  276. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_pl.properties +1 -0
  277. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_pt_BR.properties +18 -0
  278. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_ru.properties +26 -0
  279. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_zh_CN.properties +26 -0
  280. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/app.js +3858 -0
  281. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/authz/authz-app.js +569 -0
  282. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/authz/authz-controller.js +2845 -0
  283. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/authz/authz-services.js +218 -0
  284. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/controllers/clients.js +4054 -0
  285. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/controllers/groups.js +625 -0
  286. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/controllers/realm.js +4552 -0
  287. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/controllers/roles.js +48 -0
  288. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/controllers/users.js +2042 -0
  289. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/loaders.js +587 -0
  290. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/services.js +2265 -0
  291. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authentication-flow-bindings.html +83 -0
  292. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authentication-flows.html +72 -0
  293. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authenticator-config.html +52 -0
  294. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/mgmt/broker-permissions.html +40 -0
  295. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/mgmt/client-permissions.html +39 -0
  296. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/mgmt/client-role-permissions.html +40 -0
  297. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/mgmt/group-permissions.html +39 -0
  298. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/mgmt/realm-role-permissions.html +39 -0
  299. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/mgmt/users-permissions.html +35 -0
  300. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/permission/provider/resource-server-policy-resource-detail.html +131 -0
  301. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/permission/provider/resource-server-policy-scope-detail.html +137 -0
  302. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/permission/resource-server-permission-list.html +118 -0
  303. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-aggregate-detail.html +123 -0
  304. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-client-detail.html +93 -0
  305. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-client-scope-detail.html +126 -0
  306. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-group-detail.html +126 -0
  307. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-js-detail.html +68 -0
  308. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-regex-detail.html +100 -0
  309. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-role-detail.html +169 -0
  310. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-time-detail.html +119 -0
  311. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-user-detail.html +93 -0
  312. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-evaluate-result.html +72 -0
  313. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-evaluate.html +267 -0
  314. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-list.html +117 -0
  315. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/resource-server-detail.html +77 -0
  316. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/resource-server-export-settings.html +35 -0
  317. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/resource-server-list.html +49 -0
  318. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/resource-server-resource-detail.html +126 -0
  319. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/resource-server-resource-list.html +169 -0
  320. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/resource-server-scope-detail.html +50 -0
  321. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/resource-server-scope-list.html +102 -0
  322. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/brute-force.html +114 -0
  323. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/ciba-policy.html +63 -0
  324. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/claims.html +62 -0
  325. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-clustering-node.html +37 -0
  326. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-clustering.html +76 -0
  327. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-credentials-generic.html +14 -0
  328. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-credentials-jwt.html +26 -0
  329. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-credentials-secret-jwt.html +55 -0
  330. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-credentials-secret.html +33 -0
  331. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-credentials-x509.html +28 -0
  332. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-credentials.html +38 -0
  333. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-detail.html +1080 -0
  334. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-import.html +46 -0
  335. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-initial-access-create.html +63 -0
  336. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-initial-access.html +55 -0
  337. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-installation.html +36 -0
  338. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-keys.html +146 -0
  339. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-list.html +68 -0
  340. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-mappers-add.html +53 -0
  341. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-mappers.html +55 -0
  342. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-offline-sessions.html +59 -0
  343. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-oidc-key-export.html +57 -0
  344. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-oidc-key-import.html +62 -0
  345. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-oidc-keys.html +108 -0
  346. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-json.html +60 -0
  347. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-list.html +74 -0
  348. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-policy-edit-condition.html +65 -0
  349. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-policy-edit.html +140 -0
  350. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-profiles-edit-executor.html +65 -0
  351. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-profiles-edit.html +97 -0
  352. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-profiles-json.html +60 -0
  353. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-profiles-list.html +80 -0
  354. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-protocol-mapper-detail.html +13 -0
  355. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-reg-policies.html +106 -0
  356. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-reg-policy-detail.html +68 -0
  357. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-reg-trusted-host-create.html +55 -0
  358. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-reg-trusted-host-detail.html +64 -0
  359. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-registration-access-token.html +18 -0
  360. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-revocation.html +30 -0
  361. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-role-attributes.html +45 -0
  362. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-role-detail.html +140 -0
  363. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-role-list.html +64 -0
  364. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-role-users.html +52 -0
  365. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-saml-key-export.html +63 -0
  366. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-saml-key-import.html +62 -0
  367. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-saml-keys.html +66 -0
  368. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scope-detail.html +102 -0
  369. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scope-list.html +60 -0
  370. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scope-mappers-add.html +53 -0
  371. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scope-mappers.html +55 -0
  372. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scope-mappings.html +127 -0
  373. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scope-protocol-mapper-detail.html +13 -0
  374. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scope-scope-mappings.html +116 -0
  375. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scopes-evaluate.html +268 -0
  376. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scopes-realm-default.html +99 -0
  377. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scopes-setup.html +123 -0
  378. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-service-account-roles.html +140 -0
  379. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-sessions.html +57 -0
  380. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-storage-generic.html +207 -0
  381. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-storage-list.html +67 -0
  382. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/create-client.html +72 -0
  383. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/create-execution.html +31 -0
  384. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/create-flow-execution.html +55 -0
  385. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/create-flow.html +43 -0
  386. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/create-group.html +25 -0
  387. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/default-groups.html +91 -0
  388. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/defense-headers.html +71 -0
  389. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/forbidden.html +7 -0
  390. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/group-attributes.html +41 -0
  391. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/group-detail.html +28 -0
  392. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/group-list.html +50 -0
  393. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/group-members.html +48 -0
  394. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/group-role-mappings.html +111 -0
  395. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/home.html +4 -0
  396. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/identity-provider-mapper-detail.html +84 -0
  397. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/identity-provider-mappers.html +49 -0
  398. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/menu.html +26 -0
  399. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/group-selector.html +50 -0
  400. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/realm-events-admin-auth.html +8 -0
  401. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/realm-events-admin-representation.html +3 -0
  402. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/role-selector.html +39 -0
  403. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/unregistered-required-action-selector.html +21 -0
  404. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/user-credential-data.html +8 -0
  405. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/view-key.html +18 -0
  406. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/view-object.html +3 -0
  407. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/notfound.html +7 -0
  408. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/otp-policy.html +96 -0
  409. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/pagenotfound.html +7 -0
  410. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/partial-export.html +34 -0
  411. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/partial-import.html +130 -0
  412. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/password-policy.html +51 -0
  413. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/protocol-mapper-detail.html +64 -0
  414. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-cache-settings.html +30 -0
  415. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-create.html +45 -0
  416. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-default-roles.html +88 -0
  417. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-detail.html +90 -0
  418. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-events-admin.html +134 -0
  419. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-events-config.html +106 -0
  420. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-events.html +124 -0
  421. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-bitbucket.html +142 -0
  422. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-facebook-ext.html +7 -0
  423. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-facebook.html +1 -0
  424. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-github-ext.html +14 -0
  425. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-github.html +1 -0
  426. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-gitlab.html +142 -0
  427. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-google-ext.html +21 -0
  428. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-google.html +1 -0
  429. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-instagram-ext.html +0 -0
  430. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-instagram.html +1 -0
  431. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-keycloak-oidc.html +1 -0
  432. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-linkedin-ext.html +0 -0
  433. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-linkedin.html +1 -0
  434. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-microsoft-ext.html +0 -0
  435. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-microsoft.html +1 -0
  436. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-oidc.html +388 -0
  437. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v3-ext.html +7 -0
  438. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v3.html +164 -0
  439. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v4-ext.html +7 -0
  440. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v4.html +164 -0
  441. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-paypal-ext.html +7 -0
  442. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-paypal.html +1 -0
  443. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-saml.html +435 -0
  444. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-social.html +157 -0
  445. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-stackoverflow-ext.html +7 -0
  446. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-stackoverflow.html +1 -0
  447. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-twitter-ext.html +0 -0
  448. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-twitter.html +1 -0
  449. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider.html +81 -0
  450. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-keys-disabled.html +70 -0
  451. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-keys-generic.html +69 -0
  452. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-keys-passive.html +70 -0
  453. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-keys-providers.html +75 -0
  454. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-keys.html +73 -0
  455. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-list.html +20 -0
  456. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-localization-detail.html +50 -0
  457. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-localization-upload.html +37 -0
  458. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-localization.html +61 -0
  459. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-login-settings.html +107 -0
  460. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-role-users.html +50 -0
  461. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-smtp.html +96 -0
  462. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-theme-settings.html +97 -0
  463. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-tokens.html +401 -0
  464. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-user-profile.html +372 -0
  465. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/required-actions.html +38 -0
  466. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/role-attributes.html +41 -0
  467. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/role-detail.html +135 -0
  468. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/role-list.html +63 -0
  469. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/role-mappings.html +119 -0
  470. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/server-info-providers.html +55 -0
  471. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/server-info.html +135 -0
  472. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/session-realm.html +34 -0
  473. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/session-revocation.html +30 -0
  474. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-attributes.html +41 -0
  475. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-consents.html +41 -0
  476. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-credentials.html +173 -0
  477. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-detail.html +186 -0
  478. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-federated-identity-detail.html +53 -0
  479. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-federated-identity-list.html +41 -0
  480. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-federation.html +69 -0
  481. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-group-membership.html +114 -0
  482. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-list.html +69 -0
  483. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-offline-sessions.html +35 -0
  484. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-sessions.html +43 -0
  485. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-storage-generic.html +246 -0
  486. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-storage-kerberos.html +264 -0
  487. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-storage-ldap-mapper-detail.html +64 -0
  488. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-storage-ldap-mappers.html +46 -0
  489. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-storage-ldap.html +568 -0
  490. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-storage.html +45 -0
  491. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/webauthn-policy-passwordless.html +177 -0
  492. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/webauthn-policy.html +159 -0
  493. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/authz/kc-authz-modal.html +11 -0
  494. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/authz/kc-tabs-resource-server.html +14 -0
  495. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-component-config.html +67 -0
  496. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-copy.html +18 -0
  497. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-dropdown.html +12 -0
  498. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-edit.html +22 -0
  499. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-menu.html +65 -0
  500. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-modal-message.html +10 -0
  501. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-modal.html +11 -0
  502. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-paging.html +25 -0
  503. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-provider-config.html +104 -0
  504. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-switch.html +12 -0
  505. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-authentication.html +16 -0
  506. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-client-role.html +17 -0
  507. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-client-scope.html +20 -0
  508. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-client.html +65 -0
  509. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-clients.html +16 -0
  510. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-group-list.html +11 -0
  511. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-group.html +17 -0
  512. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-identity-provider.html +16 -0
  513. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-ldap.html +12 -0
  514. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-realm.html +24 -0
  515. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-role.html +16 -0
  516. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-user-storage.html +11 -0
  517. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-user.html +18 -0
  518. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-users.html +11 -0
  519. package/aqtion/docker/config/keycloak/themes/base/admin/theme.properties +1 -0
  520. package/aqtion/docker/config/keycloak/themes/base/email/html/email-test.ftl +4 -0
  521. package/aqtion/docker/config/keycloak/themes/base/email/html/email-update-confirmation.ftl +5 -0
  522. package/aqtion/docker/config/keycloak/themes/base/email/html/email-verification-with-code.ftl +4 -0
  523. package/aqtion/docker/config/keycloak/themes/base/email/html/email-verification.ftl +4 -0
  524. package/aqtion/docker/config/keycloak/themes/base/email/html/event-login_error.ftl +4 -0
  525. package/aqtion/docker/config/keycloak/themes/base/email/html/event-remove_totp.ftl +4 -0
  526. package/aqtion/docker/config/keycloak/themes/base/email/html/event-update_password.ftl +4 -0
  527. package/aqtion/docker/config/keycloak/themes/base/email/html/event-update_totp.ftl +4 -0
  528. package/aqtion/docker/config/keycloak/themes/base/email/html/executeActions.ftl +8 -0
  529. package/aqtion/docker/config/keycloak/themes/base/email/html/identity-provider-link.ftl +4 -0
  530. package/aqtion/docker/config/keycloak/themes/base/email/html/password-reset.ftl +4 -0
  531. package/aqtion/docker/config/keycloak/themes/base/email/html/template.ftl +7 -0
  532. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_ca.properties +21 -0
  533. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_cs.properties +60 -0
  534. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_da.properties +47 -0
  535. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_de.properties +43 -0
  536. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_en.properties +55 -0
  537. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_es.properties +21 -0
  538. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_fi.properties +46 -0
  539. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_fr.properties +46 -0
  540. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_hu.properties +47 -0
  541. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_it.properties +50 -0
  542. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_ja.properties +52 -0
  543. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_lt.properties +25 -0
  544. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_nl.properties +38 -0
  545. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_no.properties +24 -0
  546. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_pl.properties +56 -0
  547. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_pt_BR.properties +51 -0
  548. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_ru.properties +25 -0
  549. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_sk.properties +48 -0
  550. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_sv.properties +25 -0
  551. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_tr.properties +51 -0
  552. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_zh_CN.properties +25 -0
  553. package/aqtion/docker/config/keycloak/themes/base/email/text/email-test.ftl +2 -0
  554. package/aqtion/docker/config/keycloak/themes/base/email/text/email-update-confirmation.ftl +2 -0
  555. package/aqtion/docker/config/keycloak/themes/base/email/text/email-verification-with-code.ftl +2 -0
  556. package/aqtion/docker/config/keycloak/themes/base/email/text/email-verification.ftl +2 -0
  557. package/aqtion/docker/config/keycloak/themes/base/email/text/event-login_error.ftl +2 -0
  558. package/aqtion/docker/config/keycloak/themes/base/email/text/event-remove_totp.ftl +2 -0
  559. package/aqtion/docker/config/keycloak/themes/base/email/text/event-update_password.ftl +2 -0
  560. package/aqtion/docker/config/keycloak/themes/base/email/text/event-update_totp.ftl +2 -0
  561. package/aqtion/docker/config/keycloak/themes/base/email/text/executeActions.ftl +4 -0
  562. package/aqtion/docker/config/keycloak/themes/base/email/text/identity-provider-link.ftl +2 -0
  563. package/aqtion/docker/config/keycloak/themes/base/email/text/password-reset.ftl +2 -0
  564. package/aqtion/docker/config/keycloak/themes/base/email/theme.properties +1 -0
  565. package/aqtion/docker/config/keycloak/themes/base/login/cli_splash.ftl +7 -0
  566. package/aqtion/docker/config/keycloak/themes/base/login/code.ftl +19 -0
  567. package/aqtion/docker/config/keycloak/themes/base/login/delete-account-confirm.ftl +33 -0
  568. package/aqtion/docker/config/keycloak/themes/base/login/error.ftl +16 -0
  569. package/aqtion/docker/config/keycloak/themes/base/login/frontchannel-logout.ftl +30 -0
  570. package/aqtion/docker/config/keycloak/themes/base/login/idp-review-user-profile.ftl +23 -0
  571. package/aqtion/docker/config/keycloak/themes/base/login/info.ftl +24 -0
  572. package/aqtion/docker/config/keycloak/themes/base/login/login-config-totp.ftl +108 -0
  573. package/aqtion/docker/config/keycloak/themes/base/login/login-idp-link-confirm.ftl +13 -0
  574. package/aqtion/docker/config/keycloak/themes/base/login/login-idp-link-email.ftl +16 -0
  575. package/aqtion/docker/config/keycloak/themes/base/login/login-oauth-grant.ftl +68 -0
  576. package/aqtion/docker/config/keycloak/themes/base/login/login-oauth2-device-verify-user-code.ftl +31 -0
  577. package/aqtion/docker/config/keycloak/themes/base/login/login-otp.ftl +58 -0
  578. package/aqtion/docker/config/keycloak/themes/base/login/login-page-expired.ftl +11 -0
  579. package/aqtion/docker/config/keycloak/themes/base/login/login-password.ftl +43 -0
  580. package/aqtion/docker/config/keycloak/themes/base/login/login-recovery-authn-code-config.ftl +184 -0
  581. package/aqtion/docker/config/keycloak/themes/base/login/login-recovery-authn-code-input.ftl +32 -0
  582. package/aqtion/docker/config/keycloak/themes/base/login/login-reset-password.ftl +39 -0
  583. package/aqtion/docker/config/keycloak/themes/base/login/login-update-password.ftl +71 -0
  584. package/aqtion/docker/config/keycloak/themes/base/login/login-update-profile.ftl +99 -0
  585. package/aqtion/docker/config/keycloak/themes/base/login/login-username.ftl +87 -0
  586. package/aqtion/docker/config/keycloak/themes/base/login/login-verify-email.ftl +14 -0
  587. package/aqtion/docker/config/keycloak/themes/base/login/login-x509-info.ftl +55 -0
  588. package/aqtion/docker/config/keycloak/themes/base/login/login.ftl +105 -0
  589. package/aqtion/docker/config/keycloak/themes/base/login/logout-confirm.ftl +38 -0
  590. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_ca.properties +200 -0
  591. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_cs.properties +425 -0
  592. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_da.properties +363 -0
  593. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_de.properties +420 -0
  594. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_en.properties +501 -0
  595. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_es.properties +201 -0
  596. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_fi.properties +443 -0
  597. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_fr.properties +405 -0
  598. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_hu.properties +356 -0
  599. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_it.properties +354 -0
  600. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_ja.properties +356 -0
  601. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_lt.properties +216 -0
  602. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_lv.properties +254 -0
  603. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_nl.properties +294 -0
  604. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_no.properties +214 -0
  605. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_pl.properties +318 -0
  606. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_pt_BR.properties +381 -0
  607. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_ru.properties +217 -0
  608. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_sk.properties +265 -0
  609. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_sv.properties +214 -0
  610. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_tr.properties +296 -0
  611. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_zh_CN.properties +216 -0
  612. package/aqtion/docker/config/keycloak/themes/base/login/register-user-profile.ftl +74 -0
  613. package/aqtion/docker/config/keycloak/themes/base/login/register.ftl +141 -0
  614. package/aqtion/docker/config/keycloak/themes/base/login/resources/js/base64url.js +114 -0
  615. package/aqtion/docker/config/keycloak/themes/base/login/saml-post-form.ftl +25 -0
  616. package/aqtion/docker/config/keycloak/themes/base/login/select-authenticator.ftl +43 -0
  617. package/aqtion/docker/config/keycloak/themes/base/login/template.ftl +154 -0
  618. package/aqtion/docker/config/keycloak/themes/base/login/terms.ftl +15 -0
  619. package/aqtion/docker/config/keycloak/themes/base/login/theme.properties +1 -0
  620. package/aqtion/docker/config/keycloak/themes/base/login/update-email.ftl +42 -0
  621. package/aqtion/docker/config/keycloak/themes/base/login/update-user-profile.ftl +28 -0
  622. package/aqtion/docker/config/keycloak/themes/base/login/user-profile-commons.ftl +187 -0
  623. package/aqtion/docker/config/keycloak/themes/base/login/webauthn-authenticate.ftl +168 -0
  624. package/aqtion/docker/config/keycloak/themes/base/login/webauthn-error.ftl +36 -0
  625. package/aqtion/docker/config/keycloak/themes/base/login/webauthn-register.ftl +192 -0
  626. package/aqtion/docker/config/keycloak/themes/cerema/account/account.ftl +93 -0
  627. package/aqtion/docker/config/keycloak/themes/cerema/account/messages/messages_fr.properties +1 -0
  628. package/aqtion/docker/config/keycloak/themes/cerema/account/resources/css/account.css +292 -0
  629. package/aqtion/docker/config/keycloak/themes/cerema/account/resources/img/favicon.ico +0 -0
  630. package/aqtion/docker/config/keycloak/themes/cerema/account/resources/img/icon-sidebar-active.png +0 -0
  631. package/aqtion/docker/config/keycloak/themes/cerema/account/resources/img/keycloak-logo.png +0 -0
  632. package/aqtion/docker/config/keycloak/themes/cerema/account/resources/img/logo.png +0 -0
  633. package/aqtion/docker/config/keycloak/themes/cerema/account/theme.properties +11 -0
  634. package/aqtion/docker/config/keycloak/themes/cerema/admin/resources/css/styles.css +420 -0
  635. package/aqtion/docker/config/keycloak/themes/cerema/admin/resources/img/favicon.ico +0 -0
  636. package/aqtion/docker/config/keycloak/themes/cerema/admin/resources/img/keyclok-logo.png +0 -0
  637. package/aqtion/docker/config/keycloak/themes/cerema/admin/resources/img/keyclok-logo.svg +215 -0
  638. package/aqtion/docker/config/keycloak/themes/cerema/admin/resources/img/select-arrow.png +0 -0
  639. package/aqtion/docker/config/keycloak/themes/cerema/admin/theme.properties +3 -0
  640. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/errors.json +150 -0
  641. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/LICENSE +20 -0
  642. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/README.md +128 -0
  643. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/angular.treeview.js +97 -0
  644. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/angular.treeview.min.js +9 -0
  645. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/css/angular.treeview.css +99 -0
  646. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/img/file.png +0 -0
  647. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/img/folder-closed.png +0 -0
  648. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/img/folder.png +0 -0
  649. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/ui-bootstrap-tpls-0.11.0.js +4172 -0
  650. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/version.json +22 -0
  651. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/components/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  652. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/components/font-awesome/fonts/fontawesome-webfont.svg +1085 -0
  653. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/components/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  654. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/components/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  655. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/components/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
  656. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/filesaver/FileSaver.js +189 -0
  657. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/fileupload/FileAPI.min.js +72 -0
  658. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/fileupload/angular-file-upload-html5-shim.js +25 -0
  659. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/fileupload/angular-file-upload-html5-shim.min.js +2 -0
  660. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/fileupload/angular-file-upload-shim.js +237 -0
  661. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/fileupload/angular-file-upload-shim.min.js +2 -0
  662. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/fileupload/angular-file-upload.js +156 -0
  663. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/fileupload/angular-file-upload.min.js +2 -0
  664. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/css/patternfly.css +14320 -0
  665. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Bold-webfont.eot +0 -0
  666. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Bold-webfont.svg +2014 -0
  667. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Bold-webfont.ttf +0 -0
  668. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Bold-webfont.woff +0 -0
  669. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  670. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-BoldItalic-webfont.svg +2019 -0
  671. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-BoldItalic-webfont.ttf +0 -0
  672. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  673. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBold-webfont.eot +0 -0
  674. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBold-webfont.svg +2016 -0
  675. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBold-webfont.ttf +0 -0
  676. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBold-webfont.woff +0 -0
  677. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBoldItalic-webfont.eot +0 -0
  678. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBoldItalic-webfont.svg +2024 -0
  679. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBoldItalic-webfont.ttf +0 -0
  680. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBoldItalic-webfont.woff +0 -0
  681. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Italic-webfont.eot +0 -0
  682. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Italic-webfont.svg +2019 -0
  683. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Italic-webfont.ttf +0 -0
  684. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Italic-webfont.woff +0 -0
  685. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Light-webfont.eot +0 -0
  686. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Light-webfont.svg +2013 -0
  687. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Light-webfont.ttf +0 -0
  688. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Light-webfont.woff +0 -0
  689. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  690. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-LightItalic-webfont.svg +2021 -0
  691. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-LightItalic-webfont.ttf +0 -0
  692. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  693. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Regular-webfont.eot +0 -0
  694. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Regular-webfont.svg +2017 -0
  695. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Regular-webfont.ttf +0 -0
  696. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Regular-webfont.woff +0 -0
  697. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Semibold-webfont.eot +0 -0
  698. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Semibold-webfont.svg +2015 -0
  699. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  700. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Semibold-webfont.woff +0 -0
  701. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  702. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-SemiboldItalic-webfont.svg +2019 -0
  703. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  704. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  705. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/PatternFlyIcons-webfont.eot +0 -0
  706. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/PatternFlyIcons-webfont.svg +133 -0
  707. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/PatternFlyIcons-webfont.ttf +0 -0
  708. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/PatternFlyIcons-webfont.woff +0 -0
  709. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/apple-touch-icon-114-precomposed.png +0 -0
  710. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/apple-touch-icon-144-precomposed.png +0 -0
  711. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/apple-touch-icon-57-precomposed.png +0 -0
  712. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/apple-touch-icon-72-precomposed.png +0 -0
  713. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/bg-login.jpg +0 -0
  714. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/spinner-lg.gif +0 -0
  715. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/spinner-sm.gif +0 -0
  716. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/spinner-xs.gif +0 -0
  717. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/spinner.gif +0 -0
  718. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/ace.js +18957 -0
  719. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/min/ace.js +7950 -0
  720. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/min/mode-javascript.js +1 -0
  721. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/min/theme-github.js +1 -0
  722. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/min/worker-javascript.js +1 -0
  723. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/mode-javascript.js +1140 -0
  724. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/theme-github.js +103 -0
  725. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/ui-ace.js +327 -0
  726. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/ui-ace.min.js +7 -0
  727. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/worker-javascript.js +12651 -0
  728. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/zocial/zocial-regular-webfont.eot +0 -0
  729. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/zocial/zocial-regular-webfont.svg +1108 -0
  730. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/zocial/zocial-regular-webfont.ttf +0 -0
  731. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/zocial/zocial-regular-webfont.woff +0 -0
  732. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/zocial/zocial.css +1215 -0
  733. package/aqtion/docker/config/keycloak/themes/cerema/email/html/email-verification.ftl +4 -0
  734. package/aqtion/docker/config/keycloak/themes/cerema/email/html/template.ftl +7 -0
  735. package/aqtion/docker/config/keycloak/themes/cerema/email/messages/messages_en.properties +9 -0
  736. package/aqtion/docker/config/keycloak/themes/cerema/email/messages/messages_fr.properties +9 -0
  737. package/aqtion/docker/config/keycloak/themes/cerema/email/theme.properties +1 -0
  738. package/aqtion/docker/config/keycloak/themes/cerema/login/login-oauth-grant.ftl +57 -0
  739. package/aqtion/docker/config/keycloak/themes/cerema/login/login-reset-password.ftl +32 -0
  740. package/aqtion/docker/config/keycloak/themes/cerema/login/login.ftl +87 -0
  741. package/aqtion/docker/config/keycloak/themes/cerema/login/messages/messages_fr.properties +29 -0
  742. package/aqtion/docker/config/keycloak/themes/cerema/login/register.ftl +169 -0
  743. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/css/bamboo.css +238 -0
  744. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/css/main.css +1029 -0
  745. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/css/util.css +9826 -0
  746. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Linearicons-Free-v1.0.0/WebFont/Linearicons-Free.eot +0 -0
  747. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Linearicons-Free-v1.0.0/WebFont/Linearicons-Free.svg +541 -0
  748. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Linearicons-Free-v1.0.0/WebFont/Linearicons-Free.ttf +0 -0
  749. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Linearicons-Free-v1.0.0/WebFont/Linearicons-Free.woff +0 -0
  750. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Linearicons-Free-v1.0.0/WebFont/Linearicons-Free.woff2 +0 -0
  751. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Linearicons-Free-v1.0.0/icon-font.min.css +7 -0
  752. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/OFL.txt +95 -0
  753. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-Black.ttf +0 -0
  754. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-BlackItalic.ttf +0 -0
  755. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-Bold.ttf +0 -0
  756. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-BoldItalic.ttf +0 -0
  757. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-ExtraBold.ttf +0 -0
  758. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-ExtraBoldItalic.ttf +0 -0
  759. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-ExtraLight.ttf +0 -0
  760. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-ExtraLightItalic.ttf +0 -0
  761. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-Italic.ttf +0 -0
  762. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-Light.ttf +0 -0
  763. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-LightItalic.ttf +0 -0
  764. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-Medium.ttf +0 -0
  765. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-MediumItalic.ttf +0 -0
  766. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-Regular.ttf +0 -0
  767. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-SemiBold.ttf +0 -0
  768. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-SemiBoldItalic.ttf +0 -0
  769. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-Thin.ttf +0 -0
  770. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-ThinItalic.ttf +0 -0
  771. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/SIL Open Font License.txt +155 -0
  772. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-Black.otf +0 -0
  773. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-Bold.otf +0 -0
  774. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-BoldItalic.otf +0 -0
  775. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-BoldUpright.otf +0 -0
  776. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-Light.otf +0 -0
  777. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-LightItalic.otf +0 -0
  778. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-LightUpright.otf +0 -0
  779. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-Regular.otf +0 -0
  780. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-RegularItalic.otf +0 -0
  781. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-RegularUpright.otf +0 -0
  782. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-Semibold.otf +0 -0
  783. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-SemiboldItalic.otf +0 -0
  784. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-SemiboldUpright.otf +0 -0
  785. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-Thin.otf +0 -0
  786. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-ThinItalic.otf +0 -0
  787. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-ThinUpright.otf +0 -0
  788. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/HELP-US-OUT.txt +7 -0
  789. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/css/font-awesome.css +3049 -0
  790. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/css/font-awesome.min.css +4 -0
  791. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/fonts/FontAwesome.otf +0 -0
  792. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.eot +0 -0
  793. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.svg +2672 -0
  794. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf +0 -0
  795. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.woff +0 -0
  796. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 +0 -0
  797. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/animated.less +34 -0
  798. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/bordered-pulled.less +45 -0
  799. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/core.less +12 -0
  800. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/fixed-width.less +6 -0
  801. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/font-awesome.less +18 -0
  802. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/icons.less +2813 -0
  803. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/larger.less +25 -0
  804. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/list.less +24 -0
  805. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/mixins.less +60 -0
  806. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/path.less +15 -0
  807. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/rotated-flipped.less +33 -0
  808. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/screen-reader.less +10 -0
  809. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/stacked.less +30 -0
  810. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/variables.less +800 -0
  811. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_animated.scss +34 -0
  812. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_bordered-pulled.scss +45 -0
  813. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_core.scss +12 -0
  814. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_fixed-width.scss +6 -0
  815. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_icons.scss +2813 -0
  816. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_larger.scss +25 -0
  817. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_list.scss +24 -0
  818. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_mixins.scss +60 -0
  819. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_path.scss +15 -0
  820. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_rotated-flipped.scss +33 -0
  821. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_screen-reader.scss +10 -0
  822. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_stacked.scss +30 -0
  823. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_variables.scss +800 -0
  824. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/font-awesome.scss +18 -0
  825. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-Black.ttf +0 -0
  826. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-BlackItalic.ttf +0 -0
  827. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-Bold.ttf +0 -0
  828. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-BoldItalic.ttf +0 -0
  829. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-ExtraBold.ttf +0 -0
  830. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-ExtraBoldItalic.ttf +0 -0
  831. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-ExtraLight.ttf +0 -0
  832. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-ExtraLightItalic.ttf +0 -0
  833. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-Italic.ttf +0 -0
  834. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-Light.ttf +0 -0
  835. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-LightItalic.ttf +0 -0
  836. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-Medium.ttf +0 -0
  837. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-MediumItalic.ttf +0 -0
  838. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-Regular.ttf +0 -0
  839. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-SemiBold.ttf +0 -0
  840. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-SemiBoldItalic.ttf +0 -0
  841. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-Thin.ttf +0 -0
  842. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-ThinItalic.ttf +0 -0
  843. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/OFL.txt +93 -0
  844. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-Black.ttf +0 -0
  845. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-BlackItalic.ttf +0 -0
  846. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-Bold.ttf +0 -0
  847. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-BoldItalic.ttf +0 -0
  848. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-ExtraBold.ttf +0 -0
  849. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-ExtraBoldItalic.ttf +0 -0
  850. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-ExtraLight.ttf +0 -0
  851. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-ExtraLightItalic.ttf +0 -0
  852. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-Italic.ttf +0 -0
  853. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-Light.ttf +0 -0
  854. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-LightItalic.ttf +0 -0
  855. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-Medium.ttf +0 -0
  856. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-MediumItalic.ttf +0 -0
  857. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-Regular.ttf +0 -0
  858. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-SemiBold.ttf +0 -0
  859. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-SemiBoldItalic.ttf +0 -0
  860. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-Thin.ttf +0 -0
  861. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-ThinItalic.ttf +0 -0
  862. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/agentconnect-btn-principal-hover.svg +39 -0
  863. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/agentconnect-btn-principal.svg +39 -0
  864. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/bg-01.jpg +0 -0
  865. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/bg-02.jpg +0 -0
  866. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/franceconnect-btn-hover.svg +13 -0
  867. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/franceconnect-btn.svg +13 -0
  868. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/icons/favicon.ico +0 -0
  869. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/logo.png +0 -0
  870. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/white_logo.png +0 -0
  871. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/js/bamboo.js +950 -0
  872. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/js/main.js +73 -0
  873. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/vendor/jquery/jquery-3.2.1.min.js +4 -0
  874. package/aqtion/docker/config/keycloak/themes/cerema/login/template.ftl +119 -0
  875. package/aqtion/docker/config/keycloak/themes/cerema/login/theme.properties +94 -0
  876. package/aqtion/docker/config/keycloak/themes/cerema/welcome/index.ftl +141 -0
  877. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/admin-console.png +0 -0
  878. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/alert.png +0 -0
  879. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/bg.png +0 -0
  880. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/bug.png +0 -0
  881. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/css/welcome.css +165 -0
  882. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/favicon.ico +0 -0
  883. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/jboss_community.png +0 -0
  884. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/keycloak-project.png +0 -0
  885. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/keycloak_logo.png +0 -0
  886. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/logo.png +0 -0
  887. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/mail.png +0 -0
  888. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/user.png +0 -0
  889. package/aqtion/docker/config/keycloak/themes/cerema/welcome/theme.properties +4 -0
  890. package/aqtion/docker/config/keycloak/themes/keycloak/account/resources/css/account.css +277 -0
  891. package/aqtion/docker/config/keycloak/themes/keycloak/account/resources/img/icon-sidebar-active.png +0 -0
  892. package/aqtion/docker/config/keycloak/themes/keycloak/account/resources/img/keycloak-logo.png +0 -0
  893. package/aqtion/docker/config/keycloak/themes/keycloak/account/resources/img/logo.png +0 -0
  894. package/aqtion/docker/config/keycloak/themes/keycloak/account/theme.properties +14 -0
  895. package/aqtion/docker/config/keycloak/themes/keycloak/admin/resources/css/styles.css +505 -0
  896. package/aqtion/docker/config/keycloak/themes/keycloak/admin/resources/img/keyclok-logo.png +0 -0
  897. package/aqtion/docker/config/keycloak/themes/keycloak/admin/resources/img/keyclok-logo.svg +194 -0
  898. package/aqtion/docker/config/keycloak/themes/keycloak/admin/resources/img/select-arrow.png +0 -0
  899. package/aqtion/docker/config/keycloak/themes/keycloak/admin/theme.properties +5 -0
  900. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/img/favicon.ico +0 -0
  901. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/errors.json +1 -0
  902. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/treeview/LICENSE +20 -0
  903. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/treeview/angular.treeview.js +95 -0
  904. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/treeview/angular.treeview.min.js +9 -0
  905. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/treeview/css/angular.treeview.css +99 -0
  906. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/treeview/img/file.png +0 -0
  907. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/treeview/img/folder-closed.png +0 -0
  908. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/treeview/img/folder.png +0 -0
  909. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/ui-bootstrap-tpls-0.11.0.js +4116 -0
  910. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/version.json +1 -0
  911. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/filesaver/FileSaver.js +188 -0
  912. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/fileupload/FileAPI.min.js +72 -0
  913. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-html5-shim.js +25 -0
  914. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-html5-shim.min.js +2 -0
  915. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-shim.js +215 -0
  916. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-shim.min.js +2 -0
  917. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload.js +156 -0
  918. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload.min.js +2 -0
  919. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/pficon/pficon.css +21 -0
  920. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/pficon/pficon.woff +0 -0
  921. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/pficon/pficon.woff2 +0 -0
  922. package/aqtion/docker/config/keycloak/themes/keycloak/email/theme.properties +1 -0
  923. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/css/login.css +596 -0
  924. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/feedback-error-arrow-down.png +0 -0
  925. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/feedback-error-sign.png +0 -0
  926. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/feedback-success-arrow-down.png +0 -0
  927. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/feedback-success-sign.png +0 -0
  928. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/feedback-warning-arrow-down.png +0 -0
  929. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/feedback-warning-sign.png +0 -0
  930. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/keycloak-bg.png +0 -0
  931. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/keycloak-logo-text.png +0 -0
  932. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/keycloak-logo.png +0 -0
  933. package/aqtion/docker/config/keycloak/themes/keycloak/login/theme.properties +161 -0
  934. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/index.ftl +132 -0
  935. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/admin-console.png +0 -0
  936. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/alert.png +0 -0
  937. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/bg.png +0 -0
  938. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/bug.png +0 -0
  939. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/css/welcome.css +140 -0
  940. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/keycloak-project.png +0 -0
  941. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/keycloak_logo.png +0 -0
  942. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/logo.png +0 -0
  943. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/mail.png +0 -0
  944. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/user.png +0 -0
  945. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/theme.properties +7 -0
  946. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/index.ftl +295 -0
  947. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_ca.properties +1 -0
  948. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_cs.properties +1 -0
  949. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_da.properties +1 -0
  950. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_de.properties +129 -0
  951. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_en.properties +167 -0
  952. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_es.properties +1 -0
  953. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_fr.properties +44 -0
  954. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_hu.properties +1 -0
  955. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_it.properties +1 -0
  956. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_ja.properties +1 -0
  957. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_lt.properties +1 -0
  958. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_nl.properties +1 -0
  959. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_no.properties +1 -0
  960. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_pl.properties +1 -0
  961. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_pt_BR.properties +121 -0
  962. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_ru.properties +1 -0
  963. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_sk.properties +1 -0
  964. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_sv.properties +1 -0
  965. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_tr.properties +1 -0
  966. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_zh_CN.properties +1 -0
  967. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/App.js +69 -0
  968. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/App.js.map +1 -0
  969. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/ContentPages.js +157 -0
  970. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/ContentPages.js.map +1 -0
  971. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/Main.js +97 -0
  972. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/Main.js.map +1 -0
  973. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/PageHeaderTool.js +29 -0
  974. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/PageHeaderTool.js.map +1 -0
  975. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/PageNav.js +51 -0
  976. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/PageNav.js.map +1 -0
  977. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/PageToolbar.js +60 -0
  978. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/PageToolbar.js.map +1 -0
  979. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/account-service/AccountServiceContext.js +3 -0
  980. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/account-service/AccountServiceContext.js.map +1 -0
  981. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/account-service/account.service.js +149 -0
  982. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/account-service/account.service.js.map +1 -0
  983. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/ContentAlert.js +113 -0
  984. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/ContentAlert.js.map +1 -0
  985. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/ContentPage.js +63 -0
  986. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/ContentPage.js.map +1 -0
  987. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/account-page/AccountPage.js +302 -0
  988. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/account-page/AccountPage.js.map +1 -0
  989. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/aia-page/AppInitiatedActionPage.js +70 -0
  990. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/aia-page/AppInitiatedActionPage.js.map +1 -0
  991. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/applications-page/ApplicationsPage.js +186 -0
  992. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/applications-page/ApplicationsPage.js.map +1 -0
  993. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/authenticator-page/AuthenticatorPage.js +28 -0
  994. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/authenticator-page/AuthenticatorPage.js.map +1 -0
  995. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/device-activity-page/DeviceActivityPage.js +250 -0
  996. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/device-activity-page/DeviceActivityPage.js.map +1 -0
  997. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/forbidden-page/ForbiddenPage.js +36 -0
  998. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/forbidden-page/ForbiddenPage.js.map +1 -0
  999. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/linked-accounts-page/LinkedAccountsPage.js +310 -0
  1000. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/linked-accounts-page/LinkedAccountsPage.js.map +1 -0
  1001. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/AbstractResourceTable.js +40 -0
  1002. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/AbstractResourceTable.js.map +1 -0
  1003. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/EditTheResource.js +120 -0
  1004. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/EditTheResource.js.map +1 -0
  1005. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/MyResourcesPage.js +284 -0
  1006. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/MyResourcesPage.js.map +1 -0
  1007. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionRequest.js +151 -0
  1008. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionRequest.js.map +1 -0
  1009. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionSelect.js +103 -0
  1010. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionSelect.js.map +1 -0
  1011. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ResourcesTable.js +313 -0
  1012. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ResourcesTable.js.map +1 -0
  1013. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ShareTheResource.js +222 -0
  1014. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ShareTheResource.js.map +1 -0
  1015. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/SharedResourcesTable.js +97 -0
  1016. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/SharedResourcesTable.js.map +1 -0
  1017. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/resource-model.js +16 -0
  1018. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/resource-model.js.map +1 -0
  1019. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/page-not-found/PageNotFound.js +31 -0
  1020. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/page-not-found/PageNotFound.js.map +1 -0
  1021. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/signingin-page/SigningInPage.js +350 -0
  1022. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/signingin-page/SigningInPage.js.map +1 -0
  1023. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content.json +60 -0
  1024. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_facebook_transparent.svg +19 -0
  1025. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_github_transparent.svg +16 -0
  1026. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_google_transparent.svg +77 -0
  1027. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_instagram_transparent.svg +23 -0
  1028. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_linkedin_transparent.svg +23 -0
  1029. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_microsoft_transparent.svg +34 -0
  1030. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_openshift_transparent.svg +15 -0
  1031. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_stack_transparent.svg +26 -0
  1032. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_twitter_transparent.svg +19 -0
  1033. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/keycloak-service/KeycloakContext.js +3 -0
  1034. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/keycloak-service/KeycloakContext.js.map +1 -0
  1035. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/keycloak-service/keycloak.service.js +77 -0
  1036. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/keycloak-service/keycloak.service.js.map +1 -0
  1037. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/AIACommand.js +33 -0
  1038. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/AIACommand.js.map +1 -0
  1039. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/ParseLink.js +19 -0
  1040. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/ParseLink.js.map +1 -0
  1041. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/RedirectUri.js +39 -0
  1042. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/RedirectUri.js.map +1 -0
  1043. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/TimeUtil.js +50 -0
  1044. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/TimeUtil.js.map +1 -0
  1045. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/welcome-page-scripts.js +89 -0
  1046. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/ContinueCancelModal.js +103 -0
  1047. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/ContinueCancelModal.js.map +1 -0
  1048. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/EmptyMessageState.js +38 -0
  1049. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/EmptyMessageState.js.map +1 -0
  1050. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/LocaleSelectors.js +41 -0
  1051. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/LocaleSelectors.js.map +1 -0
  1052. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/Logout.js +46 -0
  1053. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/Logout.js.map +1 -0
  1054. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/Msg.js +69 -0
  1055. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/Msg.js.map +1 -0
  1056. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerDropdownItem.js +38 -0
  1057. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerDropdownItem.js.map +1 -0
  1058. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerLink.js +46 -0
  1059. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerLink.js.map +1 -0
  1060. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/features.js +2 -0
  1061. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/features.js.map +1 -0
  1062. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/theme.properties +18 -0
  1063. package/aqtion/docker/config/servers.json +14 -0
  1064. package/aqtion/docker/setup/docker-compose.yml +67 -0
  1065. package/aqtion/frontend/app/components/.gitkeep +0 -0
  1066. package/aqtion/frontend/app/interfaces/.gitkeep +0 -0
  1067. package/aqtion/frontend/app/menu.json +41 -0
  1068. package/aqtion/frontend/app/pages/pages-routing.module.ts +19 -0
  1069. package/aqtion/frontend/app/pages/profil/profil.component.html +3 -0
  1070. package/aqtion/frontend/app/pages/profil/profil.component.scss +0 -0
  1071. package/aqtion/frontend/app/pages/profil/profil.component.ts +27 -0
  1072. package/aqtion/frontend/app/pages/root/root.component.html +3 -0
  1073. package/aqtion/frontend/app/pages/root/root.component.scss +22 -0
  1074. package/aqtion/frontend/app/pages/root/root.component.ts +16 -0
  1075. package/aqtion/frontend/app/services/profils.service.ts +25 -0
  1076. package/aqtion/frontend/app-routing.module.ts +61 -0
  1077. package/aqtion/frontend/app.component.css +46 -0
  1078. package/aqtion/frontend/app.component.html +1 -0
  1079. package/aqtion/frontend/app.component.ts +60 -0
  1080. package/aqtion/frontend/app.module.ts +103 -0
  1081. package/aqtion/frontend/assets/favicon.ico +0 -0
  1082. package/aqtion/frontend/assets/i18n/fr.json +33 -0
  1083. package/aqtion/frontend/assets/images/599x157.png +0 -0
  1084. package/aqtion/frontend/assets/images/cerema.png +0 -0
  1085. package/aqtion/frontend/assets/images/dollar.svg +1 -0
  1086. package/aqtion/frontend/assets/images/logo.png +0 -0
  1087. package/aqtion/frontend/assets/images/logo_title.png +0 -0
  1088. package/aqtion/frontend/assets/images/logorobot.png +0 -0
  1089. package/aqtion/frontend/assets/images/work-in-progress.svg +64 -0
  1090. package/aqtion/frontend/assets/layout/fonts/lato-v17-latin-ext_latin-300.woff +0 -0
  1091. package/aqtion/frontend/assets/layout/fonts/lato-v17-latin-ext_latin-300.woff2 +0 -0
  1092. package/aqtion/frontend/assets/layout/fonts/lato-v17-latin-ext_latin-700.woff +0 -0
  1093. package/aqtion/frontend/assets/layout/fonts/lato-v17-latin-ext_latin-700.woff2 +0 -0
  1094. package/aqtion/frontend/assets/layout/fonts/lato-v17-latin-ext_latin-regular.woff +0 -0
  1095. package/aqtion/frontend/assets/layout/fonts/lato-v17-latin-ext_latin-regular.woff2 +0 -0
  1096. package/aqtion/frontend/assets/layout/images/LogoCerema.svg +226 -0
  1097. package/aqtion/frontend/assets/layout/images/LogoCerema_horizontal.svg +167 -0
  1098. package/aqtion/frontend/assets/layout/images/SpinnerCerema.svg +6 -0
  1099. package/aqtion/frontend/assets/layout/images/Swagger-logo.png +0 -0
  1100. package/aqtion/frontend/assets/layout/images/authentication.svg +1 -0
  1101. package/aqtion/frontend/assets/layout/images/mail.svg +1 -0
  1102. package/aqtion/frontend/assets/layout/images/postgresql.svg +1 -0
  1103. package/aqtion/frontend/assets/layout/images/user.png +0 -0
  1104. package/aqtion/frontend/assets/layout/styles/layout/_breadcrumb.scss +18 -0
  1105. package/aqtion/frontend/assets/layout/styles/layout/_config.scss +33 -0
  1106. package/aqtion/frontend/assets/layout/styles/layout/_content.scss +20 -0
  1107. package/aqtion/frontend/assets/layout/styles/layout/_fonts.scss +29 -0
  1108. package/aqtion/frontend/assets/layout/styles/layout/_footer.scss +25 -0
  1109. package/aqtion/frontend/assets/layout/styles/layout/_main.scss +29 -0
  1110. package/aqtion/frontend/assets/layout/styles/layout/_responsive.scss +160 -0
  1111. package/aqtion/frontend/assets/layout/styles/layout/_sidebar.scss +2 -0
  1112. package/aqtion/frontend/assets/layout/styles/layout/_topbar.scss +250 -0
  1113. package/aqtion/frontend/assets/layout/styles/layout/_typography.scss +63 -0
  1114. package/aqtion/frontend/assets/layout/styles/layout/_utils.scss +19 -0
  1115. package/aqtion/frontend/assets/layout/styles/layout/layout.scss +15 -0
  1116. package/aqtion/frontend/assets/layout/styles/layout/preloading.css +73 -0
  1117. package/aqtion/frontend/assets/layout/styles/layout/preloading.scss +79 -0
  1118. package/aqtion/frontend/assets/layout/styles/layout/sidebar/_sidebar_slim.scss +132 -0
  1119. package/aqtion/frontend/assets/layout/styles/layout/sidebar/_sidebar_vertical.scss +132 -0
  1120. package/aqtion/frontend/assets/layout/styles/layout/theme/_dark.scss +10 -0
  1121. package/aqtion/frontend/assets/layout/styles/layout/theme/_light.scss +10 -0
  1122. package/aqtion/frontend/assets/layout/styles/layout/theme/_primary.scss +10 -0
  1123. package/aqtion/frontend/assets/layout/styles/layout/theme/_themes.scss +3 -0
  1124. package/aqtion/frontend/assets/layout/styles/theme/designer/_colors.scss +17 -0
  1125. package/aqtion/frontend/assets/layout/styles/theme/designer/_common.scss +68 -0
  1126. package/aqtion/frontend/assets/layout/styles/theme/designer/_components.scss +102 -0
  1127. package/aqtion/frontend/assets/layout/styles/theme/designer/_mixins.scss +203 -0
  1128. package/aqtion/frontend/assets/layout/styles/theme/designer/components/button/_button.scss +560 -0
  1129. package/aqtion/frontend/assets/layout/styles/theme/designer/components/button/_speeddial.scss +81 -0
  1130. package/aqtion/frontend/assets/layout/styles/theme/designer/components/button/_splitbutton.scss +381 -0
  1131. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_carousel.scss +37 -0
  1132. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_datatable.scss +278 -0
  1133. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_dataview.scss +55 -0
  1134. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_filter.scss +138 -0
  1135. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_fullcalendar.scss +329 -0
  1136. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_orderlist.scss +103 -0
  1137. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_organizationchart.scss +50 -0
  1138. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_paginator.scss +92 -0
  1139. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_picklist.scss +103 -0
  1140. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_timeline.scss +38 -0
  1141. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_tree.scss +144 -0
  1142. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_treetable.scss +246 -0
  1143. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_virtualscroller.scss +28 -0
  1144. package/aqtion/frontend/assets/layout/styles/theme/designer/components/file/_fileupload.scss +58 -0
  1145. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_breadcrumb.scss +42 -0
  1146. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_contextmenu.scss +56 -0
  1147. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_dock.scss +86 -0
  1148. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_megamenu.scss +106 -0
  1149. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_menu.scss +45 -0
  1150. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_menubar.scss +183 -0
  1151. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_panelmenu.scss +140 -0
  1152. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_slidemenu.scss +59 -0
  1153. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_steps.scss +56 -0
  1154. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_tabmenu.scss +69 -0
  1155. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_tieredmenu.scss +60 -0
  1156. package/aqtion/frontend/assets/layout/styles/theme/designer/components/messages/_inlinemessage.scss +64 -0
  1157. package/aqtion/frontend/assets/layout/styles/theme/designer/components/messages/_message.scss +102 -0
  1158. package/aqtion/frontend/assets/layout/styles/theme/designer/components/messages/_toast.scss +95 -0
  1159. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_avatar.scss +30 -0
  1160. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_badge.scss +48 -0
  1161. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_blockui.scss +0 -0
  1162. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_chip.scss +38 -0
  1163. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_inplace.scss +17 -0
  1164. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_progressbar.scss +17 -0
  1165. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_scrolltop.scss +20 -0
  1166. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_skeleton.scss +8 -0
  1167. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_tag.scss +35 -0
  1168. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_terminal.scss +11 -0
  1169. package/aqtion/frontend/assets/layout/styles/theme/designer/components/multimedia/_galleria.scss +139 -0
  1170. package/aqtion/frontend/assets/layout/styles/theme/designer/components/multimedia/_image.scss +44 -0
  1171. package/aqtion/frontend/assets/layout/styles/theme/designer/components/overlay/_confirmpopup.scss +65 -0
  1172. package/aqtion/frontend/assets/layout/styles/theme/designer/components/overlay/_dialog.scss +64 -0
  1173. package/aqtion/frontend/assets/layout/styles/theme/designer/components/overlay/_overlaypanel.scss +62 -0
  1174. package/aqtion/frontend/assets/layout/styles/theme/designer/components/overlay/_sidebar.scss +23 -0
  1175. package/aqtion/frontend/assets/layout/styles/theme/designer/components/overlay/_tooltip.scss +33 -0
  1176. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_accordion.scss +119 -0
  1177. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_card.scss +30 -0
  1178. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_divider.scss +31 -0
  1179. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_fieldset.scss +47 -0
  1180. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_panel.scss +58 -0
  1181. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_scrollpanel.scss +6 -0
  1182. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_splitter.scss +19 -0
  1183. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_tabview.scss +78 -0
  1184. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_toolbar.scss +10 -0
  1185. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/_extensions.scss +90 -0
  1186. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/_variables.scss +867 -0
  1187. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/blue/theme.css +7341 -0
  1188. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/blue/theme.scss +12 -0
  1189. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/cyan/theme.css +7341 -0
  1190. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/cyan/theme.scss +12 -0
  1191. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/deeppurple/theme.css +7341 -0
  1192. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/deeppurple/theme.scss +12 -0
  1193. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/green/theme.css +7341 -0
  1194. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/green/theme.scss +12 -0
  1195. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/indigo/theme.css +7341 -0
  1196. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/indigo/theme.scss +12 -0
  1197. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/lime/theme.css +7341 -0
  1198. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/lime/theme.scss +12 -0
  1199. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/orange/theme.css +7341 -0
  1200. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/orange/theme.scss +12 -0
  1201. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/pink/theme.css +7341 -0
  1202. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/pink/theme.scss +12 -0
  1203. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/purple/theme.css +7341 -0
  1204. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/purple/theme.scss +12 -0
  1205. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/yellow/theme.css +7341 -0
  1206. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/yellow/theme.scss +12 -0
  1207. package/aqtion/frontend/assets/layout/styles/theme/theme-light/_extensions.scss +90 -0
  1208. package/aqtion/frontend/assets/layout/styles/theme/theme-light/_variables.scss +870 -0
  1209. package/aqtion/frontend/assets/layout/styles/theme/theme-light/blue/theme.css +7540 -0
  1210. package/aqtion/frontend/assets/layout/styles/theme/theme-light/blue/theme.scss +12 -0
  1211. package/aqtion/frontend/assets/layout/styles/theme/theme-light/cyan/theme.css +7341 -0
  1212. package/aqtion/frontend/assets/layout/styles/theme/theme-light/cyan/theme.scss +12 -0
  1213. package/aqtion/frontend/assets/layout/styles/theme/theme-light/deeppurple/theme.css +7341 -0
  1214. package/aqtion/frontend/assets/layout/styles/theme/theme-light/deeppurple/theme.scss +12 -0
  1215. package/aqtion/frontend/assets/layout/styles/theme/theme-light/green/theme.css +7341 -0
  1216. package/aqtion/frontend/assets/layout/styles/theme/theme-light/green/theme.scss +12 -0
  1217. package/aqtion/frontend/assets/layout/styles/theme/theme-light/indigo/theme.css +7341 -0
  1218. package/aqtion/frontend/assets/layout/styles/theme/theme-light/indigo/theme.scss +12 -0
  1219. package/aqtion/frontend/assets/layout/styles/theme/theme-light/lime/theme.css +7341 -0
  1220. package/aqtion/frontend/assets/layout/styles/theme/theme-light/lime/theme.scss +12 -0
  1221. package/aqtion/frontend/assets/layout/styles/theme/theme-light/orange/theme.css +7341 -0
  1222. package/aqtion/frontend/assets/layout/styles/theme/theme-light/orange/theme.scss +12 -0
  1223. package/aqtion/frontend/assets/layout/styles/theme/theme-light/pink/theme.css +7341 -0
  1224. package/aqtion/frontend/assets/layout/styles/theme/theme-light/pink/theme.scss +12 -0
  1225. package/aqtion/frontend/assets/layout/styles/theme/theme-light/purple/theme.css +7341 -0
  1226. package/aqtion/frontend/assets/layout/styles/theme/theme-light/purple/theme.scss +12 -0
  1227. package/aqtion/frontend/assets/layout/styles/theme/theme-light/yellow/theme.css +7341 -0
  1228. package/aqtion/frontend/assets/layout/styles/theme/theme-light/yellow/theme.scss +12 -0
  1229. package/aqtion/frontend/environments/environment.ci.ts +13 -0
  1230. package/aqtion/frontend/environments/environment.dev.ts +12 -0
  1231. package/aqtion/frontend/environments/environment.prod.ts +13 -0
  1232. package/aqtion/frontend/environments/environment.ts +3 -0
  1233. package/aqtion/frontend/index.dev.html +33 -0
  1234. package/aqtion/frontend/index.prod.html +32 -0
  1235. package/aqtion/frontend/layout/api/menuchangeevent.ts +4 -0
  1236. package/aqtion/frontend/layout/api/tabcloseevent.ts +6 -0
  1237. package/aqtion/frontend/layout/app.breadcrumb.component.html +14 -0
  1238. package/aqtion/frontend/layout/app.breadcrumb.component.ts +48 -0
  1239. package/aqtion/frontend/layout/app.footer.component.html +20 -0
  1240. package/aqtion/frontend/layout/app.footer.component.ts +23 -0
  1241. package/aqtion/frontend/layout/app.menu.component.html +3 -0
  1242. package/aqtion/frontend/layout/app.menu.service.ts +23 -0
  1243. package/aqtion/frontend/layout/app.menuitem.component.ts +310 -0
  1244. package/aqtion/frontend/layout/app.sidebar.component.html +5 -0
  1245. package/aqtion/frontend/layout/app.sidebar.component.ts +13 -0
  1246. package/aqtion/frontend/layout/app.topbar.component.html +72 -0
  1247. package/aqtion/frontend/layout/app.topbar.component.ts +73 -0
  1248. package/aqtion/frontend/layout/auto-unsubscribe.decorator.ts +21 -0
  1249. package/aqtion/frontend/layout/common/err-403/err-403.component.html +24 -0
  1250. package/aqtion/frontend/layout/common/err-403/err-403.component.scss +340 -0
  1251. package/aqtion/frontend/layout/common/err-403/err-403.ts +19 -0
  1252. package/aqtion/frontend/layout/common/err-404/err-404.component.html +27 -0
  1253. package/aqtion/frontend/layout/common/err-404/err-404.component.scss +38 -0
  1254. package/aqtion/frontend/layout/common/err-404/err-404.ts +19 -0
  1255. package/aqtion/frontend/layout/common/err-500/err-500.component.html +10 -0
  1256. package/aqtion/frontend/layout/common/err-500/err-500.component.scss +44 -0
  1257. package/aqtion/frontend/layout/common/err-500/err-500.ts +37 -0
  1258. package/aqtion/frontend/layout/common/work-in-progress/work-in-progress.component.html +1 -0
  1259. package/aqtion/frontend/layout/common/work-in-progress/work-in-progress.component.scss +8 -0
  1260. package/aqtion/frontend/layout/common/work-in-progress/work-in-progress.component.ts +14 -0
  1261. package/aqtion/frontend/layout/config/app.config.component.html +86 -0
  1262. package/aqtion/frontend/layout/config/app.config.component.scss +0 -0
  1263. package/aqtion/frontend/layout/config/app.config.component.ts +241 -0
  1264. package/aqtion/frontend/layout/config/config.module.ts +27 -0
  1265. package/aqtion/frontend/layout/error.handler.ts +16 -0
  1266. package/aqtion/frontend/layout/main/main.component.html +15 -0
  1267. package/aqtion/frontend/layout/main/main.component.ts +186 -0
  1268. package/aqtion/frontend/layout/main.module.ts +45 -0
  1269. package/aqtion/frontend/layout/service/app.layout.service.ts +123 -0
  1270. package/aqtion/frontend/layout/service/healthCheck.service.ts +35 -0
  1271. package/aqtion/frontend/layout/shared/components/app.menu.component.ts +69 -0
  1272. package/aqtion/frontend/layout/shared/components/auth/accessdenied/accessdenied-routing.module.ts +12 -0
  1273. package/aqtion/frontend/layout/shared/components/auth/accessdenied/accessdenied.component.html +10 -0
  1274. package/aqtion/frontend/layout/shared/components/auth/accessdenied/accessdenied.component.ts +7 -0
  1275. package/aqtion/frontend/layout/shared/components/auth/accessdenied/accessdenied.module.ts +17 -0
  1276. package/aqtion/frontend/layout/shared/components/auth/auth-routing.module.ts +14 -0
  1277. package/aqtion/frontend/layout/shared/components/auth/auth.module.ts +13 -0
  1278. package/aqtion/frontend/layout/shared/components/auth/error/error-routing.module.ts +12 -0
  1279. package/aqtion/frontend/layout/shared/components/auth/error/error.component.html +10 -0
  1280. package/aqtion/frontend/layout/shared/components/auth/error/error.component.ts +7 -0
  1281. package/aqtion/frontend/layout/shared/components/auth/error/error.module.ts +12 -0
  1282. package/aqtion/frontend/layout/shared/components/auth/login/login-routing.module.ts +12 -0
  1283. package/aqtion/frontend/layout/shared/components/auth/login/login.component.html +15 -0
  1284. package/aqtion/frontend/layout/shared/components/auth/login/login.component.ts +47 -0
  1285. package/aqtion/frontend/layout/shared/components/auth/login/login.module.ts +21 -0
  1286. package/aqtion/frontend/layout/shared/components/auth/logout/logout/logout.component.html +8 -0
  1287. package/aqtion/frontend/layout/shared/components/auth/logout/logout/logout.component.scss +21 -0
  1288. package/aqtion/frontend/layout/shared/components/auth/logout/logout/logout.component.ts +15 -0
  1289. package/aqtion/frontend/layout/shared/components/auth/logout/logout.module.ts +26 -0
  1290. package/aqtion/frontend/layout/shared/components/code/code.component.ts +17 -0
  1291. package/aqtion/frontend/layout/shared/components/indic/indic.component.html +8 -0
  1292. package/aqtion/frontend/layout/shared/components/indic/indic.component.scss +0 -0
  1293. package/aqtion/frontend/layout/shared/components/indic/indic.component.ts +60 -0
  1294. package/aqtion/frontend/layout/shared/components/lookup-input/lookup-input.component.html +70 -0
  1295. package/aqtion/frontend/layout/shared/components/lookup-input/lookup-input.component.scss +0 -0
  1296. package/aqtion/frontend/layout/shared/components/lookup-input/lookup-input.component.ts +121 -0
  1297. package/aqtion/frontend/layout/shared/components/notfound/notfound-routing.module.ts +12 -0
  1298. package/aqtion/frontend/layout/shared/components/notfound/notfound.component.html +42 -0
  1299. package/aqtion/frontend/layout/shared/components/notfound/notfound.component.ts +7 -0
  1300. package/aqtion/frontend/layout/shared/components/notfound/notfound.module.ts +12 -0
  1301. package/aqtion/frontend/layout/shared/constants/dateFormat.constants.ts +1 -0
  1302. package/aqtion/frontend/layout/shared/constants/pagination.constants.ts +1 -0
  1303. package/aqtion/frontend/layout/shared/core/config/application-config.service.ts +34 -0
  1304. package/aqtion/frontend/layout/shared/core/config/db-config.service.ts +20 -0
  1305. package/aqtion/frontend/layout/shared/core/guard/can-modify.guard.ts +51 -0
  1306. package/aqtion/frontend/layout/shared/core/guard/login.guard.ts +24 -0
  1307. package/aqtion/frontend/layout/shared/core/guard/ui.guard.ts +94 -0
  1308. package/aqtion/frontend/layout/shared/core/interceptor/handle-req.interceptor.ts +31 -0
  1309. package/aqtion/frontend/layout/shared/core/interceptor/index.ts +10 -0
  1310. package/aqtion/frontend/layout/shared/core/request/pageable.model.ts +5 -0
  1311. package/aqtion/frontend/layout/shared/core/request/request-util.ts +21 -0
  1312. package/aqtion/frontend/layout/shared/core/resolver/accueil.resolver.ts +19 -0
  1313. package/aqtion/frontend/layout/shared/core/storage/MyLocalStorageService.ts +22 -0
  1314. package/aqtion/frontend/layout/shared/core/storage/MyStorageService.ts +17 -0
  1315. package/aqtion/frontend/layout/shared/dev/dev-dashboard/dev-dashboard.component.html +30 -0
  1316. package/aqtion/frontend/layout/shared/dev/dev-dashboard/dev-dashboard.component.scss +82 -0
  1317. package/aqtion/frontend/layout/shared/dev/dev-dashboard/dev-dashboard.component.ts +29 -0
  1318. package/aqtion/frontend/layout/shared/dev/dev-routing.module.ts +19 -0
  1319. package/aqtion/frontend/layout/shared/dev/dev.module.ts +76 -0
  1320. package/aqtion/frontend/layout/shared/entities/claims.model.ts +9 -0
  1321. package/aqtion/frontend/layout/shared/entities/user.model.ts +9 -0
  1322. package/aqtion/frontend/layout/shared/i18n/fr.json +74 -0
  1323. package/aqtion/frontend/layout/shared/service/dev.service.ts +16 -0
  1324. package/aqtion/frontend/layout/shared/service/policy.service.ts +22 -0
  1325. package/aqtion/frontend/layout/shared/service/user.service.ts +71 -0
  1326. package/aqtion/frontend/layout/shared/shared.module.ts +11 -0
  1327. package/aqtion/frontend/layout/shared/utils/globals.ts +85 -0
  1328. package/aqtion/frontend/layout/shared/utils/misc.ts +31 -0
  1329. package/aqtion/frontend/main-routing.module.ts +47 -0
  1330. package/aqtion/frontend/main.ts +13 -0
  1331. package/aqtion/frontend/pages.module.ts +76 -0
  1332. package/aqtion/frontend/polyfills.ts +64 -0
  1333. package/aqtion/frontend/styles.scss +43 -0
  1334. package/aqtion/frontend/themes.scss +84 -0
  1335. package/aqtion/kubernetes/Chart.yaml +4 -0
  1336. package/aqtion/kubernetes/config/values.yaml +22 -0
  1337. package/aqtion/kubernetes/templates/api.yaml +74 -0
  1338. package/aqtion/kubernetes/templates/app.yaml +58 -0
  1339. package/aqtion/kubernetes/templates/pgadmin.yaml +115 -0
  1340. package/aqtion/kubernetes/templates/postgres.yaml +67 -0
  1341. package/aqtion/launch.json +21 -0
  1342. package/aqtion/logo.png +0 -0
  1343. package/aqtion/nginx.conf +20 -0
  1344. package/aqtion/package-lock.json +14134 -0
  1345. package/aqtion/package.json +84 -0
  1346. package/aqtion/playwright.config.ts +77 -0
  1347. package/aqtion/pnpm-lock.yaml +9539 -0
  1348. package/aqtion/policies/roles.json +4 -0
  1349. package/aqtion/policies/ui.policy.json +4 -0
  1350. package/aqtion/pom.xml +144 -0
  1351. package/aqtion/run.sh +5 -0
  1352. package/aqtion/tests/example.spec.ts +18 -0
  1353. package/aqtion/tests-examples/demo-todo-app.spec.ts +437 -0
  1354. package/aqtion/tsconfig.app.json +9 -0
  1355. package/aqtion/tsconfig.json +39 -0
  1356. package/aqtion/tsconfig.spec.json +9 -0
  1357. package/cli/global/init.js +12 -10
  1358. package/lib/cadriciel.js +2 -2
  1359. package/package.json +1 -1
@@ -0,0 +1,4054 @@
1
+ Array.prototype.remove = function(from, to) {
2
+ var rest = this.slice((to || from) + 1 || this.length);
3
+ this.length = from < 0 ? this.length + from : from;
4
+ return this.push.apply(this, rest);
5
+ };
6
+
7
+ module.controller('ClientTabCtrl', function(Dialog, $scope, Current, Notifications, $location) {
8
+ $scope.removeClient = function() {
9
+ Dialog.confirmDelete($scope.client.clientId, 'client', function() {
10
+ $scope.client.$remove({
11
+ realm : Current.realm.realm,
12
+ client : $scope.client.id
13
+ }, function() {
14
+ $location.url("/realms/" + Current.realm.realm + "/clients");
15
+ Notifications.success("The client has been deleted.");
16
+ });
17
+ });
18
+ };
19
+ });
20
+
21
+ module.controller('ClientRoleListCtrl', function($scope, $route, realm, client, ClientRoleList, RoleById, Notifications, Dialog) {
22
+ $scope.realm = realm;
23
+ $scope.roles = [];
24
+ $scope.client = client;
25
+
26
+ $scope.query = {
27
+ realm: realm.realm,
28
+ client: $scope.client.id,
29
+ search : null,
30
+ max : 20,
31
+ first : 0
32
+ }
33
+
34
+ $scope.$watch('query.search', function (newVal, oldVal) {
35
+ if($scope.query.search && $scope.query.search.length >= 3) {
36
+ $scope.firstPage();
37
+ }
38
+ }, true);
39
+
40
+ $scope.firstPage = function() {
41
+ $scope.query.first = 0;
42
+ $scope.searchQuery();
43
+ }
44
+
45
+ $scope.previousPage = function() {
46
+ $scope.query.first -= parseInt($scope.query.max);
47
+ if ($scope.query.first < 0) {
48
+ $scope.query.first = 0;
49
+ }
50
+ $scope.searchQuery();
51
+ }
52
+
53
+ $scope.nextPage = function() {
54
+ $scope.query.first += parseInt($scope.query.max);
55
+ $scope.searchQuery();
56
+ }
57
+
58
+ $scope.searchQuery = function() {
59
+ $scope.searchLoaded = false;
60
+
61
+ $scope.roles = ClientRoleList.query($scope.query, function() {
62
+ $scope.searchLoaded = true;
63
+ $scope.lastSearch = $scope.query.search;
64
+ });
65
+ };
66
+
67
+ $scope.searchQuery();
68
+
69
+ $scope.removeRole = function(role) {
70
+ Dialog.confirmDelete(role.name, 'role', function() {
71
+ RoleById.remove({
72
+ realm: realm.realm,
73
+ role: role.id
74
+ }, function () {
75
+ $route.reload();
76
+ Notifications.success("The role has been deleted.");
77
+ });
78
+ });
79
+ };
80
+ });
81
+
82
+ module.controller('ClientCredentialsCtrl', function($scope, $location, realm, client, clientAuthenticatorProviders, clientConfigProperties, Client, ClientRegistrationAccessToken, Notifications) {
83
+ $scope.realm = realm;
84
+ $scope.client = angular.copy(client);
85
+ $scope.clientAuthenticatorProviders = clientAuthenticatorProviders;
86
+
87
+ var updateCurrentPartial = function(val) {
88
+ $scope.clientAuthenticatorConfigPartial;
89
+ switch(val) {
90
+ case 'client-secret':
91
+ $scope.clientAuthenticatorConfigPartial = 'client-credentials-secret.html';
92
+ break;
93
+ case 'client-jwt':
94
+ $scope.clientAuthenticatorConfigPartial = 'client-credentials-jwt.html';
95
+ break;
96
+ case 'client-secret-jwt':
97
+ $scope.clientAuthenticatorConfigPartial = 'client-credentials-secret-jwt.html';
98
+ break;
99
+ case 'client-x509':
100
+ $scope.clientAuthenticatorConfigPartial = 'client-credentials-x509.html';
101
+ break;
102
+ default:
103
+ $scope.currentAuthenticatorConfigProperties = clientConfigProperties[val];
104
+ $scope.clientAuthenticatorConfigPartial = 'client-credentials-generic.html';
105
+ break;
106
+ }
107
+ };
108
+
109
+ updateCurrentPartial(client.clientAuthenticatorType);
110
+
111
+ $scope.$watch('client.clientAuthenticatorType', function() {
112
+ if (!angular.equals($scope.client.clientAuthenticatorType, client.clientAuthenticatorType)) {
113
+
114
+ Client.update({
115
+ realm : realm.realm,
116
+ client : client.id
117
+ }, $scope.client, function() {
118
+ $scope.changed = false;
119
+ client = angular.copy($scope.client);
120
+ updateCurrentPartial(client.clientAuthenticatorType)
121
+ });
122
+
123
+ }
124
+ }, true);
125
+
126
+ $scope.regenerateRegistrationAccessToken = function() {
127
+ var secret = ClientRegistrationAccessToken.update({ realm : $scope.realm.realm, client : $scope.client.id },
128
+ function(data) {
129
+ Notifications.success('The registration access token has been updated.');
130
+ $scope.client['registrationAccessToken'] = data.registrationAccessToken;
131
+ },
132
+ function() {
133
+ Notifications.error('Failed to update the registration access token');
134
+ }
135
+ );
136
+ };
137
+ });
138
+
139
+ module.controller('ClientSecretCtrl', function($scope, $location, Client, ClientSecret, Notifications, $route) {
140
+
141
+ var secret = ClientSecret.get({ realm : $scope.realm.realm, client : $scope.client.id },
142
+ function() {
143
+ $scope.secret = secret.value;
144
+ }
145
+ );
146
+
147
+ $scope.changePassword = function() {
148
+ var secret = ClientSecret.update({ realm : $scope.realm.realm, client : $scope.client.id },
149
+ function() {
150
+ $route.reload();
151
+ Notifications.success('The secret has been changed.');
152
+ },
153
+ function() {
154
+ Notifications.error("The secret was not changed due to a problem.");
155
+ $scope.secret = "error";
156
+ }
157
+ );
158
+ };
159
+
160
+ $scope.removeRotatedSecret = function(){
161
+ ClientSecret.invalidate({realm: $scope.realm.realm, client: $scope.client.id },
162
+ function(){
163
+ $route.reload();
164
+ Notifications.success('The rotated secret has been invalidated.');
165
+ },
166
+ function(){
167
+ Notifications.error("The rotated secret was not invalidated due to a problem.");
168
+ }
169
+ );
170
+ };
171
+
172
+ $scope.tokenEndpointAuthSigningAlg = $scope.client.attributes['token.endpoint.auth.signing.alg'];
173
+
174
+ if ($scope.client.attributes['client.secret.expiration.time']){
175
+ $scope.secret_expiration_time = $scope.client.attributes['client.secret.expiration.time'] * 1000;
176
+ }
177
+
178
+ if ($scope.client.attributes["client.secret.rotated"]) {
179
+ $scope.secretRotated = $scope.client.attributes["client.secret.rotated"];
180
+ }
181
+
182
+ if ($scope.client.attributes['client.secret.rotated.expiration.time']){
183
+ $scope.rotated_secret_expiration_time = $scope.client.attributes['client.secret.rotated.expiration.time'] * 1000;
184
+ }
185
+
186
+ $scope.switchChange = function() {
187
+ $scope.changed = true;
188
+ }
189
+
190
+ $scope.save = function() {
191
+ $scope.client.attributes['token.endpoint.auth.signing.alg'] = $scope.tokenEndpointAuthSigningAlg;
192
+
193
+ Client.update({
194
+ realm : $scope.realm.realm,
195
+ client : $scope.client.id
196
+ }, $scope.client, function() {
197
+ $scope.changed = false;
198
+ $scope.clientCopy = angular.copy($scope.client);
199
+ Notifications.success("Client authentication configuration has been saved to the client.");
200
+ });
201
+ };
202
+
203
+ $scope.$watch(function() {
204
+ return $location.path();
205
+ }, function() {
206
+ $scope.path = $location.path().substring(1).split("/");
207
+ });
208
+
209
+ $scope.cancel = function() {
210
+ $location.url("/realms/" + $scope.realm.realm + "/clients/" + $scope.client.id + "/credentials");
211
+ $route.reload();
212
+ };
213
+
214
+ });
215
+
216
+ module.controller('ClientX509Ctrl', function($scope, $location, Client, Notifications) {
217
+ console.log('ClientX509Ctrl invoked');
218
+
219
+ $scope.clientCopy = angular.copy($scope.client);
220
+ $scope.changed = false;
221
+
222
+ $scope.$watch('client', function() {
223
+ if (!angular.equals($scope.client, $scope.clientCopy)) {
224
+ $scope.changed = true;
225
+ }
226
+ }, true);
227
+
228
+ function updateProperties() {
229
+ if ($scope.client.attributes["x509.allow.regex.pattern.comparison"]) {
230
+ if ($scope.client.attributes["x509.allow.regex.pattern.comparison"] == "true") {
231
+ $scope.allowRegexPatternComparison = true;
232
+ } else {
233
+ $scope.allowRegexPatternComparison = false;
234
+ }
235
+ }
236
+ }
237
+
238
+ updateProperties();
239
+
240
+ $scope.switchChange = function() {
241
+ $scope.changed = true;
242
+ }
243
+
244
+ $scope.save = function() {
245
+ if ($scope.allowRegexPatternComparison == true) {
246
+ $scope.client.attributes["x509.allow.regex.pattern.comparison"] = "true";
247
+ } else {
248
+ $scope.client.attributes["x509.allow.regex.pattern.comparison"] = "false";
249
+ }
250
+
251
+ if (!$scope.client.attributes["x509.subjectdn"]) {
252
+ Notifications.error("The SubjectDN must not be empty.");
253
+ } else {
254
+ Client.update({
255
+ realm : $scope.realm.realm,
256
+ client : $scope.client.id
257
+ }, $scope.client, function() {
258
+ $scope.changed = false;
259
+ $scope.clientCopy = angular.copy($scope.client);
260
+ Notifications.success("Client authentication configuration has been saved to the client.");
261
+ }, function() {
262
+ Notifications.error("The SubjectDN was not changed due to a problem.");
263
+ $scope.subjectdn = "error";
264
+ });
265
+ }
266
+ };
267
+
268
+ $scope.$watch(function() {
269
+ return $location.path();
270
+ }, function() {
271
+ $scope.path = $location.path().substring(1).split("/");
272
+ });
273
+
274
+ $scope.reset = function() {
275
+ $scope.client.attributes["x509.subjectdn"] = $scope.clientCopy.attributes["x509.subjectdn"];
276
+ $scope.client.attributes["x509.allow.regex.pattern.comparison"] = $scope.clientCopy.attributes["x509.allow.regex.pattern.comparison"];
277
+ updateProperties();
278
+ $location.url("/realms/" + $scope.realm.realm + "/clients/" + $scope.client.id + "/credentials");
279
+ };
280
+ });
281
+
282
+ module.controller('ClientSignedJWTCtrl', function($scope, Client, Notifications) {
283
+ console.log('ClientSignedJWTCtrl invoked');
284
+
285
+ $scope.tokenEndpointAuthSigningAlg = $scope.client.attributes['token.endpoint.auth.signing.alg'];
286
+
287
+ $scope.$watch('tokenEndpointAuthSigningAlg', function() {
288
+ if (!angular.equals($scope.client.attributes['token.endpoint.auth.signing.alg'], $scope.tokenEndpointAuthSigningAlg)) {
289
+ $scope.client.attributes['token.endpoint.auth.signing.alg'] = $scope.tokenEndpointAuthSigningAlg;
290
+
291
+ Client.update({
292
+ realm : $scope.realm.realm,
293
+ client : $scope.client.id
294
+ }, $scope.client, function() {
295
+ Notifications.success("Signature algorithm has been saved to the client.");
296
+ });
297
+ }
298
+ }, true);
299
+
300
+ });
301
+
302
+ module.controller('ClientGenericCredentialsCtrl', function($scope, $location, Client, Notifications) {
303
+
304
+ console.log('ClientGenericCredentialsCtrl invoked');
305
+
306
+ $scope.clientCopy = angular.copy($scope.client);
307
+ $scope.changed = false;
308
+
309
+ $scope.$watch('client', function() {
310
+ if (!angular.equals($scope.client, $scope.clientCopy)) {
311
+ $scope.changed = true;
312
+ }
313
+ }, true);
314
+
315
+ $scope.save = function() {
316
+
317
+ Client.update({
318
+ realm : $scope.realm.realm,
319
+ client : $scope.client.id
320
+ }, $scope.client, function() {
321
+ $scope.changed = false;
322
+ $scope.clientCopy = angular.copy($scope.client);
323
+ Notifications.success("Client authentication configuration has been saved to the client.");
324
+ });
325
+ };
326
+
327
+ $scope.reset = function() {
328
+ $scope.client = angular.copy($scope.clientCopy);
329
+ $scope.changed = false;
330
+ };
331
+ });
332
+
333
+ module.controller('ClientIdentityProviderCtrl', function($scope, $location, $route, realm, client, Client, $location, Notifications) {
334
+ $scope.realm = realm;
335
+ $scope.client = angular.copy(client);
336
+ var length = 0;
337
+
338
+ if ($scope.client.identityProviders) {
339
+ length = $scope.client.identityProviders.length;
340
+
341
+ for (i = 0; i < $scope.client.identityProviders.length; i++) {
342
+ var clientProvider = $scope.client.identityProviders[i];
343
+ if (clientProvider.retrieveToken) {
344
+ clientProvider.retrieveToken = clientProvider.retrieveToken.toString();
345
+ }
346
+ }
347
+
348
+ } else {
349
+ $scope.client.identityProviders = [];
350
+ }
351
+
352
+ $scope.identityProviders = [];
353
+ var providersMissingInClient = [];
354
+
355
+ for (j = 0; j < realm.identityProviders.length; j++) {
356
+ var identityProvider = realm.identityProviders[j];
357
+ var clientProvider = null;
358
+
359
+ for (i = 0; i < $scope.client.identityProviders.length; i++) {
360
+ clientProvider = $scope.client.identityProviders[i];
361
+
362
+ if (clientProvider) {
363
+
364
+ if (clientProvider.id == identityProvider.id) {
365
+ $scope.identityProviders[i] = {};
366
+ $scope.identityProviders[i].identityProvider = identityProvider;
367
+ $scope.identityProviders[i].retrieveToken = clientProvider.retrieveToken;
368
+ break;
369
+ }
370
+
371
+ clientProvider = null;
372
+ }
373
+ }
374
+
375
+ if (clientProvider == null) {
376
+ providersMissingInClient.push(identityProvider);
377
+ }
378
+ }
379
+
380
+ for (j = 0; j < providersMissingInClient.length; j++) {
381
+ var identityProvider = providersMissingInClient[j];
382
+
383
+ var currentProvider = {};
384
+ currentProvider.identityProvider = identityProvider;
385
+ currentProvider.retrieveToken = "false";
386
+ $scope.identityProviders.push(currentProvider);
387
+
388
+ var currentClientProvider = {};
389
+ currentClientProvider.id = identityProvider.id;
390
+ currentClientProvider.retrieveToken = "false";
391
+ $scope.client.identityProviders.push(currentClientProvider);
392
+ }
393
+
394
+ var oldCopy = angular.copy($scope.client);
395
+
396
+ $scope.save = function() {
397
+
398
+ Client.update({
399
+ realm : realm.realm,
400
+ client : client.id
401
+ }, $scope.client, function() {
402
+ $scope.changed = false;
403
+ $route.reload();
404
+ Notifications.success("Your changes have been saved to the client.");
405
+ });
406
+ };
407
+
408
+ $scope.reset = function() {
409
+ $scope.client = angular.copy(oldCopy);
410
+ $scope.changed = false;
411
+ };
412
+
413
+ $scope.$watch('client', function() {
414
+ if (!angular.equals($scope.client, oldCopy)) {
415
+ $scope.changed = true;
416
+ }
417
+ }, true);
418
+ });
419
+
420
+ module.controller('ClientSamlKeyCtrl', function($scope, $location, $http, $upload, realm, client,
421
+ ClientCertificate, ClientCertificateGenerate,
422
+ ClientCertificateDownload, Notifications) {
423
+ $scope.realm = realm;
424
+ $scope.client = client;
425
+
426
+ var signingKeyInfo = ClientCertificate.get({ realm : realm.realm, client : client.id, attribute: 'saml.signing' },
427
+ function() {
428
+ $scope.signingKeyInfo = signingKeyInfo;
429
+ }
430
+ );
431
+
432
+ $scope.generateSigningKey = function() {
433
+ var keyInfo = ClientCertificateGenerate.generate({ realm : realm.realm, client : client.id, attribute: 'saml.signing' },
434
+ function() {
435
+ Notifications.success('Signing key has been regenerated.');
436
+ $scope.signingKeyInfo = keyInfo;
437
+ },
438
+ function() {
439
+ Notifications.error("Signing key was not regenerated.");
440
+ }
441
+ );
442
+ };
443
+
444
+ $scope.importSigningKey = function() {
445
+ $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/saml/Signing/import/saml.signing");
446
+ };
447
+
448
+ $scope.exportSigningKey = function() {
449
+ $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/saml/Signing/export/saml.signing");
450
+ };
451
+
452
+ var encryptionKeyInfo = ClientCertificate.get({ realm : realm.realm, client : client.id, attribute: 'saml.encryption' },
453
+ function() {
454
+ $scope.encryptionKeyInfo = encryptionKeyInfo;
455
+ }
456
+ );
457
+
458
+ $scope.generateEncryptionKey = function() {
459
+ var keyInfo = ClientCertificateGenerate.generate({ realm : realm.realm, client : client.id, attribute: 'saml.encryption' },
460
+ function() {
461
+ Notifications.success('Encryption key has been regenerated.');
462
+ $scope.encryptionKeyInfo = keyInfo;
463
+ },
464
+ function() {
465
+ Notifications.error("Encryption key was not regenerated.");
466
+ }
467
+ );
468
+ };
469
+
470
+ $scope.importEncryptionKey = function() {
471
+ $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/saml/Encryption/import/saml.encryption");
472
+ };
473
+
474
+ $scope.exportEncryptionKey = function() {
475
+ $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/saml/Encryption/export/saml.encryption");
476
+ };
477
+
478
+
479
+ $scope.$watch(function() {
480
+ return $location.path();
481
+ }, function() {
482
+ $scope.path = $location.path().substring(1).split("/");
483
+ });
484
+ });
485
+
486
+ module.controller('ClientCertificateImportCtrl', function($scope, $location, $http, $upload, realm, client, callingContext, $routeParams,
487
+ ClientCertificate, ClientCertificateGenerate,
488
+ ClientCertificateDownload, Notifications) {
489
+
490
+ console.log("callingContext: " + callingContext);
491
+
492
+ var keyType = $routeParams.keyType;
493
+ var attribute = $routeParams.attribute;
494
+ $scope.realm = realm;
495
+ $scope.client = client;
496
+ $scope.keyType = keyType;
497
+
498
+ if (callingContext == 'saml') {
499
+ var uploadUrl = authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/certificates/' + attribute + '/upload';
500
+ var redirectLocation = "/realms/" + realm.realm + "/clients/" + client.id + "/saml/keys";
501
+ } else if (callingContext == 'oidc') {
502
+ var uploadUrl = authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/certificates/' + attribute + '/upload-certificate';
503
+ var redirectLocation = "/realms/" + realm.realm + "/clients/" + client.id + "/oidc/keys";
504
+ }
505
+
506
+ $scope.files = [];
507
+
508
+ $scope.onFileSelect = function($files) {
509
+ $scope.files = $files;
510
+ };
511
+
512
+ $scope.cancel = function() {
513
+ $location.url(redirectLocation);
514
+ }
515
+
516
+ $scope.keyFormats = [
517
+ "JKS",
518
+ "PKCS12",
519
+ "Certificate PEM"
520
+ ];
521
+
522
+ if (callingContext == 'oidc') {
523
+ $scope.keyFormats.push('Public Key PEM');
524
+ $scope.keyFormats.push('JSON Web Key Set');
525
+ }
526
+
527
+ $scope.hideKeystoreSettings = function() {
528
+ return $scope.uploadKeyFormat == 'Certificate PEM' || $scope.uploadKeyFormat == 'Public Key PEM' || $scope.uploadKeyFormat == 'JSON Web Key Set';
529
+ }
530
+
531
+ $scope.uploadKeyFormat = $scope.keyFormats[0];
532
+
533
+ $scope.uploadFile = function() {
534
+ //$files: an array of files selected, each file has name, size, and type.
535
+ for (var i = 0; i < $scope.files.length; i++) {
536
+ var $file = $scope.files[i];
537
+ $scope.upload = $upload.upload({
538
+ url: uploadUrl,
539
+ // method: POST or PUT,
540
+ // headers: {'headerKey': 'headerValue'}, withCredential: true,
541
+ data: {keystoreFormat: $scope.uploadKeyFormat,
542
+ keyAlias: $scope.uploadKeyAlias,
543
+ keyPassword: $scope.uploadKeyPassword,
544
+ storePassword: $scope.uploadStorePassword
545
+ },
546
+ file: $file
547
+ /* set file formData name for 'Content-Desposition' header. Default: 'file' */
548
+ //fileFormDataName: myFile,
549
+ /* customize how data is added to formData. See #40#issuecomment-28612000 for example */
550
+ //formDataAppender: function(formData, key, val){}
551
+ }).then(function(data, status, headers) {
552
+ Notifications.success("Keystore uploaded successfully.");
553
+ $location.url(redirectLocation);
554
+ })
555
+ //.then(success, error, progress);
556
+ }
557
+ };
558
+
559
+ $scope.$watch(function() {
560
+ return $location.path();
561
+ }, function() {
562
+ $scope.path = $location.path().substring(1).split("/");
563
+ });
564
+ });
565
+
566
+ module.controller('ClientCertificateExportCtrl', function($scope, $location, $http, $upload, realm, client, callingContext, $routeParams,
567
+ ClientCertificate, ClientCertificateGenerate,
568
+ ClientCertificateDownload, Notifications) {
569
+ var keyType = $routeParams.keyType;
570
+ var attribute = $routeParams.attribute;
571
+ $scope.realm = realm;
572
+ $scope.client = client;
573
+ $scope.keyType = keyType;
574
+
575
+ if (callingContext == 'saml') {
576
+ var downloadUrl = authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/certificates/' + attribute + '/download';
577
+ var realmCertificate = true;
578
+ } else if (callingContext == 'oidc') {
579
+ var downloadUrl = authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/certificates/' + attribute + '/generate-and-download'
580
+ var realmCertificate = false;
581
+ }
582
+
583
+ var jks = {
584
+ keyAlias: client.clientId,
585
+ realmAlias: realm.realm,
586
+ realmCertificate: realmCertificate
587
+ };
588
+
589
+ $scope.keyFormats = [
590
+ "JKS",
591
+ "PKCS12"
592
+ ];
593
+
594
+ var keyInfo = ClientCertificate.get({ realm : realm.realm, client : client.id, attribute: attribute },
595
+ function() {
596
+ $scope.keyInfo = keyInfo;
597
+ }
598
+ );
599
+ $scope.jks = jks;
600
+ $scope.jks.format = $scope.keyFormats[0];
601
+
602
+ $scope.download = function() {
603
+ $http({
604
+ url: downloadUrl,
605
+ method: 'POST',
606
+ responseType: 'arraybuffer',
607
+ data: $scope.jks,
608
+ headers: {
609
+ 'Content-Type': 'application/json',
610
+ 'Accept': 'application/octet-stream'
611
+ }
612
+ }).then(function(response){
613
+ var blob = new Blob([response.data], {
614
+ type: 'application/octet-stream'
615
+ });
616
+ var ext = ".jks";
617
+ if ($scope.jks.format == 'PKCS12') ext = ".p12";
618
+
619
+ if (callingContext == 'oidc') {
620
+ $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/oidc/keys");
621
+ Notifications.success("New keypair and certificate generated successfully. Download keystore file")
622
+ }
623
+
624
+ saveAs(blob, 'keystore' + ext);
625
+ }).catch(function(response) {
626
+ var errorMsg = 'Error downloading';
627
+ try {
628
+ var error = JSON.parse(String.fromCharCode.apply(null, new Uint8Array(response.data)));
629
+ errorMsg = error['error_description'] ? error['error_description'] : errorMsg;
630
+ } catch (err) {
631
+ }
632
+ Notifications.error(errorMsg);
633
+ });
634
+ }
635
+
636
+ $scope.$watch(function() {
637
+ return $location.path();
638
+ }, function() {
639
+ $scope.path = $location.path().substring(1).split("/");
640
+ });
641
+
642
+ $scope.cancel = function() {
643
+ $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/oidc/keys");
644
+ }
645
+ });
646
+
647
+ module.controller('ClientOidcKeyCtrl', function($scope, $location, realm, client, Client, ClientCertificate, Notifications, $route) {
648
+ $scope.realm = realm;
649
+ $scope.client = angular.copy(client);
650
+
651
+ var signingKeyInfo = ClientCertificate.get({ realm : realm.realm, client : client.id, attribute: 'jwt.credential' },
652
+ function() {
653
+ $scope.signingKeyInfo = signingKeyInfo;
654
+ }
655
+ );
656
+
657
+ $scope.changed = false;
658
+
659
+ $scope.$watch('client', function() {
660
+ if (!angular.equals($scope.client, client)) {
661
+ $scope.changed = true;
662
+ }
663
+ }, true);
664
+
665
+ if ($scope.client.attributes["use.jwks.url"]) {
666
+ if ($scope.client.attributes["use.jwks.url"] == "true") {
667
+ $scope.useJwksUrl = true;
668
+ } else {
669
+ $scope.useJwksUrl = false;
670
+ }
671
+ }
672
+
673
+ if ($scope.client.attributes["use.jwks.string"]) {
674
+ if ($scope.client.attributes["use.jwks.string"] == "true") {
675
+ $scope.useJwksString = true;
676
+ } else {
677
+ $scope.useJwksString = false;
678
+ }
679
+ }
680
+
681
+ $scope.jwksUrlSwitchChange = function() {
682
+ $scope.changed = true;
683
+ if ($scope.useJwksUrl == false) {
684
+ $scope.useJwksString = false;
685
+ }
686
+ }
687
+
688
+ $scope.jwksStringSwitchChange = function() {
689
+ $scope.changed = true;
690
+ if ($scope.useJwksString == false) {
691
+ $scope.useJwksUrl = false;
692
+ }
693
+ }
694
+
695
+ $scope.save = function() {
696
+
697
+ if ($scope.useJwksUrl == true) {
698
+ $scope.client.attributes["use.jwks.url"] = "true";
699
+ } else {
700
+ $scope.client.attributes["use.jwks.url"] = "false";
701
+ }
702
+
703
+ if ($scope.useJwksString == true) {
704
+ $scope.client.attributes["use.jwks.string"] = "true";
705
+ } else {
706
+ $scope.client.attributes["use.jwks.string"] = "false";
707
+ }
708
+
709
+ Client.update({
710
+ realm : realm.realm,
711
+ client : client.id
712
+ }, $scope.client, function() {
713
+ $scope.changed = false;
714
+ client = angular.copy($scope.client);
715
+ Notifications.success("OIDC key has been saved to the client.");
716
+ });
717
+ };
718
+
719
+ $scope.importCertificate = function() {
720
+ $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/oidc/Signing/import/jwt.credential");
721
+ };
722
+
723
+ $scope.generateSigningKey = function() {
724
+ $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/oidc/Signing/export/jwt.credential");
725
+ };
726
+
727
+ $scope.reset = function() {
728
+ $route.reload();
729
+ };
730
+ });
731
+
732
+ module.controller('ClientSessionsCtrl', function($scope, realm, sessionCount, client,
733
+ ClientUserSessions) {
734
+ $scope.realm = realm;
735
+ $scope.count = sessionCount.count;
736
+ $scope.sessions = [];
737
+ $scope.client = client;
738
+
739
+ $scope.page = 0;
740
+
741
+ $scope.query = {
742
+ realm : realm.realm,
743
+ client: $scope.client.id,
744
+ max : 5,
745
+ first : 0
746
+ }
747
+
748
+ $scope.firstPage = function() {
749
+ $scope.query.first = 0;
750
+ if ($scope.query.first < 0) {
751
+ $scope.query.first = 0;
752
+ }
753
+ $scope.loadUsers();
754
+ }
755
+
756
+ $scope.previousPage = function() {
757
+ $scope.query.first -= parseInt($scope.query.max);
758
+ if ($scope.query.first < 0) {
759
+ $scope.query.first = 0;
760
+ }
761
+ $scope.loadUsers();
762
+ }
763
+
764
+ $scope.nextPage = function() {
765
+ $scope.query.first += parseInt($scope.query.max);
766
+ $scope.loadUsers();
767
+ }
768
+
769
+ $scope.toDate = function(val) {
770
+ return new Date(val);
771
+ };
772
+
773
+ $scope.loadUsers = function() {
774
+ ClientUserSessions.query($scope.query, function(updated) {
775
+ $scope.sessions = updated;
776
+ })
777
+ };
778
+ });
779
+
780
+ module.controller('ClientOfflineSessionsCtrl', function($scope, realm, offlineSessionCount, client,
781
+ ClientOfflineSessions) {
782
+ $scope.realm = realm;
783
+ $scope.count = offlineSessionCount.count;
784
+ $scope.sessions = [];
785
+ $scope.client = client;
786
+
787
+ $scope.page = 0;
788
+
789
+ $scope.query = {
790
+ realm : realm.realm,
791
+ client: $scope.client.id,
792
+ max : 5,
793
+ first : 0
794
+ }
795
+
796
+ $scope.firstPage = function() {
797
+ $scope.query.first = 0;
798
+ if ($scope.query.first < 0) {
799
+ $scope.query.first = 0;
800
+ }
801
+ $scope.loadUsers();
802
+ }
803
+
804
+ $scope.previousPage = function() {
805
+ $scope.query.first -= parseInt($scope.query.max);
806
+ if ($scope.query.first < 0) {
807
+ $scope.query.first = 0;
808
+ }
809
+ $scope.loadUsers();
810
+ }
811
+
812
+ $scope.nextPage = function() {
813
+ $scope.query.first += parseInt($scope.query.max);
814
+ $scope.loadUsers();
815
+ }
816
+
817
+ $scope.toDate = function(val) {
818
+ return new Date(val);
819
+ };
820
+
821
+ $scope.loadUsers = function() {
822
+ ClientOfflineSessions.query($scope.query, function(updated) {
823
+ $scope.sessions = updated;
824
+ })
825
+ };
826
+ });
827
+
828
+ module.controller('ClientRoleDetailCtrl', function($scope, $route, realm, client, role, roles, Client,
829
+ Role, ClientRole, RoleById, RoleRealmComposites, RoleClientComposites,
830
+ $http, $location, Dialog, Notifications, ComponentUtils) {
831
+ $scope.realm = realm;
832
+ $scope.client = client;
833
+ $scope.role = angular.copy(role);
834
+ $scope.create = !role.name;
835
+
836
+ $scope.changed = $scope.create;
837
+
838
+ $scope.save = function() {
839
+ convertAttributeValuesToLists();
840
+ if ($scope.create) {
841
+ ClientRole.save({
842
+ realm: realm.realm,
843
+ client : client.id
844
+ }, $scope.role, function (data, headers) {
845
+ $scope.changed = false;
846
+ convertAttributeValuesToString($scope.role);
847
+ role = angular.copy($scope.role);
848
+
849
+ ClientRole.get({ realm: realm.realm, client : client.id, role: role.name }, function(role) {
850
+ var id = role.id;
851
+ $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/roles/" + id);
852
+ Notifications.success("The role has been created.");
853
+ });
854
+ });
855
+ } else {
856
+ $scope.update();
857
+ }
858
+ };
859
+
860
+ $scope.remove = function() {
861
+ Dialog.confirmDelete($scope.role.name, 'role', function() {
862
+ $scope.role.$remove({
863
+ realm : realm.realm,
864
+ client : client.id,
865
+ role : $scope.role.id
866
+ }, function() {
867
+ $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/roles");
868
+ Notifications.success("The role has been deleted.");
869
+ });
870
+ });
871
+ };
872
+
873
+ $scope.cancel = function () {
874
+ $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/roles");
875
+ };
876
+
877
+ $scope.addAttribute = function() {
878
+ $scope.role.attributes[$scope.newAttribute.key] = $scope.newAttribute.value;
879
+ delete $scope.newAttribute;
880
+ }
881
+
882
+ $scope.removeAttribute = function(key) {
883
+ delete $scope.role.attributes[key];
884
+ }
885
+
886
+ function convertAttributeValuesToLists() {
887
+ var attrs = $scope.role.attributes;
888
+ for (var attribute in attrs) {
889
+ if (typeof attrs[attribute] === "string") {
890
+ var attrVals = attrs[attribute].split("##");
891
+ attrs[attribute] = attrVals;
892
+ }
893
+ }
894
+ }
895
+
896
+ function convertAttributeValuesToString(role) {
897
+ var attrs = role.attributes;
898
+ for (var attribute in attrs) {
899
+ if (typeof attrs[attribute] === "object") {
900
+ var attrVals = attrs[attribute].join("##");
901
+ attrs[attribute] = attrVals;
902
+ }
903
+ }
904
+ }
905
+
906
+ roleControl($scope, $route, realm, role, roles, Client,
907
+ ClientRole, RoleById, RoleRealmComposites, RoleClientComposites,
908
+ $http, $location, Notifications, Dialog, ComponentUtils);
909
+
910
+ });
911
+
912
+ module.controller('ClientRoleMembersCtrl', function($scope, realm, client, role, ClientRoleMembership, Dialog, Notifications, $location) {
913
+ $scope.realm = realm;
914
+ $scope.page = 0;
915
+ $scope.role = role;
916
+ $scope.client = client;
917
+
918
+ $scope.query = {
919
+ realm: realm.realm,
920
+ role: role.name,
921
+ client: client.id,
922
+ max : 5,
923
+ first : 0
924
+ }
925
+
926
+ $scope.firstPage = function() {
927
+ $scope.query.first = 0;
928
+ $scope.searchQuery();
929
+ }
930
+
931
+ $scope.previousPage = function() {
932
+ $scope.query.first -= parseInt($scope.query.max);
933
+ if ($scope.query.first < 0) {
934
+ $scope.query.first = 0;
935
+ }
936
+ $scope.searchQuery();
937
+ }
938
+
939
+ $scope.nextPage = function() {
940
+ $scope.query.first += parseInt($scope.query.max);
941
+ $scope.searchQuery();
942
+ }
943
+
944
+ $scope.searchQuery = function() {
945
+ $scope.searchLoaded = false;
946
+
947
+ $scope.users = ClientRoleMembership.query($scope.query, function() {
948
+ console.log('search loaded');
949
+ $scope.searchLoaded = true;
950
+ $scope.lastSearch = $scope.query.search;
951
+ });
952
+ };
953
+
954
+ $scope.searchQuery();
955
+ });
956
+
957
+ module.controller('ClientImportCtrl', function($scope, $location, $upload, realm, serverInfo, Notifications) {
958
+
959
+ $scope.realm = realm;
960
+
961
+ $scope.files = [];
962
+
963
+ $scope.onFileSelect = function($files) {
964
+ $scope.files = $files;
965
+ };
966
+
967
+ $scope.clearFileSelect = function() {
968
+ $scope.files = null;
969
+ }
970
+
971
+ $scope.uploadFile = function() {
972
+ //$files: an array of files selected, each file has name, size, and type.
973
+ for (var i = 0; i < $scope.files.length; i++) {
974
+ var $file = $scope.files[i];
975
+ $scope.upload = $upload.upload({
976
+ url: authUrl + '/admin/realms/' + realm.realm + '/client-importers/' + $scope.configFormat.id + '/upload',
977
+ // method: POST or PUT,
978
+ // headers: {'headerKey': 'headerValue'}, withCredential: true,
979
+ data: {myObj: ""},
980
+ file: $file
981
+ /* set file formData name for 'Content-Desposition' header. Default: 'file' */
982
+ //fileFormDataName: myFile,
983
+ /* customize how data is added to formData. See #40#issuecomment-28612000 for example */
984
+ //formDataAppender: function(formData, key, val){}
985
+ }).success(function(data, status, headers) {
986
+ Notifications.success("Uploaded successfully.");
987
+ $location.url("/realms/" + realm.realm + "/clients");
988
+ })
989
+ .error(function() {
990
+ Notifications.error("The file can not be uploaded. Please verify the file.");
991
+
992
+ });
993
+ //.then(success, error, progress);
994
+ }
995
+ };
996
+
997
+ $scope.$watch(function() {
998
+ return $location.path();
999
+ }, function() {
1000
+ $scope.path = $location.path().substring(1).split("/");
1001
+ });
1002
+ });
1003
+
1004
+
1005
+ module.controller('ClientListCtrl', function($scope, realm, Client, ClientListSearchState, $route, Dialog, Notifications) {
1006
+ $scope.init = function() {
1007
+ $scope.realm = realm;
1008
+ $scope.searchLoaded = true;
1009
+
1010
+ ClientListSearchState.query.realm = realm.realm;
1011
+ $scope.query = ClientListSearchState.query;
1012
+
1013
+ if (!ClientListSearchState.isFirstSearch) {
1014
+ $scope.searchQuery();
1015
+ } else {
1016
+ $scope.query.clientId = null;
1017
+ $scope.firstPage();
1018
+ }
1019
+ };
1020
+
1021
+ $scope.searchQuery = function() {
1022
+ console.log("query.search: ", $scope.query);
1023
+ $scope.searchLoaded = false;
1024
+
1025
+ $scope.clients = Client.query($scope.query, function() {
1026
+ $scope.searchLoaded = true;
1027
+ $scope.lastSearch = $scope.query.search;
1028
+ ClientListSearchState.isFirstSearch = false;
1029
+ });
1030
+ };
1031
+
1032
+ $scope.firstPage = function() {
1033
+ $scope.query.first = 0;
1034
+ $scope.searchQuery();
1035
+ }
1036
+
1037
+ $scope.previousPage = function() {
1038
+ $scope.query.first -= parseInt($scope.query.max);
1039
+ if ($scope.query.first < 0) {
1040
+ $scope.query.first = 0;
1041
+ }
1042
+ $scope.searchQuery();
1043
+ }
1044
+
1045
+ $scope.nextPage = function() {
1046
+ $scope.query.first += parseInt($scope.query.max);
1047
+ $scope.searchQuery();
1048
+ }
1049
+
1050
+ $scope.removeClient = function(client) {
1051
+ Dialog.confirmDelete(client.clientId, 'client', function() {
1052
+ Client.remove({
1053
+ realm : realm.realm,
1054
+ client : client.id
1055
+ }, function() {
1056
+ $route.reload();
1057
+ Notifications.success("The client has been deleted.");
1058
+ });
1059
+ });
1060
+ };
1061
+
1062
+ $scope.exportClient = function(client) {
1063
+ var clientCopy = angular.copy(client);
1064
+ delete clientCopy.id;
1065
+
1066
+ if (clientCopy.protocolMappers) {
1067
+ for (var i = 0; i < clientCopy.protocolMappers.length; i++) {
1068
+ delete clientCopy.protocolMappers[i].id;
1069
+ }
1070
+ }
1071
+
1072
+ saveAs(new Blob([angular.toJson(clientCopy, 4)], { type: 'application/json' }), clientCopy.clientId + '.json');
1073
+ }
1074
+ });
1075
+
1076
+ module.controller('ClientInstallationCtrl', function($scope, realm, client, serverInfo, ClientInstallation,$http, $routeParams) {
1077
+ $scope.realm = realm;
1078
+ $scope.client = client;
1079
+ $scope.installation = null;
1080
+ $scope.download = null;
1081
+ $scope.configFormat = null;
1082
+ $scope.filename = null;
1083
+
1084
+ var protocol = client.protocol;
1085
+ if (!protocol) protocol = 'openid-connect';
1086
+ $scope.configFormats = serverInfo.clientInstallations[protocol];
1087
+ console.log('configFormats.length: ' + $scope.configFormats.length);
1088
+
1089
+ $scope.changeFormat = function() {
1090
+ var url = ClientInstallation.url({ realm: $routeParams.realm, client: $routeParams.client, provider: $scope.configFormat.id });
1091
+ if ($scope.configFormat.mediaType == 'application/zip') {
1092
+ $http({
1093
+ url: url,
1094
+ method: 'GET',
1095
+ responseType: 'arraybuffer',
1096
+ cache: false
1097
+ }).then(function(response) {
1098
+ var installation = response.data;
1099
+ $scope.installation = installation;
1100
+ }
1101
+ );
1102
+ } else {
1103
+ $http.get(url).then(function (response) {
1104
+ var installation = response.data;
1105
+ if ($scope.configFormat.mediaType == 'application/json') {
1106
+ installation = angular.fromJson(response.data);
1107
+ installation = angular.toJson(installation, true);
1108
+ }
1109
+ $scope.installation = installation;
1110
+ });
1111
+ }
1112
+
1113
+ };
1114
+ $scope.download = function() {
1115
+ saveAs(new Blob([$scope.installation], { type: $scope.configFormat.mediaType }), $scope.configFormat.filename);
1116
+ }
1117
+ });
1118
+
1119
+
1120
+ module.controller('ClientDetailCtrl', function($scope, realm, client, flows, $route, serverInfo, Client, ClientDescriptionConverter, Components, ClientStorageOperations, $location, $modal, Dialog, Notifications, TimeUnit2) {
1121
+ $scope.serverInfo = serverInfo;
1122
+ $scope.flows = [];
1123
+ $scope.clientFlows = [];
1124
+ var emptyFlow = {
1125
+ id: "",
1126
+ alias: ""
1127
+ }
1128
+ for (var i=0 ; i<flows.length ; i++) {
1129
+ if (flows[i].providerId == 'client-flow') {
1130
+ $scope.clientFlows.push(flows[i]);
1131
+ } else {
1132
+ $scope.flows.push(flows[i]);
1133
+ }
1134
+ }
1135
+ $scope.flows.push(emptyFlow)
1136
+ $scope.clientFlows.push(emptyFlow)
1137
+ var deletedSomeDefaultAcrValue = false;
1138
+
1139
+
1140
+ $scope.accessTypes = [
1141
+ "confidential",
1142
+ "public",
1143
+ "bearer-only"
1144
+ ];
1145
+
1146
+ $scope.protocols = serverInfo.listProviderIds('login-protocol');
1147
+
1148
+ $scope.signatureAlgorithms = [
1149
+ "RSA_SHA1",
1150
+ "RSA_SHA256",
1151
+ "RSA_SHA256_MGF1",
1152
+ "RSA_SHA512",
1153
+ "RSA_SHA512_MGF1",
1154
+ "DSA_SHA1"
1155
+ ];
1156
+ $scope.nameIdFormats = [
1157
+ "username",
1158
+ "email",
1159
+ "transient",
1160
+ "persistent"
1161
+ ];
1162
+ $scope.xmlKeyNameTranformers = [
1163
+ "NONE",
1164
+ "KEY_ID",
1165
+ "CERT_SUBJECT"
1166
+ ];
1167
+
1168
+ $scope.canonicalization = [
1169
+ {name: "EXCLUSIVE", value: "http://www.w3.org/2001/10/xml-exc-c14n#" },
1170
+ {name: "EXCLUSIVE_WITH_COMMENTS", value: "http://www.w3.org/2001/10/xml-exc-c14n#WithComments"},
1171
+ {name: "INCLUSIVE", value: "http://www.w3.org/TR/2001/REC-xml-c14n-20010315" },
1172
+ {name: "INCLUSIVE_WITH_COMMENTS", value: "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"}
1173
+ ];
1174
+
1175
+ $scope.requestObjectRequiredOptions = [
1176
+ "not required",
1177
+ "request or request_uri",
1178
+ "request only",
1179
+ "request_uri only"
1180
+ ];
1181
+
1182
+ $scope.changePkceCodeChallengeMethodOptions = [
1183
+ "S256",
1184
+ "plain",
1185
+ ""
1186
+ ];
1187
+
1188
+ $scope.realm = realm;
1189
+ $scope.samlAuthnStatement = false;
1190
+ $scope.samlOneTimeUseCondition = false;
1191
+ $scope.samlMultiValuedRoles = false;
1192
+ $scope.samlArtifactBinding = false;
1193
+ $scope.samlServerSignature = false;
1194
+ $scope.samlServerSignatureEnableKeyInfoExtension = false;
1195
+ $scope.samlAssertionSignature = false;
1196
+ $scope.samlClientSignature = false;
1197
+ $scope.samlEncrypt = false;
1198
+ $scope.samlForcePostBinding = false;
1199
+ $scope.samlForceNameIdFormat = false;
1200
+ $scope.samlAllowECPFlow = false;
1201
+ $scope.samlXmlKeyNameTranformer = $scope.xmlKeyNameTranformers[1];
1202
+ $scope.disableAuthorizationTab = !client.authorizationServicesEnabled;
1203
+ $scope.disableServiceAccountRolesTab = !client.serviceAccountsEnabled;
1204
+ $scope.disableCredentialsTab = client.publicClient;
1205
+ $scope.oauth2DeviceAuthorizationGrantEnabled = false;
1206
+ $scope.oidcCibaGrantEnabled = false;
1207
+ // KEYCLOAK-6771 Certificate Bound Token
1208
+ // https://tools.ietf.org/html/draft-ietf-oauth-mtls-08#section-3
1209
+ $scope.tlsClientCertificateBoundAccessTokens = false;
1210
+ $scope.useRefreshTokens = true;
1211
+ $scope.useIdTokenAsDetachedSignature = false;
1212
+
1213
+ $scope.accessTokenLifespan = TimeUnit2.asUnit(client.attributes['access.token.lifespan']);
1214
+ $scope.samlAssertionLifespan = TimeUnit2.asUnit(client.attributes['saml.assertion.lifespan']);
1215
+ $scope.clientSessionIdleTimeout = TimeUnit2.asUnit(client.attributes['client.session.idle.timeout']);
1216
+ $scope.clientSessionMaxLifespan = TimeUnit2.asUnit(client.attributes['client.session.max.lifespan']);
1217
+ $scope.clientOfflineSessionIdleTimeout = TimeUnit2.asUnit(client.attributes['client.offline.session.idle.timeout']);
1218
+ $scope.clientOfflineSessionMaxLifespan = TimeUnit2.asUnit(client.attributes['client.offline.session.max.lifespan']);
1219
+ $scope.oauth2DeviceCodeLifespan = TimeUnit2.asUnit(client.attributes['oauth2.device.code.lifespan']);
1220
+ $scope.oauth2DevicePollingInterval = parseInt(client.attributes['oauth2.device.polling.interval']);
1221
+
1222
+ // PAR request.
1223
+ $scope.requirePushedAuthorizationRequests = false;
1224
+
1225
+ if(client.origin) {
1226
+ if ($scope.access.viewRealm) {
1227
+ Components.get({realm: realm.realm, componentId: client.origin}, function (link) {
1228
+ $scope.originName = link.name;
1229
+ //$scope.originLink = "#/realms/" + realm.realm + "/user-storage/providers/" + link.providerId + "/" + link.id;
1230
+ })
1231
+ }
1232
+ else {
1233
+ // KEYCLOAK-4328
1234
+ ClientStorageOperations.simpleName.get({realm: realm.realm, componentId: client.origin}, function (link) {
1235
+ $scope.originName = link.name;
1236
+ //$scope.originLink = $location.absUrl();
1237
+ })
1238
+ }
1239
+ } else {
1240
+ console.log("origin is null");
1241
+ }
1242
+
1243
+
1244
+ function updateProperties() {
1245
+ if (!$scope.client.attributes) {
1246
+ $scope.client.attributes = {};
1247
+ }
1248
+ $scope.accessType = $scope.accessTypes[0];
1249
+ if ($scope.client.bearerOnly) {
1250
+ $scope.accessType = $scope.accessTypes[2];
1251
+ } else if ($scope.client.publicClient) {
1252
+ $scope.accessType = $scope.accessTypes[1];
1253
+ }
1254
+ if ($scope.client.protocol) {
1255
+ $scope.protocol = $scope.protocols[$scope.protocols.indexOf($scope.client.protocol)];
1256
+ } else {
1257
+ $scope.protocol = $scope.protocols[0];
1258
+ }
1259
+ if ($scope.client.attributes['saml.signature.algorithm'] == 'RSA_SHA1') {
1260
+ $scope.signatureAlgorithm = $scope.signatureAlgorithms[0];
1261
+ } else if ($scope.client.attributes['saml.signature.algorithm'] == 'RSA_SHA256') {
1262
+ $scope.signatureAlgorithm = $scope.signatureAlgorithms[1];
1263
+ } else if ($scope.client.attributes['saml.signature.algorithm'] == 'RSA_SHA256_MGF1') {
1264
+ $scope.signatureAlgorithm = $scope.signatureAlgorithms[2];
1265
+ } else if ($scope.client.attributes['saml.signature.algorithm'] == 'RSA_SHA512') {
1266
+ $scope.signatureAlgorithm = $scope.signatureAlgorithms[3];
1267
+ } else if ($scope.client.attributes['saml.signature.algorithm'] == 'RSA_SHA512_MGF1') {
1268
+ $scope.signatureAlgorithm = $scope.signatureAlgorithms[4];
1269
+ } else if ($scope.client.attributes['saml.signature.algorithm'] == 'DSA_SHA1') {
1270
+ $scope.signatureAlgorithm = $scope.signatureAlgorithms[5];
1271
+ }
1272
+ if ($scope.client.attributes['saml_name_id_format'] == 'username') {
1273
+ $scope.nameIdFormat = $scope.nameIdFormats[0];
1274
+ } else if ($scope.client.attributes['saml_name_id_format'] == 'email') {
1275
+ $scope.nameIdFormat = $scope.nameIdFormats[1];
1276
+ } else if ($scope.client.attributes['saml_name_id_format'] == 'transient') {
1277
+ $scope.nameIdFormat = $scope.nameIdFormats[2];
1278
+ } else if ($scope.client.attributes['saml_name_id_format'] == 'persistent') {
1279
+ $scope.nameIdFormat = $scope.nameIdFormats[3];
1280
+ }
1281
+
1282
+
1283
+ if ($scope.client.attributes["saml.artifact.binding"]) {
1284
+ if ($scope.client.attributes["saml.artifact.binding"] == "true") {
1285
+ $scope.samlArtifactBinding = true;
1286
+ } else {
1287
+ $scope.samlArtifactBinding = false;
1288
+ }
1289
+ }
1290
+
1291
+ if ($scope.client.attributes["saml.server.signature"]) {
1292
+ if ($scope.client.attributes["saml.server.signature"] == "true") {
1293
+ $scope.samlServerSignature = true;
1294
+ } else {
1295
+ $scope.samlServerSignature = false;
1296
+
1297
+ }
1298
+ }
1299
+ if ($scope.client.attributes["saml.server.signature.keyinfo.ext"]) {
1300
+ if ($scope.client.attributes["saml.server.signature.keyinfo.ext"] == "true") {
1301
+ $scope.samlServerSignatureEnableKeyInfoExtension = true;
1302
+ } else {
1303
+ $scope.samlServerSignatureEnableKeyInfoExtension = false;
1304
+ }
1305
+ }
1306
+ if ($scope.client.attributes['saml.server.signature.keyinfo.xmlSigKeyInfoKeyNameTransformer'] === 'NONE') {
1307
+ $scope.samlXmlKeyNameTranformer = $scope.xmlKeyNameTranformers[0];
1308
+ } else if ($scope.client.attributes['saml.server.signature.keyinfo.xmlSigKeyInfoKeyNameTransformer'] === 'KEY_ID') {
1309
+ $scope.samlXmlKeyNameTranformer = $scope.xmlKeyNameTranformers[1];
1310
+ } else if ($scope.client.attributes['saml.server.signature.keyinfo.xmlSigKeyInfoKeyNameTransformer'] === 'CERT_SUBJECT') {
1311
+ $scope.samlXmlKeyNameTranformer = $scope.xmlKeyNameTranformers[2];
1312
+ }
1313
+ if ($scope.client.attributes["saml.assertion.signature"]) {
1314
+ if ($scope.client.attributes["saml.assertion.signature"] == "true") {
1315
+ $scope.samlAssertionSignature = true;
1316
+ } else {
1317
+ $scope.samlAssertionSignature = false;
1318
+ }
1319
+ }
1320
+ if ($scope.client.attributes["saml.client.signature"]) {
1321
+ if ($scope.client.attributes["saml.client.signature"] == "true") {
1322
+ $scope.samlClientSignature = true;
1323
+ } else {
1324
+ $scope.samlClientSignature = false;
1325
+ }
1326
+ }
1327
+ if ($scope.client.attributes["saml.encrypt"]) {
1328
+ if ($scope.client.attributes["saml.encrypt"] == "true") {
1329
+ $scope.samlEncrypt = true;
1330
+ } else {
1331
+ $scope.samlEncrypt = false;
1332
+ }
1333
+ }
1334
+ if ($scope.client.attributes["saml.authnstatement"]) {
1335
+ if ($scope.client.attributes["saml.authnstatement"] == "true") {
1336
+ $scope.samlAuthnStatement = true;
1337
+ } else {
1338
+ $scope.samlAuthnStatement = false;
1339
+ }
1340
+ }
1341
+ if ($scope.client.attributes["saml.onetimeuse.condition"]) {
1342
+ if ($scope.client.attributes["saml.onetimeuse.condition"] == "true") {
1343
+ $scope.samlOneTimeUseCondition = true;
1344
+ } else {
1345
+ $scope.samlOneTimeUseCondition = false;
1346
+ }
1347
+ }
1348
+ if ($scope.client.attributes["saml_force_name_id_format"]) {
1349
+ if ($scope.client.attributes["saml_force_name_id_format"] == "true") {
1350
+ $scope.samlForceNameIdFormat = true;
1351
+ } else {
1352
+ $scope.samlForceNameIdFormat = false;
1353
+ }
1354
+ }
1355
+ if ($scope.client.attributes["saml.allow.ecp.flow"]) {
1356
+ if ($scope.client.attributes["saml.allow.ecp.flow"] == "true") {
1357
+ $scope.samlAllowECPFlow = true;
1358
+ } else {
1359
+ $scope.samlAllowECPFlow = false;
1360
+ }
1361
+ }
1362
+ if ($scope.client.attributes["saml.multivalued.roles"]) {
1363
+ if ($scope.client.attributes["saml.multivalued.roles"] == "true") {
1364
+ $scope.samlMultiValuedRoles = true;
1365
+ } else {
1366
+ $scope.samlMultiValuedRoles = false;
1367
+ }
1368
+ }
1369
+ if ($scope.client.attributes["saml.force.post.binding"]) {
1370
+ if ($scope.client.attributes["saml.force.post.binding"] == "true") {
1371
+ $scope.samlForcePostBinding = true;
1372
+ } else {
1373
+ $scope.samlForcePostBinding = false;
1374
+ }
1375
+ }
1376
+
1377
+ $scope.accessTokenSignedResponseAlg = $scope.client.attributes['access.token.signed.response.alg'];
1378
+ $scope.idTokenSignedResponseAlg = $scope.client.attributes['id.token.signed.response.alg'];
1379
+ $scope.idTokenEncryptedResponseAlg = $scope.client.attributes['id.token.encrypted.response.alg'];
1380
+ $scope.idTokenEncryptedResponseEnc = $scope.client.attributes['id.token.encrypted.response.enc'];
1381
+ $scope.authorizationSignedResponseAlg = $scope.client.attributes['authorization.signed.response.alg'];
1382
+ $scope.authorizationEncryptedResponseAlg = $scope.client.attributes['authorization.encrypted.response.alg'];
1383
+ $scope.authorizationEncryptedResponseEnc = $scope.client.attributes['authorization.encrypted.response.enc'];
1384
+ $scope.userInfoEncryptedResponseAlg = $scope.client.attributes['user.info.encrypted.response.alg'];
1385
+ $scope.userInfoEncryptedResponseEnc = $scope.client.attributes['user.info.encrypted.response.enc'];
1386
+
1387
+ var attrVal1 = $scope.client.attributes['user.info.response.signature.alg'];
1388
+ $scope.userInfoSignedResponseAlg = attrVal1==null ? 'unsigned' : attrVal1;
1389
+
1390
+ var attrVal2 = $scope.client.attributes['request.object.signature.alg'];
1391
+ $scope.requestObjectSignatureAlg = attrVal2==null ? 'any' : attrVal2;
1392
+
1393
+ var attrVal3 = $scope.client.attributes['request.object.required'];
1394
+ $scope.requestObjectRequired = attrVal3==null ? 'not required' : attrVal3;
1395
+
1396
+ var attrVal4 = $scope.client.attributes['pkce.code.challenge.method'];
1397
+ $scope.pkceCodeChallengeMethod = attrVal4==null ? 'none' : attrVal4;
1398
+
1399
+ var attrVal5 = $scope.client.attributes['ciba.backchannel.auth.request.signing.alg'];
1400
+ $scope.cibaBackchannelAuthRequestSigningAlg = attrVal5==null ? 'none' : attrVal5;
1401
+
1402
+ var attrVal6 = $scope.client.attributes['request.object.encryption.alg'];
1403
+ $scope.requestObjectEncryptionAlg = attrVal6==null ? 'any' : attrVal6;
1404
+
1405
+ var attrVal7 = $scope.client.attributes['request.object.encryption.enc'];
1406
+ $scope.requestObjectEncryptionEnc = attrVal7==null ? 'any' : attrVal7;
1407
+
1408
+ var attrVal8 = $scope.client.attributes['ciba.backchannel.auth.request.signing.alg'];
1409
+ $scope.cibaBackchannelAuthRequestSigningAlg = attrVal8==null ? 'any' : attrVal8;
1410
+
1411
+ if ($scope.client.attributes["exclude.session.state.from.auth.response"]) {
1412
+ if ($scope.client.attributes["exclude.session.state.from.auth.response"] == "true") {
1413
+ $scope.excludeSessionStateFromAuthResponse = true;
1414
+ } else {
1415
+ $scope.excludeSessionStateFromAuthResponse = false;
1416
+ }
1417
+ }
1418
+
1419
+ if ($scope.client.attributes["oauth2.device.authorization.grant.enabled"]) {
1420
+ if ($scope.client.attributes["oauth2.device.authorization.grant.enabled"] == "true") {
1421
+ $scope.oauth2DeviceAuthorizationGrantEnabled = true;
1422
+ } else {
1423
+ $scope.oauth2DeviceAuthorizationGrantEnabled = false;
1424
+ }
1425
+ }
1426
+
1427
+ if ($scope.client.attributes["oidc.ciba.grant.enabled"]) {
1428
+ if ($scope.client.attributes["oidc.ciba.grant.enabled"] == "true") {
1429
+ $scope.oidcCibaGrantEnabled = true;
1430
+ } else {
1431
+ $scope.oidcCibaGrantEnabled = false;
1432
+ }
1433
+ }
1434
+
1435
+ $scope.cibaBackchannelTokenDeliveryMode = $scope.client.attributes['ciba.backchannel.token.delivery.mode'];
1436
+
1437
+ if ($scope.client.attributes["use.refresh.tokens"]) {
1438
+ if ($scope.client.attributes["use.refresh.tokens"] == "true") {
1439
+ $scope.useRefreshTokens = true;
1440
+ } else {
1441
+ $scope.useRefreshTokens = false;
1442
+ }
1443
+ }
1444
+
1445
+ if ($scope.client.attributes["id.token.as.detached.signature"]) {
1446
+ if ($scope.client.attributes["id.token.as.detached.signature"] == "true") {
1447
+ $scope.useIdTokenAsDetachedSignature = true;
1448
+ } else {
1449
+ $scope.useIdTokenAsDetachedSignature = false;
1450
+ }
1451
+ }
1452
+
1453
+ // KEYCLOAK-6771 Certificate Bound Token
1454
+ // https://tools.ietf.org/html/draft-ietf-oauth-mtls-08#section-3
1455
+ if ($scope.client.attributes["tls.client.certificate.bound.access.tokens"]) {
1456
+ if ($scope.client.attributes["tls.client.certificate.bound.access.tokens"] == "true") {
1457
+ $scope.tlsClientCertificateBoundAccessTokens = true;
1458
+ } else {
1459
+ $scope.tlsClientCertificateBoundAccessTokens = false;
1460
+ }
1461
+ }
1462
+
1463
+ // PAR request.
1464
+ if ($scope.client.attributes["require.pushed.authorization.requests"]) {
1465
+ if ($scope.client.attributes["require.pushed.authorization.requests"] == "true") {
1466
+ $scope.requirePushedAuthorizationRequests = true;
1467
+ } else {
1468
+ $scope.requirePushedAuthorizationRequests = false;
1469
+ }
1470
+ }
1471
+
1472
+ var useRefreshToken = $scope.client.attributes["client_credentials.use_refresh_token"];
1473
+ if (useRefreshToken === "true") {
1474
+ $scope.useRefreshTokenForClientCredentialsGrant = true;
1475
+ } else {
1476
+ $scope.useRefreshTokenForClientCredentialsGrant = false;
1477
+ }
1478
+
1479
+ var useLowerCaseBearerTypeInTokenResponse = $scope.client.attributes["token.response.type.bearer.lower-case"];
1480
+ if (useLowerCaseBearerTypeInTokenResponse === "true") {
1481
+ $scope.useLowerCaseBearerTypeInTokenResponse = true;
1482
+ } else {
1483
+ $scope.useLowerCaseBearerTypeInTokenResponse = false;
1484
+ }
1485
+
1486
+ if ($scope.client.attributes["display.on.consent.screen"]) {
1487
+ if ($scope.client.attributes["display.on.consent.screen"] == "true") {
1488
+ $scope.displayOnConsentScreen = true;
1489
+ } else {
1490
+ $scope.displayOnConsentScreen = false;
1491
+ }
1492
+ }
1493
+
1494
+ if ($scope.client.attributes["backchannel.logout.session.required"]) {
1495
+ if ($scope.client.attributes["backchannel.logout.session.required"] == "true") {
1496
+ $scope.backchannelLogoutSessionRequired = true;
1497
+ } else {
1498
+ $scope.backchannelLogoutSessionRequired = false;
1499
+ }
1500
+ }
1501
+
1502
+ if ($scope.client.attributes["backchannel.logout.revoke.offline.tokens"]) {
1503
+ if ($scope.client.attributes["backchannel.logout.revoke.offline.tokens"] == "true") {
1504
+ $scope.backchannelLogoutRevokeOfflineSessions = true;
1505
+ } else {
1506
+ $scope.backchannelLogoutRevokeOfflineSessions = false;
1507
+ }
1508
+ }
1509
+
1510
+ if ($scope.client.attributes["frontchannel.logout.session.required"]) {
1511
+ if ($scope.client.attributes["frontchannel.logout.session.required"] == "true") {
1512
+ $scope.frontchannelLogoutSessionRequired = true;
1513
+ } else {
1514
+ $scope.frontchannelLogoutSessionRequired = false;
1515
+ }
1516
+ }
1517
+
1518
+ if ($scope.client.attributes["request.uris"] && $scope.client.attributes["request.uris"].length > 0) {
1519
+ $scope.client.requestUris = $scope.client.attributes["request.uris"].split("##");
1520
+ } else {
1521
+ $scope.client.requestUris = [];
1522
+ }
1523
+
1524
+ if ($scope.client.attributes["post.logout.redirect.uris"] && $scope.client.attributes["post.logout.redirect.uris"].length > 0) {
1525
+ $scope.postLogoutRedirectUris = $scope.client.attributes["post.logout.redirect.uris"].split("##");
1526
+ } else {
1527
+ $scope.postLogoutRedirectUris = [];
1528
+ }
1529
+
1530
+ if ($scope.client.attributes["default.acr.values"] && $scope.client.attributes["default.acr.values"].length > 0) {
1531
+ $scope.defaultAcrValues = $scope.client.attributes["default.acr.values"].split("##");
1532
+ } else {
1533
+ $scope.defaultAcrValues = [];
1534
+ }
1535
+ deletedSomeDefaultAcrValue = false;
1536
+
1537
+ try {
1538
+ $scope.acrLoaMap = JSON.parse($scope.client.attributes["acr.loa.map"] || "{}");
1539
+ } catch (e) {
1540
+ $scope.acrLoaMap = {};
1541
+ }
1542
+ }
1543
+
1544
+ if (!$scope.create) {
1545
+ $scope.client = client;
1546
+ updateProperties();
1547
+
1548
+ $scope.clientEdit = angular.copy(client);
1549
+ }
1550
+
1551
+
1552
+ $scope.samlIdpInitiatedUrl = function(ssoName) {
1553
+ return encodeURI($location.absUrl().replace(/\/admin.*/, "/realms/") + realm.realm + "/protocol/saml/clients/") + encodeURIComponent(ssoName)
1554
+ }
1555
+
1556
+ $scope.importFile = function(fileContent){
1557
+ console.debug(fileContent);
1558
+ ClientDescriptionConverter.save({
1559
+ realm: realm.realm
1560
+ }, fileContent, function (data) {
1561
+ $scope.client = data;
1562
+ updateProperties();
1563
+ $scope.importing = true;
1564
+
1565
+ $scope.clientEdit = angular.copy(client);
1566
+ });
1567
+ };
1568
+
1569
+ $scope.viewImportDetails = function() {
1570
+ $modal.open({
1571
+ templateUrl: resourceUrl + '/partials/modal/view-object.html',
1572
+ controller: 'ObjectModalCtrl',
1573
+ resolve: {
1574
+ object: function () {
1575
+ return $scope.client;
1576
+ }
1577
+ }
1578
+ })
1579
+ };
1580
+
1581
+ $scope.switchChange = function() {
1582
+ $scope.changed = true;
1583
+ }
1584
+
1585
+ $scope.changeAccessType = function() {
1586
+ if ($scope.accessType == "confidential") {
1587
+ $scope.clientEdit.bearerOnly = false;
1588
+ $scope.clientEdit.publicClient = false;
1589
+ } else if ($scope.accessType == "public") {
1590
+ $scope.clientEdit.bearerOnly = false;
1591
+ $scope.clientEdit.publicClient = true;
1592
+ } else if ($scope.accessType == "bearer-only") {
1593
+ $scope.clientEdit.bearerOnly = true;
1594
+ $scope.clientEdit.publicClient = false;
1595
+ $scope.clientEdit.alwaysDisplayInConsole = false;
1596
+ }
1597
+ };
1598
+
1599
+ $scope.changeProtocol = function() {
1600
+ if ($scope.protocol == "openid-connect") {
1601
+ $scope.clientEdit.protocol = "openid-connect";
1602
+ } else if ($scope.protocol == "saml") {
1603
+ $scope.clientEdit.protocol = "saml";
1604
+ }
1605
+ };
1606
+
1607
+ $scope.changeAlgorithm = function() {
1608
+ $scope.clientEdit.attributes['saml.signature.algorithm'] = $scope.signatureAlgorithm;
1609
+ };
1610
+
1611
+ $scope.changeNameIdFormat = function() {
1612
+ $scope.clientEdit.attributes['saml_name_id_format'] = $scope.nameIdFormat;
1613
+ };
1614
+
1615
+ $scope.changeSamlSigKeyNameTranformer = function() {
1616
+ $scope.clientEdit.attributes['saml.server.signature.keyinfo.xmlSigKeyInfoKeyNameTransformer'] = $scope.samlXmlKeyNameTranformer;
1617
+ };
1618
+
1619
+ $scope.changeAccessTokenSignedResponseAlg = function() {
1620
+ $scope.clientEdit.attributes['access.token.signed.response.alg'] = $scope.accessTokenSignedResponseAlg;
1621
+ };
1622
+
1623
+ $scope.changeIdTokenSignedResponseAlg = function() {
1624
+ $scope.clientEdit.attributes['id.token.signed.response.alg'] = $scope.idTokenSignedResponseAlg;
1625
+ };
1626
+
1627
+ $scope.changeIdTokenEncryptedResponseAlg = function() {
1628
+ $scope.clientEdit.attributes['id.token.encrypted.response.alg'] = $scope.idTokenEncryptedResponseAlg;
1629
+ };
1630
+
1631
+ $scope.changeIdTokenEncryptedResponseEnc = function() {
1632
+ $scope.clientEdit.attributes['id.token.encrypted.response.enc'] = $scope.idTokenEncryptedResponseEnc;
1633
+ };
1634
+
1635
+ $scope.changeUserInfoSignedResponseAlg = function() {
1636
+ if ($scope.userInfoSignedResponseAlg === 'unsigned') {
1637
+ $scope.clientEdit.attributes['user.info.response.signature.alg'] = null;
1638
+ } else {
1639
+ $scope.clientEdit.attributes['user.info.response.signature.alg'] = $scope.userInfoSignedResponseAlg;
1640
+ }
1641
+ };
1642
+
1643
+ $scope.changeRequestObjectSignatureAlg = function() {
1644
+ if ($scope.requestObjectSignatureAlg === 'any') {
1645
+ $scope.clientEdit.attributes['request.object.signature.alg'] = null;
1646
+ } else {
1647
+ $scope.clientEdit.attributes['request.object.signature.alg'] = $scope.requestObjectSignatureAlg;
1648
+ }
1649
+ };
1650
+
1651
+ $scope.changeRequestObjectRequired = function() {
1652
+ if ($scope.requestObjectRequired === 'not required') {
1653
+ $scope.clientEdit.attributes['request.object.required'] = null;
1654
+ } else {
1655
+ $scope.clientEdit.attributes['request.object.required'] = $scope.requestObjectRequired;
1656
+ }
1657
+ };
1658
+
1659
+ $scope.changeRequestObjectEncryptionAlg = function() {
1660
+ if ($scope.requestObjectEncryptionAlg === 'any') {
1661
+ $scope.clientEdit.attributes['request.object.encryption.alg'] = null;
1662
+ } else {
1663
+ $scope.clientEdit.attributes['request.object.encryption.alg'] = $scope.requestObjectEncryptionAlg;
1664
+ }
1665
+ };
1666
+
1667
+ $scope.changeRequestObjectEncryptionEnc = function() {
1668
+ if ($scope.requestObjectEncryptionEnc === 'any') {
1669
+ $scope.clientEdit.attributes['request.object.encryption.enc'] = null;
1670
+ } else {
1671
+ $scope.clientEdit.attributes['request.object.encryption.enc'] = $scope.requestObjectEncryptionEnc;
1672
+ }
1673
+ };
1674
+
1675
+ $scope.changeUserInfoEncryptedResponseAlg = function() {
1676
+ $scope.clientEdit.attributes['user.info.encrypted.response.alg'] = $scope.userInfoEncryptedResponseAlg;
1677
+ };
1678
+
1679
+ $scope.changeUserInfoEncryptedResponseEnc = function() {
1680
+ $scope.clientEdit.attributes['user.info.encrypted.response.enc'] = $scope.userInfoEncryptedResponseEnc;
1681
+ };
1682
+
1683
+ $scope.changePkceCodeChallengeMethod = function() {
1684
+ $scope.clientEdit.attributes['pkce.code.challenge.method'] = $scope.pkceCodeChallengeMethod;
1685
+ };
1686
+
1687
+ $scope.$watch('newAcr', function() {
1688
+ $scope.changed = isChanged();
1689
+ }, true);
1690
+ $scope.$watch('newLoa', function() {
1691
+ $scope.changed = isChanged();
1692
+ }, true);
1693
+ $scope.deleteAcrLoaMapping = function(acr) {
1694
+ delete $scope.acrLoaMap[acr];
1695
+ $scope.changed = true;
1696
+ }
1697
+ $scope.addAcrLoaMapping = function() {
1698
+ if ($scope.newLoa.match(/^[0-9]+$/)) {
1699
+ $scope.acrLoaMap[$scope.newAcr] = $scope.newLoa;
1700
+ $scope.newAcr = $scope.newLoa = "";
1701
+ $scope.changed = true;
1702
+ }
1703
+ }
1704
+
1705
+ $scope.changeCibaBackchannelAuthRequestSigningAlg = function() {
1706
+ if ($scope.cibaBackchannelAuthRequestSigningAlg === 'any') {
1707
+ $scope.clientEdit.attributes['ciba.backchannel.auth.request.signing.alg'] = null;
1708
+ } else {
1709
+ $scope.clientEdit.attributes['ciba.backchannel.auth.request.signing.alg'] = $scope.cibaBackchannelAuthRequestSigningAlg;
1710
+ }
1711
+ };
1712
+
1713
+ $scope.changeCibaBackchannelTokenDeliveryMode = function() {
1714
+ $scope.clientEdit.attributes['ciba.backchannel.token.delivery.mode'] = $scope.cibaBackchannelTokenDeliveryMode;
1715
+ };
1716
+
1717
+ $scope.changeAuthorizationSignedResponseAlg = function() {
1718
+ $scope.clientEdit.attributes['authorization.signed.response.alg'] = $scope.authorizationSignedResponseAlg;
1719
+ };
1720
+
1721
+ $scope.changeAuthorizationEncryptedResponseAlg = function() {
1722
+ $scope.clientEdit.attributes['authorization.encrypted.response.alg'] = $scope.authorizationEncryptedResponseAlg;
1723
+ };
1724
+
1725
+ $scope.changeAuthorizationEncryptedResponseEnc = function() {
1726
+ $scope.clientEdit.attributes['authorization.encrypted.response.enc'] = $scope.authorizationEncryptedResponseEnc;
1727
+ };
1728
+
1729
+ $scope.$watch(function() {
1730
+ return $location.path();
1731
+ }, function() {
1732
+ $scope.path = $location.path().substring(1).split("/");
1733
+ });
1734
+
1735
+ function isChanged() {
1736
+ if (!angular.equals($scope.client, $scope.clientEdit)) {
1737
+ return true;
1738
+ }
1739
+ if ($scope.newRedirectUri && $scope.newRedirectUri.length > 0) {
1740
+ return true;
1741
+ }
1742
+ if ($scope.newPostLogoutRedirectUri && $scope.newPostLogoutRedirectUri.length > 0) {
1743
+ return true;
1744
+ }
1745
+ if ($scope.newWebOrigin && $scope.newWebOrigin.length > 0) {
1746
+ return true;
1747
+ }
1748
+ if ($scope.newRequestUri && $scope.newRequestUri.length > 0) {
1749
+ return true;
1750
+ }
1751
+ if ($scope.newDefaultAcrValue && $scope.newDefaultAcrValue.length > 0) {
1752
+ return true;
1753
+ }
1754
+ if (deletedSomeDefaultAcrValue) return true;
1755
+ if ($scope.newAcr && $scope.newAcr.length > 0 && $scope.newLoa && $scope.newLoa.length > 0) {
1756
+ return true;
1757
+ }
1758
+ return false;
1759
+ }
1760
+
1761
+ $scope.updateTimeouts = function() {
1762
+ if ($scope.accessTokenLifespan.time) {
1763
+ if ($scope.accessTokenLifespan.time === -1) {
1764
+ $scope.clientEdit.attributes['access.token.lifespan'] = -1;
1765
+ } else {
1766
+ $scope.clientEdit.attributes['access.token.lifespan'] = $scope.accessTokenLifespan.toSeconds();
1767
+ }
1768
+ } else {
1769
+ $scope.clientEdit.attributes['access.token.lifespan'] = null;
1770
+ }
1771
+ }
1772
+
1773
+ $scope.updateAssertionLifespan = function() {
1774
+ if ($scope.samlAssertionLifespan.time) {
1775
+ $scope.clientEdit.attributes['saml.assertion.lifespan'] = $scope.samlAssertionLifespan.toSeconds();
1776
+ } else {
1777
+ $scope.clientEdit.attributes['saml.assertion.lifespan'] = null;
1778
+ }
1779
+ }
1780
+
1781
+ $scope.updateClientSessionIdleTimeout = function() {
1782
+ if ($scope.clientSessionIdleTimeout.time) {
1783
+ $scope.clientEdit.attributes['client.session.idle.timeout'] = $scope.clientSessionIdleTimeout.toSeconds();
1784
+ } else {
1785
+ $scope.clientEdit.attributes['client.session.idle.timeout'] = null;
1786
+ }
1787
+ }
1788
+
1789
+ $scope.updateClientSessionMaxLifespan = function() {
1790
+ if ($scope.clientSessionMaxLifespan.time) {
1791
+ $scope.clientEdit.attributes['client.session.max.lifespan'] = $scope.clientSessionMaxLifespan.toSeconds();
1792
+ } else {
1793
+ $scope.clientEdit.attributes['client.session.max.lifespan'] = null;
1794
+ }
1795
+ }
1796
+
1797
+ $scope.updateClientOfflineSessionIdleTimeout = function() {
1798
+ if ($scope.clientOfflineSessionIdleTimeout.time) {
1799
+ $scope.clientEdit.attributes['client.offline.session.idle.timeout'] = $scope.clientOfflineSessionIdleTimeout.toSeconds();
1800
+ } else {
1801
+ $scope.clientEdit.attributes['client.offline.session.idle.timeout'] = null;
1802
+ }
1803
+ }
1804
+
1805
+ $scope.updateClientOfflineSessionMaxLifespan = function() {
1806
+ if ($scope.clientOfflineSessionMaxLifespan.time) {
1807
+ $scope.clientEdit.attributes['client.offline.session.max.lifespan'] = $scope.clientOfflineSessionMaxLifespan.toSeconds();
1808
+ } else {
1809
+ $scope.clientEdit.attributes['client.offline.session.max.lifespan'] = null;
1810
+ }
1811
+ }
1812
+
1813
+ $scope.updateOauth2DeviceCodeLifespan = function() {
1814
+ if ($scope.oauth2DeviceCodeLifespan.time) {
1815
+ $scope.clientEdit.attributes['oauth2.device.code.lifespan'] = $scope.oauth2DeviceCodeLifespan.toSeconds();
1816
+ } else {
1817
+ $scope.clientEdit.attributes['oauth2.device.code.lifespan'] = null;
1818
+ }
1819
+ }
1820
+
1821
+ $scope.updateOauth2DevicePollingInterval = function() {
1822
+ if ($scope.oauth2DevicePollingInterval) {
1823
+ $scope.clientEdit.attributes['oauth2.device.polling.interval'] = $scope.oauth2DevicePollingInterval;
1824
+ } else {
1825
+ $scope.clientEdit.attributes['oauth2.device.polling.interval'] = null;
1826
+ }
1827
+ }
1828
+
1829
+ $scope.confirmChangeAuthzSettings = function($event) {
1830
+ if ($scope.client.authorizationServicesEnabled && $scope.clientEdit.authorizationServicesEnabled) {
1831
+ $event.preventDefault();
1832
+ Dialog.confirm("Disable Authorization Settings", "Are you sure you want to disable authorization ? Once you save your changes, all authorization settings associated with this client will be removed. This operation can not be reverted.", function () {
1833
+ $scope.clientEdit.authorizationServicesEnabled = false;
1834
+ }, function () {
1835
+ $scope.clientEdit.authorizationServicesEnabled = true;
1836
+ });
1837
+ }
1838
+ }
1839
+
1840
+ function configureAuthorizationServices() {
1841
+ if ($scope.clientEdit.authorizationServicesEnabled) {
1842
+ if ($scope.accessType == 'public') {
1843
+ $scope.accessType = 'confidential';
1844
+ }
1845
+ $scope.clientEdit.publicClient = false;
1846
+ $scope.clientEdit.serviceAccountsEnabled = true;
1847
+ } else if ($scope.clientEdit.bearerOnly) {
1848
+ $scope.clientEdit.serviceAccountsEnabled = false;
1849
+ }
1850
+ }
1851
+
1852
+ $scope.$watch('clientEdit', function() {
1853
+ $scope.changed = isChanged();
1854
+ configureAuthorizationServices();
1855
+ }, true);
1856
+
1857
+ $scope.$watch('newRedirectUri', function() {
1858
+ $scope.changed = isChanged();
1859
+ }, true);
1860
+
1861
+ $scope.$watch('newPostLogoutRedirectUri', function() {
1862
+ $scope.changed = isChanged();
1863
+ }, true);
1864
+
1865
+ $scope.$watch('newWebOrigin', function() {
1866
+ $scope.changed = isChanged();
1867
+ }, true);
1868
+
1869
+ $scope.$watch('newRequestUri', function() {
1870
+ $scope.changed = isChanged();
1871
+ }, true);
1872
+
1873
+ $scope.$watch('newDefaultAcrValue', function() {
1874
+ $scope.changed = isChanged();
1875
+ }, true);
1876
+
1877
+ $scope.deleteWebOrigin = function(index) {
1878
+ $scope.clientEdit.webOrigins.splice(index, 1);
1879
+ }
1880
+ $scope.addWebOrigin = function() {
1881
+ $scope.clientEdit.webOrigins.push($scope.newWebOrigin);
1882
+ $scope.newWebOrigin = "";
1883
+ }
1884
+ $scope.deleteRequestUri = function(index) {
1885
+ $scope.clientEdit.requestUris.splice(index, 1);
1886
+ }
1887
+ $scope.addRequestUri = function() {
1888
+ $scope.clientEdit.requestUris.push($scope.newRequestUri);
1889
+ $scope.newRequestUri = "";
1890
+ }
1891
+ $scope.deleteDefaultAcrValue = function(index) {
1892
+ $scope.defaultAcrValues.splice(index, 1);
1893
+ deletedSomeDefaultAcrValue = true;
1894
+ $scope.changed = isChanged();
1895
+ }
1896
+ $scope.addDefaultAcrValue = function() {
1897
+ $scope.defaultAcrValues.push($scope.newDefaultAcrValue);
1898
+ $scope.newDefaultAcrValue = "";
1899
+ }
1900
+ $scope.deleteRedirectUri = function(index) {
1901
+ $scope.clientEdit.redirectUris.splice(index, 1);
1902
+ }
1903
+
1904
+ $scope.addRedirectUri = function() {
1905
+ $scope.clientEdit.redirectUris.push($scope.newRedirectUri);
1906
+ $scope.newRedirectUri = "";
1907
+ }
1908
+
1909
+ $scope.deletePostLogoutRedirectUri = function(index) {
1910
+ $scope.postLogoutRedirectUris.splice(index, 1);
1911
+ }
1912
+
1913
+ $scope.addPostLogoutRedirectUri = function() {
1914
+ $scope.postLogoutRedirectUris.push($scope.newPostLogoutRedirectUri);
1915
+ $scope.newPostLogoutRedirectUri = "";
1916
+ }
1917
+
1918
+ $scope.save = function() {
1919
+ if ($scope.newRedirectUri && $scope.newRedirectUri.length > 0) {
1920
+ $scope.addRedirectUri();
1921
+ }
1922
+
1923
+ if ($scope.newWebOrigin && $scope.newWebOrigin.length > 0) {
1924
+ $scope.addWebOrigin();
1925
+ }
1926
+
1927
+ if ($scope.newRequestUri && $scope.newRequestUri.length > 0) {
1928
+ $scope.addRequestUri();
1929
+ }
1930
+ if ($scope.clientEdit.requestUris && $scope.clientEdit.requestUris.length > 0) {
1931
+ $scope.clientEdit.attributes["request.uris"] = $scope.clientEdit.requestUris.join("##");
1932
+ } else {
1933
+ $scope.clientEdit.attributes["request.uris"] = null;
1934
+ }
1935
+
1936
+ if ($scope.postLogoutRedirectUris && $scope.postLogoutRedirectUris.length > 0) {
1937
+ $scope.clientEdit.attributes["post.logout.redirect.uris"] = $scope.postLogoutRedirectUris.join("##");
1938
+ } else {
1939
+ $scope.clientEdit.attributes["post.logout.redirect.uris"] = null;
1940
+ }
1941
+
1942
+ if (!$scope.clientEdit.frontchannelLogout) {
1943
+ $scope.clientEdit.attributes["frontchannel.logout.url"] = null;
1944
+ }
1945
+ delete $scope.clientEdit.requestUris;
1946
+
1947
+ if ($scope.newDefaultAcrValue && $scope.newDefaultAcrValue.length > 0) {
1948
+ $scope.addDefaultAcrValue();
1949
+ }
1950
+ if ($scope.defaultAcrValues && $scope.defaultAcrValues.length > 0) {
1951
+ $scope.clientEdit.attributes["default.acr.values"] = $scope.defaultAcrValues.join("##");
1952
+ } else {
1953
+ $scope.clientEdit.attributes["default.acr.values"] = null;
1954
+ }
1955
+
1956
+ if ($scope.samlArtifactBinding == true) {
1957
+ $scope.clientEdit.attributes["saml.artifact.binding"] = "true";
1958
+ } else {
1959
+ $scope.clientEdit.attributes["saml.artifact.binding"] = "false";
1960
+ }
1961
+
1962
+ if ($scope.newAcr && $scope.newAcr.length > 0 && $scope.newLoa && $scope.newLoa.length > 0) {
1963
+ $scope.addAcrLoaMapping();
1964
+ }
1965
+
1966
+ if ($scope.samlServerSignature == true) {
1967
+ $scope.clientEdit.attributes["saml.server.signature"] = "true";
1968
+ } else {
1969
+ $scope.clientEdit.attributes["saml.server.signature"] = "false";
1970
+ }
1971
+ if ($scope.samlServerSignatureEnableKeyInfoExtension == true) {
1972
+ $scope.clientEdit.attributes["saml.server.signature.keyinfo.ext"] = "true";
1973
+ } else {
1974
+ $scope.clientEdit.attributes["saml.server.signature.keyinfo.ext"] = "false";
1975
+ }
1976
+ if ($scope.samlAssertionSignature == true) {
1977
+ $scope.clientEdit.attributes["saml.assertion.signature"] = "true";
1978
+ } else {
1979
+ $scope.clientEdit.attributes["saml.assertion.signature"] = "false";
1980
+ }
1981
+ if ($scope.samlClientSignature == true) {
1982
+ $scope.clientEdit.attributes["saml.client.signature"] = "true";
1983
+ } else {
1984
+ $scope.clientEdit.attributes["saml.client.signature"] = "false";
1985
+
1986
+ }
1987
+ if ($scope.samlEncrypt == true) {
1988
+ $scope.clientEdit.attributes["saml.encrypt"] = "true";
1989
+ } else {
1990
+ $scope.clientEdit.attributes["saml.encrypt"] = "false";
1991
+
1992
+ }
1993
+ if ($scope.samlAuthnStatement == true) {
1994
+ $scope.clientEdit.attributes["saml.authnstatement"] = "true";
1995
+ } else {
1996
+ $scope.clientEdit.attributes["saml.authnstatement"] = "false";
1997
+
1998
+ }
1999
+ if ($scope.samlOneTimeUseCondition == true) {
2000
+ $scope.clientEdit.attributes["saml.onetimeuse.condition"] = "true";
2001
+ } else {
2002
+ $scope.clientEdit.attributes["saml.onetimeuse.condition"] = "false";
2003
+
2004
+ }
2005
+ if ($scope.samlForceNameIdFormat == true) {
2006
+ $scope.clientEdit.attributes["saml_force_name_id_format"] = "true";
2007
+ } else {
2008
+ $scope.clientEdit.attributes["saml_force_name_id_format"] = "false";
2009
+
2010
+ }
2011
+ if ($scope.samlAllowECPFlow == true) {
2012
+ $scope.clientEdit.attributes["saml.allow.ecp.flow"] = "true";
2013
+ } else {
2014
+ $scope.clientEdit.attributes["saml.allow.ecp.flow"] = "false";
2015
+
2016
+ }
2017
+ if ($scope.samlMultiValuedRoles == true) {
2018
+ $scope.clientEdit.attributes["saml.multivalued.roles"] = "true";
2019
+ } else {
2020
+ $scope.clientEdit.attributes["saml.multivalued.roles"] = "false";
2021
+
2022
+ }
2023
+ if ($scope.samlForcePostBinding == true) {
2024
+ $scope.clientEdit.attributes["saml.force.post.binding"] = "true";
2025
+ } else {
2026
+ $scope.clientEdit.attributes["saml.force.post.binding"] = "false";
2027
+
2028
+ }
2029
+
2030
+ if ($scope.excludeSessionStateFromAuthResponse == true) {
2031
+ $scope.clientEdit.attributes["exclude.session.state.from.auth.response"] = "true";
2032
+ } else {
2033
+ $scope.clientEdit.attributes["exclude.session.state.from.auth.response"] = "false";
2034
+
2035
+ }
2036
+
2037
+ if ($scope.oauth2DeviceAuthorizationGrantEnabled == true) {
2038
+ $scope.clientEdit.attributes["oauth2.device.authorization.grant.enabled"] = "true";
2039
+ } else {
2040
+ $scope.clientEdit.attributes["oauth2.device.authorization.grant.enabled"] = "false";
2041
+ }
2042
+
2043
+ if ($scope.oidcCibaGrantEnabled == true) {
2044
+ $scope.clientEdit.attributes["oidc.ciba.grant.enabled"] = "true";
2045
+ } else {
2046
+ $scope.clientEdit.attributes["oidc.ciba.grant.enabled"] = "false";
2047
+ }
2048
+
2049
+ if ($scope.useRefreshTokens == true) {
2050
+ $scope.clientEdit.attributes["use.refresh.tokens"] = "true";
2051
+ } else {
2052
+ $scope.clientEdit.attributes["use.refresh.tokens"] = "false";
2053
+ }
2054
+
2055
+ if ($scope.useIdTokenAsDetachedSignature == true) {
2056
+ $scope.clientEdit.attributes["id.token.as.detached.signature"] = "true";
2057
+ } else {
2058
+ $scope.clientEdit.attributes["id.token.as.detached.signature"] = "false";
2059
+ }
2060
+
2061
+ // KEYCLOAK-6771 Certificate Bound Token
2062
+ // https://tools.ietf.org/html/draft-ietf-oauth-mtls-08#section-3
2063
+ if ($scope.tlsClientCertificateBoundAccessTokens == true) {
2064
+ $scope.clientEdit.attributes["tls.client.certificate.bound.access.tokens"] = "true";
2065
+ } else {
2066
+ $scope.clientEdit.attributes["tls.client.certificate.bound.access.tokens"] = "false";
2067
+ }
2068
+
2069
+ // PAR request.
2070
+ if ($scope.requirePushedAuthorizationRequests == true) {
2071
+ $scope.clientEdit.attributes["require.pushed.authorization.requests"] = "true";
2072
+ } else {
2073
+ $scope.clientEdit.attributes["require.pushed.authorization.requests"] = "false";
2074
+ }
2075
+
2076
+ // KEYCLOAK-9551 Client Credentials Grant generates refresh token
2077
+ // https://tools.ietf.org/html/rfc6749#section-4.4.3
2078
+ if ($scope.useRefreshTokenForClientCredentialsGrant === true) {
2079
+ $scope.clientEdit.attributes["client_credentials.use_refresh_token"] = "true";
2080
+ } else {
2081
+ $scope.clientEdit.attributes["client_credentials.use_refresh_token"] = "false";
2082
+ }
2083
+
2084
+ if ($scope.useLowerCaseBearerTypeInTokenResponse === true) {
2085
+ $scope.clientEdit.attributes["token.response.type.bearer.lower-case"] = "true";
2086
+ } else {
2087
+ $scope.clientEdit.attributes["token.response.type.bearer.lower-case"] = "false";
2088
+ }
2089
+
2090
+ if ($scope.displayOnConsentScreen == true) {
2091
+ $scope.clientEdit.attributes["display.on.consent.screen"] = "true";
2092
+ } else {
2093
+ $scope.clientEdit.attributes["display.on.consent.screen"] = "false";
2094
+ }
2095
+
2096
+ if ($scope.backchannelLogoutSessionRequired == true) {
2097
+ $scope.clientEdit.attributes["backchannel.logout.session.required"] = "true";
2098
+ } else {
2099
+ $scope.clientEdit.attributes["backchannel.logout.session.required"] = "false";
2100
+ }
2101
+
2102
+ if ($scope.backchannelLogoutRevokeOfflineSessions == true) {
2103
+ $scope.clientEdit.attributes["backchannel.logout.revoke.offline.tokens"] = "true";
2104
+ } else {
2105
+ $scope.clientEdit.attributes["backchannel.logout.revoke.offline.tokens"] = "false";
2106
+ }
2107
+
2108
+ if ($scope.frontchannelLogoutSessionRequired == true) {
2109
+ $scope.clientEdit.attributes["frontchannel.logout.session.required"] = "true";
2110
+ } else {
2111
+ $scope.clientEdit.attributes["frontchannel.logout.session.required"] = "false";
2112
+ }
2113
+
2114
+ $scope.clientEdit.attributes["acr.loa.map"] = JSON.stringify($scope.acrLoaMap);
2115
+
2116
+ $scope.clientEdit.protocol = $scope.protocol;
2117
+ $scope.clientEdit.attributes['saml.signature.algorithm'] = $scope.signatureAlgorithm;
2118
+ $scope.clientEdit.attributes['saml_name_id_format'] = $scope.nameIdFormat;
2119
+
2120
+ if ($scope.clientEdit.protocol != 'saml' && !$scope.clientEdit.bearerOnly && ($scope.clientEdit.standardFlowEnabled || $scope.clientEdit.implicitFlowEnabled) && (!$scope.clientEdit.redirectUris || $scope.clientEdit.redirectUris.length == 0)) {
2121
+ Notifications.error("You must specify at least one redirect uri");
2122
+ } else {
2123
+ Client.update({
2124
+ realm : realm.realm,
2125
+ client : client.id
2126
+ }, $scope.clientEdit, function() {
2127
+ $route.reload();
2128
+ Notifications.success("Your changes have been saved to the client.");
2129
+ });
2130
+ }
2131
+ };
2132
+
2133
+ $scope.reset = function() {
2134
+ $route.reload();
2135
+ };
2136
+
2137
+ $scope.cancel = function() {
2138
+ $location.url("/realms/" + realm.realm + "/clients");
2139
+ };
2140
+ });
2141
+
2142
+ module.controller('CreateClientCtrl', function($scope, realm, client, $route, serverInfo, Client, ClientDescriptionConverter, $location, $modal, Dialog, Notifications) {
2143
+ $scope.protocols = serverInfo.listProviderIds('login-protocol');
2144
+ $scope.create = true;
2145
+
2146
+ $scope.realm = realm;
2147
+
2148
+ $scope.client = {
2149
+ enabled: true,
2150
+ attributes: {}
2151
+ };
2152
+ $scope.client.redirectUris = [];
2153
+ $scope.protocol = $scope.protocols[0];
2154
+
2155
+
2156
+ $scope.importFile = function(fileContent){
2157
+ console.debug(fileContent);
2158
+ ClientDescriptionConverter.save({
2159
+ realm: realm.realm
2160
+ }, fileContent, function (data) {
2161
+ $scope.client = data;
2162
+ if (data.protocol) {
2163
+ $scope.protocol = data.protocol;
2164
+ }
2165
+ $scope.importing = true;
2166
+ });
2167
+ };
2168
+
2169
+ $scope.viewImportDetails = function() {
2170
+ $modal.open({
2171
+ templateUrl: resourceUrl + '/partials/modal/view-object.html',
2172
+ controller: 'ObjectModalCtrl',
2173
+ resolve: {
2174
+ object: function () {
2175
+ return $scope.client;
2176
+ }
2177
+ }
2178
+ })
2179
+ };
2180
+
2181
+ $scope.switchChange = function() {
2182
+ $scope.changed = true;
2183
+ }
2184
+
2185
+ $scope.changeProtocol = function() {
2186
+ if ($scope.protocol == "openid-connect") {
2187
+ $scope.client.protocol = "openid-connect";
2188
+ } else if ($scope.protocol == "saml") {
2189
+ $scope.client.protocol = "saml";
2190
+ }
2191
+ };
2192
+
2193
+ $scope.$watch(function() {
2194
+ return $location.path();
2195
+ }, function() {
2196
+ $scope.path = $location.path().substring(1).split("/");
2197
+ });
2198
+
2199
+ function isChanged() {
2200
+ if (!angular.equals($scope.client, client)) {
2201
+ return true;
2202
+ }
2203
+ return false;
2204
+ }
2205
+
2206
+ $scope.$watch('client', function() {
2207
+ $scope.changed = isChanged();
2208
+ }, true);
2209
+
2210
+
2211
+ $scope.save = function() {
2212
+ $scope.client.protocol = $scope.protocol;
2213
+
2214
+ Client.save({
2215
+ realm: realm.realm,
2216
+ client: ''
2217
+ }, $scope.client, function (data, headers) {
2218
+ $scope.changed = false;
2219
+ var l = headers().location;
2220
+ var id = l.substring(l.lastIndexOf("/") + 1);
2221
+ $location.url("/realms/" + realm.realm + "/clients/" + id);
2222
+ Notifications.success("The client has been created.");
2223
+ });
2224
+ };
2225
+
2226
+ $scope.reset = function() {
2227
+ $route.reload();
2228
+ };
2229
+
2230
+ $scope.cancel = function() {
2231
+ $location.url("/realms/" + realm.realm + "/clients");
2232
+ };
2233
+ });
2234
+
2235
+ module.controller('ClientScopeMappingCtrl', function($scope, $http, realm, $route, client, clients, Notifications,
2236
+ Client, ClientScope,
2237
+ ClientRealmScopeMapping, ClientClientScopeMapping, ClientRole,
2238
+ ClientAvailableRealmScopeMapping, ClientAvailableClientScopeMapping,
2239
+ ClientCompositeRealmScopeMapping, ClientCompositeClientScopeMapping) {
2240
+ $scope.realm = realm;
2241
+ $scope.client = angular.copy(client);
2242
+ $scope.selectedRealmRoles = [];
2243
+ $scope.selectedRealmMappings = [];
2244
+ $scope.realmMappings = [];
2245
+ $scope.clients = clients;
2246
+ $scope.clientRoles = [];
2247
+ $scope.clientComposite = [];
2248
+ $scope.selectedClientRoles = [];
2249
+ $scope.selectedClientMappings = [];
2250
+ $scope.clientMappings = [];
2251
+ $scope.dummymodel = [];
2252
+
2253
+ $scope.hideRoleSelector = function() {
2254
+ return $scope.client.fullScopeAllowed;
2255
+ }
2256
+
2257
+ $scope.changeFlag = function(event) {
2258
+ console.log('changeFlag');
2259
+ event.stopPropagation();
2260
+ event.preventDefault();
2261
+ $scope.client.fullScopeAllowed = !$scope.client.fullScopeAllowed
2262
+ Client.update({
2263
+ realm : realm.realm,
2264
+ client : client.id
2265
+ }, $scope.client, function() {
2266
+ $scope.changed = false;
2267
+ client = angular.copy($scope.client);
2268
+ updateRealmRoles();
2269
+ Notifications.success("Scope mappings updated.");
2270
+ });
2271
+ }
2272
+
2273
+
2274
+ $scope.selectedClient = null;
2275
+
2276
+ $scope.selectClient = function(client) {
2277
+ if (!client || !client.id) {
2278
+ $scope.selectedClient = null;
2279
+ return;
2280
+ }
2281
+
2282
+ $scope.selectedClient = client;
2283
+ updateClientRoles();
2284
+ }
2285
+
2286
+ function updateRealmRoles() {
2287
+ $scope.realmRoles = ClientAvailableRealmScopeMapping.query({realm : realm.realm, client : client.id});
2288
+ $scope.realmMappings = ClientRealmScopeMapping.query({realm : realm.realm, client : client.id});
2289
+ $scope.realmComposite = ClientCompositeRealmScopeMapping.query({realm : realm.realm, client : client.id});
2290
+ }
2291
+
2292
+ function updateClientRoles() {
2293
+ if ($scope.selectedClient) {
2294
+ $scope.clientRoles = ClientAvailableClientScopeMapping.query({realm : realm.realm, client : client.id, targetClient : $scope.selectedClient.id});
2295
+ $scope.clientMappings = ClientClientScopeMapping.query({realm : realm.realm, client : client.id, targetClient : $scope.selectedClient.id});
2296
+ $scope.clientComposite = ClientCompositeClientScopeMapping.query({realm : realm.realm, client : client.id, targetClient : $scope.selectedClient.id});
2297
+ } else {
2298
+ $scope.clientRoles = null;
2299
+ $scope.clientMappings = null;
2300
+ $scope.clientComposite = null;
2301
+ }
2302
+ }
2303
+
2304
+ $scope.addRealmRole = function() {
2305
+ $scope.selectedRealmRolesToAdd = JSON.parse('[' + $scope.selectedRealmRoles + ']');
2306
+ $scope.selectedRealmRoles = [];
2307
+ $http.post(authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/scope-mappings/realm',
2308
+ $scope.selectedRealmRolesToAdd).then(function() {
2309
+ updateRealmRoles();
2310
+ $scope.selectedRealmRolesToAdd = [];
2311
+ Notifications.success("Scope mappings updated.");
2312
+ });
2313
+ };
2314
+
2315
+ $scope.deleteRealmRole = function() {
2316
+ $scope.selectedRealmMappingsToRemove = JSON.parse('[' + $scope.selectedRealmMappings + ']');
2317
+ $scope.selectedRealmMappings = [];
2318
+ $http.delete(authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/scope-mappings/realm',
2319
+ {data : $scope.selectedRealmMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function () {
2320
+ updateRealmRoles();
2321
+ $scope.selectedRealmMappingsToRemove = [];
2322
+ Notifications.success("Scope mappings updated.");
2323
+ });
2324
+ };
2325
+
2326
+ $scope.addClientRole = function() {
2327
+ $scope.selectedClientRolesToAdd = JSON.parse('[' + $scope.selectedClientRoles + ']');
2328
+ $scope.selectedClientRoles = [];
2329
+ $http.post(authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/scope-mappings/clients/' + $scope.selectedClient.id,
2330
+ $scope.selectedClientRolesToAdd).then(function () {
2331
+ updateClientRoles();
2332
+ $scope.selectedClientRolesToAdd = [];
2333
+ Notifications.success("Scope mappings updated.");
2334
+ });
2335
+ };
2336
+
2337
+ $scope.deleteClientRole = function() {
2338
+ $scope.selectedClientMappingsToRemove = JSON.parse('[' + $scope.selectedClientMappings + ']');
2339
+ $scope.selectedClientMappings = [];
2340
+ $http.delete(authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/scope-mappings/clients/' + $scope.selectedClient.id,
2341
+ {data : $scope.selectedClientMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function () {
2342
+ updateClientRoles();
2343
+ $scope.selectedClientMappingsToRemove = [];
2344
+ Notifications.success("Scope mappings updated.");
2345
+ });
2346
+ };
2347
+
2348
+ clientSelectControl($scope, $route.current.params.realm, Client);
2349
+ updateRealmRoles();
2350
+ });
2351
+
2352
+ module.controller('ClientRevocationCtrl', function($scope, realm, client, Client, ClientPushRevocation, $location, Dialog, Notifications) {
2353
+ $scope.realm = realm;
2354
+ $scope.client = client;
2355
+
2356
+ var setNotBefore = function() {
2357
+ if ($scope.client.notBefore == 0) {
2358
+ $scope.notBefore = "None";
2359
+ } else {
2360
+ $scope.notBefore = new Date($scope.client.notBefore * 1000);
2361
+ }
2362
+ };
2363
+
2364
+ setNotBefore();
2365
+
2366
+ var refresh = function() {
2367
+ Client.get({ realm : realm.realm, client: $scope.client.id }, function(updated) {
2368
+ $scope.client = updated;
2369
+ setNotBefore();
2370
+ })
2371
+
2372
+ };
2373
+
2374
+ $scope.clear = function() {
2375
+ $scope.client.notBefore = 0;
2376
+ Client.update({ realm : realm.realm, client: client.id}, $scope.client, function () {
2377
+ $scope.notBefore = "None";
2378
+ Notifications.success('Not Before cleared for client.');
2379
+ refresh();
2380
+ });
2381
+ }
2382
+ $scope.setNotBeforeNow = function() {
2383
+ $scope.client.notBefore = new Date().getTime()/1000;
2384
+ Client.update({ realm : realm.realm, client: $scope.client.id}, $scope.client, function () {
2385
+ Notifications.success('Not Before set for client.');
2386
+ refresh();
2387
+ });
2388
+ }
2389
+ $scope.pushRevocation = function() {
2390
+ ClientPushRevocation.save({realm : realm.realm, client: $scope.client.id}, function (globalReqResult) {
2391
+ var successCount = globalReqResult.successRequests ? globalReqResult.successRequests.length : 0;
2392
+ var failedCount = globalReqResult.failedRequests ? globalReqResult.failedRequests.length : 0;
2393
+
2394
+ if (successCount==0 && failedCount==0) {
2395
+ Notifications.warn('No push sent. No admin URI configured or no registered cluster nodes available');
2396
+ } else if (failedCount > 0) {
2397
+ var msgStart = successCount>0 ? 'Successfully push notBefore to: ' + globalReqResult.successRequests + ' . ' : '';
2398
+ Notifications.error(msgStart + 'Failed to push notBefore to: ' + globalReqResult.failedRequests + '. Verify availability of failed hosts and try again');
2399
+ } else {
2400
+ Notifications.success('Successfully push notBefore to: ' + globalReqResult.successRequests);
2401
+ }
2402
+ });
2403
+ }
2404
+
2405
+ });
2406
+
2407
+ module.controller('ClientClusteringCtrl', function($scope, client, Client, ClientTestNodesAvailable, ClientClusterNode, realm, $location, $route, Dialog, Notifications, TimeUnit) {
2408
+ $scope.client = client;
2409
+ $scope.realm = realm;
2410
+
2411
+ var oldCopy = angular.copy($scope.client);
2412
+ $scope.changed = false;
2413
+
2414
+ $scope.$watch('client', function() {
2415
+ if (!angular.equals($scope.client, oldCopy)) {
2416
+ $scope.changed = true;
2417
+ }
2418
+ }, true);
2419
+
2420
+ $scope.client.nodeReRegistrationTimeoutUnit = TimeUnit.autoUnit(client.nodeReRegistrationTimeout);
2421
+ $scope.client.nodeReRegistrationTimeout = TimeUnit.toUnit(client.nodeReRegistrationTimeout, $scope.client.nodeReRegistrationTimeoutUnit);
2422
+
2423
+ $scope.save = function() {
2424
+ var clientCopy = angular.copy($scope.client);
2425
+ delete clientCopy['nodeReRegistrationTimeoutUnit'];
2426
+ clientCopy.nodeReRegistrationTimeout = TimeUnit.toSeconds($scope.client.nodeReRegistrationTimeout, $scope.client.nodeReRegistrationTimeoutUnit)
2427
+ Client.update({ realm : realm.realm, client : client.id }, clientCopy, function () {
2428
+ $route.reload();
2429
+ Notifications.success('Your changes have been saved to the client.');
2430
+ });
2431
+ };
2432
+
2433
+ $scope.reset = function() {
2434
+ $route.reload();
2435
+ };
2436
+
2437
+ $scope.testNodesAvailable = function() {
2438
+ ClientTestNodesAvailable.get({ realm : realm.realm, client : client.id }, function(globalReqResult) {
2439
+ $route.reload();
2440
+
2441
+ var successCount = globalReqResult.successRequests ? globalReqResult.successRequests.length : 0;
2442
+ var failedCount = globalReqResult.failedRequests ? globalReqResult.failedRequests.length : 0;
2443
+
2444
+ if (successCount==0 && failedCount==0) {
2445
+ Notifications.warn('No requests sent. No admin URI configured or no registered cluster nodes available');
2446
+ } else if (failedCount > 0) {
2447
+ var msgStart = successCount>0 ? 'Successfully verify availability for ' + globalReqResult.successRequests + ' . ' : '';
2448
+ Notifications.error(msgStart + 'Failed to verify availability for: ' + globalReqResult.failedRequests + '. Fix or unregister failed cluster nodes and try again');
2449
+ } else {
2450
+ Notifications.success('Successfully sent requests to: ' + globalReqResult.successRequests);
2451
+ }
2452
+ });
2453
+ };
2454
+
2455
+ if (client.registeredNodes) {
2456
+ var nodeRegistrations = [];
2457
+ for (node in client.registeredNodes) {
2458
+ reg = {
2459
+ host: node,
2460
+ lastRegistration: new Date(client.registeredNodes[node] * 1000)
2461
+ }
2462
+ nodeRegistrations.push(reg);
2463
+ }
2464
+
2465
+ $scope.nodeRegistrations = nodeRegistrations;
2466
+ };
2467
+
2468
+ $scope.removeNode = function(node) {
2469
+ Dialog.confirmDelete(node.host, 'node', function() {
2470
+ ClientClusterNode.remove({ realm : realm.realm, client : client.id , node: node.host }, function() {
2471
+ Notifications.success('Node ' + node.host + ' unregistered successfully.');
2472
+ $route.reload();
2473
+ });
2474
+ });
2475
+ };
2476
+ });
2477
+
2478
+ module.controller('ClientClusteringNodeCtrl', function($scope, client, Client, ClientClusterNode, realm,
2479
+ $location, $routeParams, Notifications, Dialog) {
2480
+ $scope.client = client;
2481
+ $scope.realm = realm;
2482
+ $scope.create = !$routeParams.node;
2483
+
2484
+ $scope.save = function() {
2485
+ ClientClusterNode.save({ realm : realm.realm, client : client.id , node: $scope.node.host }, function() {
2486
+ Notifications.success('Node ' + $scope.node.host + ' registered successfully.');
2487
+ $location.url('/realms/' + realm.realm + '/clients/' + client.id + '/clustering');
2488
+ });
2489
+ }
2490
+
2491
+ $scope.unregisterNode = function() {
2492
+ Dialog.confirmDelete($scope.node.host, 'node', function() {
2493
+ ClientClusterNode.remove({ realm : realm.realm, client : client.id , node: $scope.node.host }, function() {
2494
+ Notifications.success('Node ' + $scope.node.host + ' unregistered successfully.');
2495
+ $location.url('/realms/' + realm.realm + '/clients/' + client.id + '/clustering');
2496
+ });
2497
+ });
2498
+ }
2499
+
2500
+ if ($scope.create) {
2501
+ $scope.node = {}
2502
+ $scope.registered = false;
2503
+ } else {
2504
+ var lastRegTime = client.registeredNodes[$routeParams.node];
2505
+
2506
+ if (lastRegTime) {
2507
+ $scope.registered = true;
2508
+ $scope.node = {
2509
+ host: $routeParams.node,
2510
+ lastRegistration: new Date(lastRegTime * 1000)
2511
+ }
2512
+
2513
+ } else {
2514
+ $scope.registered = false;
2515
+ $scope.node = {
2516
+ host: $routeParams.node
2517
+ }
2518
+ }
2519
+ }
2520
+ });
2521
+
2522
+ module.controller('AddBuiltinProtocolMapperCtrl', function($scope, realm, client, serverInfo,
2523
+ ClientProtocolMappersByProtocol,
2524
+ $http, $location, Dialog, Notifications) {
2525
+ $scope.realm = realm;
2526
+ $scope.client = client;
2527
+ if (client.protocol == null) {
2528
+ client.protocol = 'openid-connect';
2529
+ }
2530
+
2531
+ var protocolMappers = serverInfo.protocolMapperTypes[client.protocol];
2532
+ var mapperTypes = {};
2533
+ for (var i = 0; i < protocolMappers.length; i++) {
2534
+ mapperTypes[protocolMappers[i].id] = protocolMappers[i];
2535
+ }
2536
+ $scope.mapperTypes = mapperTypes;
2537
+
2538
+
2539
+
2540
+
2541
+ var updateMappers = function() {
2542
+ var clientMappers = ClientProtocolMappersByProtocol.query({realm : realm.realm, client : client.id, protocol : client.protocol}, function() {
2543
+ var builtinMappers = serverInfo.builtinProtocolMappers[client.protocol];
2544
+ for (var i = 0; i < clientMappers.length; i++) {
2545
+ for (var j = 0; j < builtinMappers.length; j++) {
2546
+ if (builtinMappers[j].name == clientMappers[i].name
2547
+ && builtinMappers[j].protocolMapper == clientMappers[i].protocolMapper) {
2548
+ builtinMappers.splice(j, 1);
2549
+ break;
2550
+ }
2551
+ }
2552
+ }
2553
+ $scope.mappers = builtinMappers;
2554
+ for (var i = 0; i < $scope.mappers.length; i++) {
2555
+ $scope.mappers[i].isChecked = false;
2556
+ }
2557
+
2558
+
2559
+ });
2560
+ };
2561
+
2562
+ updateMappers();
2563
+
2564
+ $scope.add = function() {
2565
+ var toAdd = [];
2566
+ for (var i = 0; i < $scope.mappers.length; i++) {
2567
+ if ($scope.mappers[i].isChecked) {
2568
+ delete $scope.mappers[i].isChecked;
2569
+ toAdd.push($scope.mappers[i]);
2570
+ }
2571
+ }
2572
+ $http.post(authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/protocol-mappers/add-models',
2573
+ toAdd).then(function() {
2574
+ Notifications.success("Mappers added");
2575
+ $location.url('/realms/' + realm.realm + '/clients/' + client.id + '/mappers');
2576
+ }).catch(function() {
2577
+ Notifications.error("Error adding mappers");
2578
+ $location.url('/realms/' + realm.realm + '/clients/' + client.id + '/mappers');
2579
+ });
2580
+ };
2581
+
2582
+ });
2583
+
2584
+ module.controller('ClientProtocolMapperListCtrl', function($scope, realm, client, serverInfo,
2585
+ Client,
2586
+ ClientProtocolMappersByProtocol, ClientProtocolMapper,
2587
+ $route, Dialog, Notifications) {
2588
+ $scope.realm = realm;
2589
+ $scope.client = client;
2590
+ if (client.protocol == null) {
2591
+ client.protocol = 'openid-connect';
2592
+ }
2593
+
2594
+ $scope.changeFlag = function() {
2595
+ Client.update({
2596
+ realm : realm.realm,
2597
+ client : client.id
2598
+ }, $scope.client, function() {
2599
+ $scope.changed = false;
2600
+ client = angular.copy($scope.client);
2601
+ Notifications.success("Client updated.");
2602
+ });
2603
+ }
2604
+
2605
+ var protocolMappers = serverInfo.protocolMapperTypes[client.protocol];
2606
+ var mapperTypes = {};
2607
+ for (var i = 0; i < protocolMappers.length; i++) {
2608
+ mapperTypes[protocolMappers[i].id] = protocolMappers[i];
2609
+ }
2610
+ $scope.mapperTypes = mapperTypes;
2611
+
2612
+ $scope.removeMapper = function(mapper) {
2613
+ console.debug(mapper);
2614
+ Dialog.confirmDelete(mapper.name, 'mapper', function() {
2615
+ ClientProtocolMapper.remove({ realm: realm.realm, client: client.id, id : mapper.id }, function() {
2616
+ Notifications.success("The mapper has been deleted.");
2617
+ $route.reload();
2618
+ });
2619
+ });
2620
+ };
2621
+
2622
+ $scope.sortMappersByPriority = function(mapper) {
2623
+ return $scope.mapperTypes[mapper.protocolMapper].priority;
2624
+ }
2625
+
2626
+ var updateMappers = function() {
2627
+ $scope.mappers = ClientProtocolMappersByProtocol.query({realm : realm.realm, client : client.id, protocol : client.protocol});
2628
+ };
2629
+
2630
+ updateMappers();
2631
+ });
2632
+
2633
+ module.controller('ClientProtocolMapperCtrl', function($scope, realm, serverInfo, client, clients, mapper, ClientProtocolMapper, Notifications, Dialog, $location) {
2634
+ $scope.realm = realm;
2635
+ $scope.clients = clients;
2636
+
2637
+ /*
2638
+ $scope.client = client;
2639
+ $scope.create = false;
2640
+ $scope.protocol = client.protocol;
2641
+ $scope.mapper = angular.copy(mapper);
2642
+ $scope.changed = false;
2643
+ */
2644
+
2645
+ if (client.protocol == null) {
2646
+ client.protocol = 'openid-connect';
2647
+ }
2648
+
2649
+ $scope.model = {
2650
+ realm: realm,
2651
+ client: client,
2652
+ create: false,
2653
+ protocol: client.protocol,
2654
+ mapper: angular.copy(mapper),
2655
+ changed: false
2656
+ };
2657
+
2658
+ var protocolMappers = serverInfo.protocolMapperTypes[client.protocol];
2659
+ for (var i = 0; i < protocolMappers.length; i++) {
2660
+ if (protocolMappers[i].id === mapper.protocolMapper) {
2661
+ $scope.model.mapperType = protocolMappers[i];
2662
+ }
2663
+ }
2664
+ $scope.$watch(function() {
2665
+ return $location.path();
2666
+ }, function() {
2667
+ $scope.path = $location.path().substring(1).split("/");
2668
+ });
2669
+
2670
+ $scope.$watch('model.mapper', function() {
2671
+ if (!angular.equals($scope.model.mapper, mapper)) {
2672
+ $scope.model.changed = true;
2673
+ }
2674
+ }, true);
2675
+
2676
+ $scope.save = function() {
2677
+ ClientProtocolMapper.update({
2678
+ realm : realm.realm,
2679
+ client: client.id,
2680
+ id : $scope.model.mapper.id
2681
+ }, $scope.model.mapper, function() {
2682
+ $scope.model.changed = false;
2683
+ mapper = angular.copy($scope.mapper);
2684
+ $location.url("/realms/" + realm.realm + '/clients/' + client.id + "/mappers/" + $scope.model.mapper.id);
2685
+ Notifications.success("Your changes have been saved.");
2686
+ });
2687
+ };
2688
+
2689
+ $scope.reset = function() {
2690
+ $scope.model.mapper = angular.copy(mapper);
2691
+ $scope.model.changed = false;
2692
+ };
2693
+
2694
+ $scope.cancel = function() {
2695
+ //$location.url("/realms");
2696
+ window.history.back();
2697
+ };
2698
+
2699
+ $scope.remove = function() {
2700
+ Dialog.confirmDelete($scope.model.mapper.name, 'mapper', function() {
2701
+ ClientProtocolMapper.remove({ realm: realm.realm, client: client.id, id : $scope.model.mapper.id }, function() {
2702
+ Notifications.success("The mapper has been deleted.");
2703
+ $location.url("/realms/" + realm.realm + '/clients/' + client.id + "/mappers");
2704
+ });
2705
+ });
2706
+ };
2707
+
2708
+ });
2709
+
2710
+ module.controller('ClientProtocolMapperCreateCtrl', function($scope, realm, serverInfo, client, clients, ClientProtocolMapper, Notifications, Dialog, $location) {
2711
+ $scope.realm = realm;
2712
+ $scope.clients = clients;
2713
+
2714
+ if (client.protocol == null) {
2715
+ client.protocol = 'openid-connect';
2716
+ }
2717
+ var protocol = client.protocol;
2718
+ /*
2719
+ $scope.client = client;
2720
+ $scope.create = true;
2721
+ $scope.protocol = protocol;
2722
+ $scope.mapper = { protocol : client.protocol, config: {}};
2723
+ $scope.mapperTypes = serverInfo.protocolMapperTypes[protocol];
2724
+ */
2725
+ $scope.model = {
2726
+ realm: realm,
2727
+ client: client,
2728
+ create: true,
2729
+ protocol: client.protocol,
2730
+ mapper: { protocol : client.protocol, config: {}},
2731
+ changed: false,
2732
+ mapperTypes: serverInfo.protocolMapperTypes[protocol]
2733
+ };
2734
+ console.log("mapper types: ", $scope.model.mapperTypes);
2735
+
2736
+ // apply default configurations on change for selected protocolmapper type.
2737
+ $scope.$watch('model.mapperType', function() {
2738
+ var currentMapperType = $scope.model.mapperType;
2739
+ var defaultConfig = {};
2740
+
2741
+ if (currentMapperType && Array.isArray(currentMapperType.properties)) {
2742
+ for (var i = 0; i < currentMapperType.properties.length; i++) {
2743
+ var property = currentMapperType.properties[i];
2744
+ if (property && property.name && property.defaultValue) {
2745
+ defaultConfig[property.name] = property.defaultValue;
2746
+ }
2747
+ }
2748
+ }
2749
+
2750
+ $scope.model.mapper.config = defaultConfig;
2751
+ }, true);
2752
+
2753
+ $scope.model.mapperType = $scope.model.mapperTypes[0];
2754
+
2755
+ $scope.$watch(function() {
2756
+ return $location.path();
2757
+ }, function() {
2758
+ $scope.path = $location.path().substring(1).split("/");
2759
+ });
2760
+
2761
+ $scope.save = function() {
2762
+ $scope.model.mapper.protocolMapper = $scope.model.mapperType.id;
2763
+ ClientProtocolMapper.save({
2764
+ realm : realm.realm, client: client.id
2765
+ }, $scope.model.mapper, function(data, headers) {
2766
+ var l = headers().location;
2767
+ var id = l.substring(l.lastIndexOf("/") + 1);
2768
+ $location.url("/realms/" + realm.realm + '/clients/' + client.id + "/mappers/" + id);
2769
+ Notifications.success("Mapper has been created.");
2770
+ });
2771
+ };
2772
+
2773
+ $scope.cancel = function() {
2774
+ //$location.url("/realms");
2775
+ window.history.back();
2776
+ };
2777
+
2778
+
2779
+ });
2780
+
2781
+
2782
+ module.controller('ClientClientScopesSetupCtrl', function($scope, realm, Realm, client, clientScopes, serverInfo,
2783
+ clientDefaultClientScopes, ClientDefaultClientScopes, clientOptionalClientScopes, ClientOptionalClientScopes, $route, Notifications, $location) {
2784
+ console.log('ClientClientScopesSetupCtrl');
2785
+
2786
+ $scope.realm = realm;
2787
+ $scope.client = client;
2788
+
2789
+ $scope.clientDefaultClientScopes = clientDefaultClientScopes;
2790
+ $scope.clientOptionalClientScopes = clientOptionalClientScopes;
2791
+
2792
+ $scope.availableClientScopes = [];
2793
+ $scope.selectedDefaultClientScopes = [];
2794
+ $scope.selectedDefDefaultClientScopes = [];
2795
+
2796
+ $scope.selectedOptionalClientScopes = [];
2797
+ $scope.selectedDefOptionalClientScopes = [];
2798
+
2799
+ // Populate available client scopes. Available client scopes are neither already assigned to 'default' or 'optional'
2800
+ for (var i = 0; i < clientScopes.length; i++) {
2801
+ var clientScope = clientScopes[i];
2802
+ var scopeName = clientScopes[i].name;
2803
+
2804
+ var available = true;
2805
+ if (clientScope.protocol != client.protocol) {
2806
+ available = false;
2807
+ }
2808
+
2809
+ for (var j = 0; j < $scope.clientDefaultClientScopes.length; j++) {
2810
+ if (scopeName === $scope.clientDefaultClientScopes[j].name) {
2811
+ available = false;
2812
+ }
2813
+ }
2814
+ for (var j = 0; j < $scope.clientOptionalClientScopes.length; j++) {
2815
+ if (scopeName === $scope.clientOptionalClientScopes[j].name) {
2816
+ available = false;
2817
+ }
2818
+ }
2819
+
2820
+ if (available) {
2821
+ $scope.availableClientScopes.push(clientScope);
2822
+ }
2823
+ }
2824
+
2825
+ $scope.addDefaultClientScope = function () {
2826
+ $scope.selectedDefaultClientScopesToAdd = JSON.parse('[' + $scope.selectedDefaultClientScopes + ']');
2827
+ toAdd = $scope.selectedDefaultClientScopesToAdd.length;
2828
+
2829
+ for (var i = 0; i < $scope.selectedDefaultClientScopesToAdd.length; i++) {
2830
+ var currentScope = $scope.selectedDefaultClientScopesToAdd[i];
2831
+
2832
+ ClientDefaultClientScopes.update({
2833
+ realm : realm.realm,
2834
+ client : client.id,
2835
+ clientScopeId : currentScope.id
2836
+ }, function () {
2837
+ toAdd = toAdd - 1;
2838
+ if (toAdd === 0) {
2839
+ $route.reload();
2840
+ Notifications.success("Default scopes updated.");
2841
+ }
2842
+ });
2843
+ }
2844
+ $scope.selectedDefaultClientScopesToAdd = [];
2845
+ };
2846
+
2847
+ $scope.deleteDefaultClientScope = function () {
2848
+ $scope.selectedDefDefaultClientScopesToRemove = JSON.parse('[' + $scope.selectedDefDefaultClientScopes + ']');
2849
+ toRemove = $scope.selectedDefDefaultClientScopesToRemove.length;
2850
+
2851
+ for (var i = 0; i < $scope.selectedDefDefaultClientScopesToRemove.length; i++) {
2852
+ var currentScope = $scope.selectedDefDefaultClientScopesToRemove[i];
2853
+
2854
+ ClientDefaultClientScopes.remove({
2855
+ realm : realm.realm,
2856
+ client : client.id,
2857
+ clientScopeId : currentScope.id
2858
+ }, function () {
2859
+ toRemove = toRemove - 1;
2860
+ if (toRemove === 0) {
2861
+ $route.reload();
2862
+ Notifications.success("Default scopes updated.");
2863
+ }
2864
+ });
2865
+ }
2866
+ $scope.selectedDefDefaultClientScopesToRemove = [];
2867
+ };
2868
+
2869
+ $scope.addOptionalClientScope = function () {
2870
+ $scope.selectedOptionalClientScopesToAdd = JSON.parse('[' + $scope.selectedOptionalClientScopes + ']');
2871
+ toAdd = $scope.selectedOptionalClientScopesToAdd.length;
2872
+
2873
+ for (var i = 0; i < $scope.selectedOptionalClientScopesToAdd.length; i++) {
2874
+ var currentScope = $scope.selectedOptionalClientScopesToAdd[i];
2875
+
2876
+ ClientOptionalClientScopes.update({
2877
+ realm : realm.realm,
2878
+ client : client.id,
2879
+ clientScopeId : currentScope.id
2880
+ }, function () {
2881
+ toAdd = toAdd - 1;
2882
+ if (toAdd === 0) {
2883
+ $route.reload();
2884
+ Notifications.success("Optional scopes updated.");
2885
+ }
2886
+ });
2887
+ }
2888
+ };
2889
+
2890
+ $scope.deleteOptionalClientScope = function () {
2891
+ $scope.selectedDefOptionalClientScopesToRemove = JSON.parse('[' + $scope.selectedDefOptionalClientScopes + ']');
2892
+ toRemove = $scope.selectedDefOptionalClientScopesToRemove.length;
2893
+
2894
+ for (var i = 0; i < $scope.selectedDefOptionalClientScopesToRemove.length; i++) {
2895
+ var currentScope = $scope.selectedDefOptionalClientScopesToRemove[i];
2896
+
2897
+ ClientOptionalClientScopes.remove({
2898
+ realm : realm.realm,
2899
+ client : client.id,
2900
+ clientScopeId : currentScope.id
2901
+ }, function () {
2902
+ toRemove = toRemove - 1;
2903
+ if (toRemove === 0) {
2904
+ $route.reload();
2905
+ Notifications.success("Optional scopes updated.");
2906
+ }
2907
+ });
2908
+ }
2909
+ $scope.selectedDefOptionalClientScopesToRemove = [];
2910
+ };
2911
+
2912
+ });
2913
+
2914
+ module.controller('ClientClientScopesEvaluateCtrl', function($scope, Realm, User, ClientEvaluateProtocolMappers, ClientEvaluateGrantedRoles,
2915
+ ClientEvaluateNotGrantedRoles, ClientEvaluateGenerateExampleAccessToken, ClientEvaluateGenerateExampleIDToken,
2916
+ ClientEvaluateGenerateExampleUserInfo, realm, client, clients, clientScopes, serverInfo, ComponentUtils,
2917
+ clientOptionalClientScopes, clientDefaultClientScopes, $route, $routeParams, $http, Notifications, $location,
2918
+ Client) {
2919
+
2920
+ console.log('ClientClientScopesEvaluateCtrl');
2921
+
2922
+ var protocolMappers = serverInfo.protocolMapperTypes[client.protocol];
2923
+ var mapperTypes = {};
2924
+ for (var i = 0; i < protocolMappers.length; i++) {
2925
+ mapperTypes[protocolMappers[i].id] = protocolMappers[i];
2926
+ }
2927
+ $scope.mapperTypes = mapperTypes;
2928
+
2929
+ $scope.realm = realm;
2930
+ $scope.client = client;
2931
+ $scope.clients = clients;
2932
+ $scope.userId = null;
2933
+
2934
+ $scope.availableClientScopes = [];
2935
+ $scope.assignedClientScopes = [];
2936
+ $scope.selectedClientScopes = [];
2937
+ $scope.selectedDefClientScopes = [];
2938
+ $scope.effectiveClientScopes = [];
2939
+
2940
+ // Populate available client scopes. Available client scopes are neither already assigned to 'default' or 'optional'
2941
+ for (var i = 0; i < clientOptionalClientScopes.length; i++) {
2942
+ $scope.availableClientScopes.push(clientOptionalClientScopes[i]);
2943
+ }
2944
+
2945
+ function clearEvalResponse() {
2946
+ $scope.protocolMappers = null;
2947
+ $scope.grantedRealmRoles = null;
2948
+ $scope.notGrantedRealmRoles = null;
2949
+ $scope.grantedClientRoles = null;
2950
+ $scope.notGrantedClientRoles = null;
2951
+ $scope.targetClient = null;
2952
+ $scope.oidcAccessToken = null;
2953
+ $scope.oidcIDToken = null;
2954
+ $scope.oidcUserInfo = null;
2955
+
2956
+ $scope.selectedTab = 0;
2957
+ }
2958
+
2959
+ function updateState() {
2960
+ // Compute scope parameter
2961
+ $scope.scopeParam = 'openid';
2962
+ for (var i = 0; i < $scope.assignedClientScopes.length; i++) {
2963
+ var currentScopeParam = $scope.assignedClientScopes[i].name;
2964
+ $scope.scopeParam = $scope.scopeParam + ' ' + currentScopeParam;
2965
+ }
2966
+
2967
+ // Compute effective scopes
2968
+ $scope.effectiveClientScopes = [];
2969
+
2970
+ for (var i = 0; i < clientDefaultClientScopes.length; i++) {
2971
+ var currentScope = clientDefaultClientScopes[i];
2972
+ $scope.effectiveClientScopes.push(currentScope);
2973
+ }
2974
+ for (var i = 0; i < $scope.assignedClientScopes.length; i++) {
2975
+ var currentScope = $scope.assignedClientScopes[i];
2976
+ $scope.effectiveClientScopes.push(currentScope);
2977
+ }
2978
+
2979
+ // Clear the evaluation response
2980
+ clearEvalResponse();
2981
+ }
2982
+
2983
+ updateState();
2984
+
2985
+
2986
+ $scope.addAppliedClientScope = function () {
2987
+ $scope.selectedClientScopesToAdd = JSON.parse('[' + $scope.selectedClientScopes + ']');
2988
+ for (var i = 0; i < $scope.selectedClientScopesToAdd.length; i++) {
2989
+ var currentScope = $scope.selectedClientScopesToAdd[i];
2990
+
2991
+ $scope.assignedClientScopes.push(currentScope);
2992
+
2993
+ var index = ComponentUtils.findIndexById($scope.availableClientScopes, currentScope.id);
2994
+ if (index > -1) {
2995
+ $scope.availableClientScopes.splice(index, 1);
2996
+ }
2997
+ }
2998
+
2999
+ $scope.selectedClientScopes = [];
3000
+ $scope.selectedClientScopesToAdd = [];
3001
+ updateState();
3002
+ };
3003
+
3004
+ $scope.deleteAppliedClientScope = function () {
3005
+ $scope.selectedDefClientScopesToRemove = JSON.parse('[' + $scope.selectedDefClientScopes + ']');
3006
+ for (var i = 0; i < $scope.selectedDefClientScopesToRemove.length; i++) {
3007
+ var currentScope = $scope.selectedDefClientScopesToRemove[i];
3008
+
3009
+ $scope.availableClientScopes.push(currentScope);
3010
+
3011
+ var index = ComponentUtils.findIndexById($scope.assignedClientScopes, currentScope.id);
3012
+ if (index > -1) {
3013
+ $scope.assignedClientScopes.splice(index, 1);
3014
+ }
3015
+ }
3016
+
3017
+ $scope.selectedDefClientScopes = [];
3018
+ $scope.selectedDefClientScopesToRemove = [];
3019
+
3020
+ updateState();
3021
+ };
3022
+
3023
+ $scope.usersUiSelect = {
3024
+ minimumInputLength: 1,
3025
+ delay: 500,
3026
+ allowClear: true,
3027
+ query: function (query) {
3028
+ var data = {results: []};
3029
+ if ('' == query.term.trim()) {
3030
+ query.callback(data);
3031
+ return;
3032
+ }
3033
+ User.query({realm: $route.current.params.realm, search: query.term.trim(), max: 20}, function(response) {
3034
+ data.results = response;
3035
+ query.callback(data);
3036
+ });
3037
+ },
3038
+ formatResult: function(object, container, query) {
3039
+ object.text = object.username;
3040
+ return object.username;
3041
+ }
3042
+ };
3043
+
3044
+ $scope.selectedUser = null;
3045
+
3046
+ $scope.selectUser = function(user) {
3047
+ clearEvalResponse();
3048
+
3049
+ if (!user || !user.id) {
3050
+ $scope.selectedUser = null;
3051
+ $scope.userId = '';
3052
+ return;
3053
+ }
3054
+
3055
+ $scope.userId = user.id;
3056
+ }
3057
+
3058
+ clientSelectControl($scope, $route.current.params.realm, Client);
3059
+
3060
+ $scope.selectedClient = null;
3061
+
3062
+ $scope.selectClient = function(client) {
3063
+ console.log("selected client: ", client);
3064
+ if (!client || !client.id) {
3065
+ $scope.selectedClient = null;
3066
+ return;
3067
+ }
3068
+
3069
+ $scope.selectedClient = client;
3070
+ updateScopeClientRoles();
3071
+ }
3072
+
3073
+
3074
+ $scope.sendEvaluationRequest = function () {
3075
+
3076
+ // Send request for retrieve protocolMappers
3077
+ $scope.protocolMappers = ClientEvaluateProtocolMappers.query({
3078
+ realm: realm.realm,
3079
+ client: client.id,
3080
+ scopeParam: $scope.scopeParam
3081
+ });
3082
+
3083
+ // Send request for retrieve realmRoles
3084
+ updateScopeRealmRoles();
3085
+
3086
+ // Send request for retrieve accessToken (in case user was selected)
3087
+ if (client.protocol === 'openid-connect' && $scope.userId != null && $scope.userId !== '') {
3088
+ var exampleRequestParams = {
3089
+ realm: realm.realm,
3090
+ client: client.id,
3091
+ userId: $scope.userId,
3092
+ scopeParam: $scope.scopeParam
3093
+ };
3094
+
3095
+ var accessTokenUrl = ClientEvaluateGenerateExampleAccessToken.url(exampleRequestParams);
3096
+ getPrettyJsonResponse(accessTokenUrl).then(function (result) {
3097
+ $scope.oidcAccessToken = result;
3098
+ });
3099
+
3100
+ var idTokenUrl = ClientEvaluateGenerateExampleIDToken.url(exampleRequestParams);
3101
+ getPrettyJsonResponse(idTokenUrl).then(function (result) {
3102
+ $scope.oidcIDToken = result;
3103
+ });
3104
+
3105
+ var userInfoUrl = ClientEvaluateGenerateExampleUserInfo.url(exampleRequestParams);
3106
+ getPrettyJsonResponse(userInfoUrl).then(function (result) {
3107
+ $scope.oidcUserInfo = result;
3108
+ });
3109
+ }
3110
+
3111
+ $scope.showTab(1);
3112
+ };
3113
+
3114
+ function getPrettyJsonResponse(url) {
3115
+ return $http.get(url).then(function (response) {
3116
+ if (response.data) {
3117
+ var responseJson = angular.fromJson(response.data);
3118
+ return angular.toJson(responseJson, true);
3119
+ } else {
3120
+ return null;
3121
+ }
3122
+ });
3123
+ }
3124
+
3125
+ $scope.isResponseAvailable = function () {
3126
+ return $scope.protocolMappers != null;
3127
+ }
3128
+
3129
+ $scope.isAccessTokenAvailable = function () {
3130
+ return $scope.oidcAccessToken != null;
3131
+ }
3132
+
3133
+ $scope.isIDTokenAvailable = function () {
3134
+ return $scope.oidcIDToken != null;
3135
+ }
3136
+
3137
+ $scope.isUserInfoAvailable = function () {
3138
+ return $scope.oidcUserInfo != null;
3139
+ }
3140
+
3141
+ $scope.showTab = function (tab) {
3142
+ $scope.selectedTab = tab;
3143
+
3144
+ $scope.tabCss = {
3145
+ tab1: getTabCssClass(1, tab),
3146
+ tab2: getTabCssClass(2, tab),
3147
+ tab3: getTabCssClass(3, tab),
3148
+ tab4: getTabCssClass(4, tab),
3149
+ tab5: getTabCssClass(5, tab)
3150
+ }
3151
+ }
3152
+
3153
+ function getTabCssClass(tabNo, selectedTab) {
3154
+ return (tabNo === selectedTab) ? 'active' : '';
3155
+ }
3156
+
3157
+ $scope.protocolMappersShown = function () {
3158
+ return $scope.selectedTab === 1;
3159
+ }
3160
+
3161
+ $scope.rolesShown = function () {
3162
+ return $scope.selectedTab === 2;
3163
+ }
3164
+
3165
+ $scope.exampleTabInfo = function() {
3166
+ switch ($scope.selectedTab) {
3167
+ case 3:
3168
+ return { isShown: true, value: $scope.oidcAccessToken}
3169
+ case 4:
3170
+ return { isShown: true, value: $scope.oidcIDToken}
3171
+ case 5:
3172
+ return { isShown: true, value: $scope.oidcUserInfo}
3173
+ default:
3174
+ return { isShown: false, value: null}
3175
+ }
3176
+ }
3177
+
3178
+ $scope.sortMappersByPriority = function(mapper) {
3179
+ return $scope.mapperTypes[mapper.protocolMapper].priority;
3180
+ }
3181
+
3182
+
3183
+ // Roles
3184
+
3185
+ function updateScopeRealmRoles() {
3186
+ $scope.grantedRealmRoles = ClientEvaluateGrantedRoles.query({
3187
+ realm: realm.realm,
3188
+ client: client.id,
3189
+ roleContainer: realm.realm,
3190
+ scopeParam: $scope.scopeParam
3191
+ });
3192
+ $scope.notGrantedRealmRoles = ClientEvaluateNotGrantedRoles.query({
3193
+ realm: realm.realm,
3194
+ client: client.id,
3195
+ roleContainer: realm.realm,
3196
+ scopeParam: $scope.scopeParam
3197
+ });
3198
+ }
3199
+
3200
+ function updateScopeClientRoles() {
3201
+ if ($scope.selectedClient) {
3202
+ $scope.grantedClientRoles = ClientEvaluateGrantedRoles.query({
3203
+ realm: realm.realm,
3204
+ client: client.id,
3205
+ roleContainer: $scope.selectedClient.id,
3206
+ scopeParam: $scope.scopeParam
3207
+ });
3208
+ $scope.notGrantedClientRoles = ClientEvaluateNotGrantedRoles.query({
3209
+ realm: realm.realm,
3210
+ client: client.id,
3211
+ roleContainer: $scope.selectedClient.id,
3212
+ scopeParam: $scope.scopeParam
3213
+ });
3214
+ } else {
3215
+ $scope.grantedClientRoles = null;
3216
+ $scope.notGrantedClientRoles = null;
3217
+ }
3218
+ }
3219
+ });
3220
+
3221
+
3222
+ module.controller('ClientScopeTabCtrl', function(Dialog, $scope, Current, Notifications, $location) {
3223
+ $scope.removeClientScope = function() {
3224
+ Dialog.confirmDelete($scope.clientScope.name, 'client scope', function() {
3225
+ $scope.clientScope.$remove({
3226
+ realm : Current.realm.realm,
3227
+ clientScope : $scope.clientScope.id
3228
+ }, function() {
3229
+ $location.url("/realms/" + Current.realm.realm + "/client-scopes");
3230
+ Notifications.success("The client scope has been deleted.");
3231
+ });
3232
+ });
3233
+ };
3234
+ });
3235
+
3236
+
3237
+
3238
+ module.controller('ClientScopeListCtrl', function($scope, realm, clientScopes, ClientScope, serverInfo, $route, Dialog, Notifications, $location) {
3239
+ $scope.realm = realm;
3240
+ $scope.clientScopes = clientScopes;
3241
+
3242
+ $scope.removeClientScope = function(clientScope) {
3243
+ Dialog.confirmDelete(clientScope.name, 'client scope', function() {
3244
+ ClientScope.remove({
3245
+ realm : realm.realm,
3246
+ clientScope : clientScope.id
3247
+ }, function() {
3248
+ $route.reload();
3249
+ Notifications.success("The client scope been deleted.");
3250
+ });
3251
+ });
3252
+ };
3253
+ });
3254
+
3255
+ module.controller('ClientScopesRealmDefaultCtrl', function($scope, realm, Realm, clientScopes, realmDefaultClientScopes, RealmDefaultClientScopes,
3256
+ realmOptionalClientScopes, RealmOptionalClientScopes, serverInfo, $route, Dialog, Notifications, $location) {
3257
+
3258
+ console.log('ClientScopesRealmDefaultCtrl');
3259
+
3260
+ $scope.realm = realm;
3261
+ $scope.realmDefaultClientScopes = realmDefaultClientScopes;
3262
+ $scope.realmOptionalClientScopes = realmOptionalClientScopes;
3263
+
3264
+ $scope.availableClientScopes = [];
3265
+ $scope.selectedDefaultClientScopes = [];
3266
+ $scope.selectedDefDefaultClientScopes = [];
3267
+
3268
+ $scope.selectedOptionalClientScopes = [];
3269
+ $scope.selectedDefOptionalClientScopes = [];
3270
+
3271
+ // Populate available client scopes. Available client scopes are neither already assigned to 'default' or 'optional'
3272
+ for (var i = 0; i < clientScopes.length; i++) {
3273
+ var scopeName = clientScopes[i].name;
3274
+
3275
+ var available = true;
3276
+ for (var j = 0; j < $scope.realmDefaultClientScopes.length; j++) {
3277
+ if (scopeName === $scope.realmDefaultClientScopes[j].name) {
3278
+ available = false;
3279
+ }
3280
+ }
3281
+ for (var j = 0; j < $scope.realmOptionalClientScopes.length; j++) {
3282
+ if (scopeName === $scope.realmOptionalClientScopes[j].name) {
3283
+ available = false;
3284
+ }
3285
+ }
3286
+
3287
+ if (available) {
3288
+ $scope.availableClientScopes.push(clientScopes[i]);
3289
+ }
3290
+ }
3291
+
3292
+ $scope.addDefaultClientScope = function () {
3293
+ $scope.selectedDefaultClientScopesToAdd = JSON.parse('[' + $scope.selectedDefaultClientScopes + ']');
3294
+ toAdd = $scope.selectedDefaultClientScopesToAdd.length;
3295
+
3296
+ for (var i = 0; i < $scope.selectedDefaultClientScopesToAdd.length; i++) {
3297
+ var currentScope = $scope.selectedDefaultClientScopesToAdd[i];
3298
+
3299
+ RealmDefaultClientScopes.update({
3300
+ realm : realm.realm,
3301
+ clientScopeId : currentScope.id
3302
+ }, function () {
3303
+ toAdd = toAdd - 1;
3304
+ console.log('toAdd: ' + toAdd);
3305
+ if (toAdd === 0) {
3306
+ $route.reload();
3307
+ Notifications.success("Realm default scopes updated.");
3308
+ }
3309
+ });
3310
+ }
3311
+ $scope.selectedDefaultClientScopesToAdd = [];
3312
+ };
3313
+
3314
+ $scope.deleteDefaultClientScope = function () {
3315
+ $scope.selectedDefDefaultClientScopesToRemove = JSON.parse('[' + $scope.selectedDefDefaultClientScopes + ']');
3316
+ toRemove = $scope.selectedDefDefaultClientScopesToRemove.length;
3317
+
3318
+ for (var i = 0; i < $scope.selectedDefDefaultClientScopesToRemove.length; i++) {
3319
+ var currentScope = $scope.selectedDefDefaultClientScopesToRemove[i];
3320
+
3321
+ RealmDefaultClientScopes.remove({
3322
+ realm : realm.realm,
3323
+ clientScopeId : currentScope.id
3324
+ }, function () {
3325
+ toRemove = toRemove - 1;
3326
+ if (toRemove === 0) {
3327
+ $route.reload();
3328
+ Notifications.success("Realm default scopes updated.");
3329
+ }
3330
+ });
3331
+ }
3332
+ $scope.selectedDefDefaultClientScopesToRemove = [];
3333
+ };
3334
+
3335
+ $scope.addOptionalClientScope = function () {
3336
+ $scope.selectedOptionalClientScopesToAdd = JSON.parse('[' + $scope.selectedOptionalClientScopes + ']');
3337
+ toAdd = $scope.selectedOptionalClientScopesToAdd.length;
3338
+
3339
+ for (var i = 0; i < $scope.selectedOptionalClientScopesToAdd.length; i++) {
3340
+ var currentScope = $scope.selectedOptionalClientScopesToAdd[i];
3341
+
3342
+ RealmOptionalClientScopes.update({
3343
+ realm : realm.realm,
3344
+ clientScopeId : currentScope.id
3345
+ }, function () {
3346
+ toAdd = toAdd - 1;
3347
+ console.log('toAdd: ' + toAdd);
3348
+ if (toAdd === 0) {
3349
+ $route.reload();
3350
+ Notifications.success("Realm optional scopes updated.");
3351
+ }
3352
+ });
3353
+ }
3354
+ $scope.selectedOptionalClientScopesToAdd = [];
3355
+ };
3356
+
3357
+ $scope.deleteOptionalClientScope = function () {
3358
+ $scope.selectedDefOptionalClientScopesToRemove = JSON.parse('[' + $scope.selectedDefOptionalClientScopes + ']');
3359
+ toRemove = $scope.selectedDefOptionalClientScopesToRemove.length;
3360
+
3361
+ for (var i = 0; i < $scope.selectedDefOptionalClientScopesToRemove.length; i++) {
3362
+ var currentScope = $scope.selectedDefOptionalClientScopesToRemove[i];
3363
+
3364
+ RealmOptionalClientScopes.remove({
3365
+ realm : realm.realm,
3366
+ clientScopeId : currentScope.id
3367
+ }, function () {
3368
+ toRemove = toRemove - 1;
3369
+ if (toRemove === 0) {
3370
+ $route.reload();
3371
+ Notifications.success("Realm optional scopes updated.");
3372
+ }
3373
+ });
3374
+ }
3375
+ $scope.selectedDefOptionalClientScopesToRemove = [];
3376
+ };
3377
+ });
3378
+
3379
+ module.controller('ClientScopeDetailCtrl', function($scope, realm, clientScope, $route, serverInfo, ClientScope, $location, $modal, Dialog, Notifications) {
3380
+ $scope.protocols = serverInfo.listProviderIds('login-protocol');
3381
+
3382
+ $scope.realm = realm;
3383
+ $scope.create = !clientScope.name;
3384
+
3385
+ function updateProperties() {
3386
+ if (!$scope.clientScope.attributes) {
3387
+ $scope.clientScope.attributes = {};
3388
+ }
3389
+
3390
+ if ($scope.clientScope.protocol) {
3391
+ $scope.protocol = $scope.protocols[$scope.protocols.indexOf($scope.clientScope.protocol)];
3392
+ } else {
3393
+ $scope.protocol = $scope.protocols[0];
3394
+ }
3395
+
3396
+ if ($scope.clientScope.attributes["display.on.consent.screen"]) {
3397
+ if ($scope.clientScope.attributes["display.on.consent.screen"] == "true") {
3398
+ $scope.displayOnConsentScreen = true;
3399
+ } else {
3400
+ $scope.displayOnConsentScreen = false;
3401
+ }
3402
+ } else {
3403
+ $scope.displayOnConsentScreen = true;
3404
+ }
3405
+
3406
+ if(serverInfo.featureEnabled("DYNAMIC_SCOPES")) {
3407
+ if ($scope.clientScope.attributes["is.dynamic.scope"]) {
3408
+ if ($scope.clientScope.attributes["is.dynamic.scope"] === "true") {
3409
+ $scope.isDynamicScope = true;
3410
+ } else {
3411
+ $scope.isDynamicScope = false;
3412
+ }
3413
+ } else {
3414
+ $scope.isDynamicScope = false;
3415
+ }
3416
+
3417
+ $scope.clientScope.attributes["dynamic.scope.regexp"] = $scope.clientScope.name + ":*";
3418
+ }
3419
+
3420
+ if ($scope.clientScope.attributes["include.in.token.scope"]) {
3421
+ if ($scope.clientScope.attributes["include.in.token.scope"] == "true") {
3422
+ $scope.includeInTokenScope = true;
3423
+ } else {
3424
+ $scope.includeInTokenScope = false;
3425
+ }
3426
+ } else {
3427
+ $scope.includeInTokenScope = true;
3428
+ }
3429
+ }
3430
+
3431
+ if (!$scope.create) {
3432
+ $scope.clientScope = angular.copy(clientScope);
3433
+ } else {
3434
+ $scope.clientScope = {};
3435
+ }
3436
+
3437
+ updateProperties();
3438
+
3439
+
3440
+ $scope.switchChange = function() {
3441
+ $scope.changed = true;
3442
+ }
3443
+
3444
+ $scope.changeProtocol = function() {
3445
+ if ($scope.protocol == "openid-connect") {
3446
+ $scope.clientScope.protocol = "openid-connect";
3447
+ } else if ($scope.protocol == "saml") {
3448
+ $scope.clientScope.protocol = "saml";
3449
+ }
3450
+ };
3451
+
3452
+ $scope.$watch(function() {
3453
+ return $location.path();
3454
+ }, function() {
3455
+ $scope.path = $location.path().substring(1).split("/");
3456
+ });
3457
+
3458
+ function isChanged() {
3459
+ if (!angular.equals($scope.clientScope, clientScope)) {
3460
+ return true;
3461
+ }
3462
+ return false;
3463
+ }
3464
+
3465
+ $scope.$watch('clientScope', function() {
3466
+ $scope.changed = isChanged();
3467
+ }, true);
3468
+
3469
+ $scope.save = function() {
3470
+ $scope.clientScope.protocol = $scope.protocol;
3471
+
3472
+ if ($scope.displayOnConsentScreen == true) {
3473
+ $scope.clientScope.attributes["display.on.consent.screen"] = "true";
3474
+ } else {
3475
+ $scope.clientScope.attributes["display.on.consent.screen"] = "false";
3476
+ }
3477
+
3478
+ if(serverInfo.featureEnabled("DYNAMIC_SCOPES")) {
3479
+ if ($scope.isDynamicScope === true) {
3480
+ $scope.clientScope.attributes["is.dynamic.scope"] = "true";
3481
+ } else {
3482
+ $scope.clientScope.attributes["is.dynamic.scope"] = "false";
3483
+ }
3484
+ }
3485
+
3486
+ if ($scope.includeInTokenScope == true) {
3487
+ $scope.clientScope.attributes["include.in.token.scope"] = "true";
3488
+ } else {
3489
+ $scope.clientScope.attributes["include.in.token.scope"] = "false";
3490
+ }
3491
+
3492
+ if ($scope.create) {
3493
+ ClientScope.save({
3494
+ realm: realm.realm,
3495
+ clientScope: ''
3496
+ }, $scope.clientScope, function (data, headers) {
3497
+ $scope.changed = false;
3498
+ var l = headers().location;
3499
+ var id = l.substring(l.lastIndexOf("/") + 1);
3500
+ $location.url("/realms/" + realm.realm + "/client-scopes/" + id);
3501
+ Notifications.success("The client scope has been created.");
3502
+ });
3503
+ } else {
3504
+ ClientScope.update({
3505
+ realm : realm.realm,
3506
+ clientScope : clientScope.id
3507
+ }, $scope.clientScope, function() {
3508
+ $scope.changed = false;
3509
+ clientScope = angular.copy($scope.clientScope);
3510
+ $location.url("/realms/" + realm.realm + "/client-scopes/" + clientScope.id);
3511
+ Notifications.success("Your changes have been saved to the client scope.");
3512
+ });
3513
+ }
3514
+ };
3515
+
3516
+ $scope.reset = function() {
3517
+ $route.reload();
3518
+ };
3519
+
3520
+ $scope.cancel = function() {
3521
+ $location.url("/realms/" + realm.realm + "/client-scopes");
3522
+ };
3523
+ });
3524
+
3525
+ module.controller('ClientScopeProtocolMapperListCtrl', function($scope, realm, clientScope, serverInfo,
3526
+ ClientScopeProtocolMappersByProtocol, ClientScopeProtocolMapper,
3527
+ $route, Dialog, Notifications) {
3528
+ $scope.realm = realm;
3529
+ $scope.clientScope = clientScope;
3530
+ if (clientScope.protocol == null) {
3531
+ clientScope.protocol = 'openid-connect';
3532
+ }
3533
+
3534
+ var protocolMappers = serverInfo.protocolMapperTypes[clientScope.protocol];
3535
+ var mapperTypes = {};
3536
+ for (var i = 0; i < protocolMappers.length; i++) {
3537
+ mapperTypes[protocolMappers[i].id] = protocolMappers[i];
3538
+ }
3539
+ $scope.mapperTypes = mapperTypes;
3540
+
3541
+ $scope.removeMapper = function(mapper) {
3542
+ console.debug(mapper);
3543
+ Dialog.confirmDelete(mapper.name, 'mapper', function() {
3544
+ ClientScopeProtocolMapper.remove({ realm: realm.realm, clientScope: clientScope.id, id : mapper.id }, function() {
3545
+ Notifications.success("The mapper has been deleted.");
3546
+ $route.reload();
3547
+ });
3548
+ });
3549
+ };
3550
+
3551
+ $scope.sortMappersByPriority = function(mapper) {
3552
+ return $scope.mapperTypes[mapper.protocolMapper].priority;
3553
+ }
3554
+
3555
+ var updateMappers = function() {
3556
+ $scope.mappers = ClientScopeProtocolMappersByProtocol.query({realm : realm.realm, clientScope : clientScope.id, protocol : clientScope.protocol});
3557
+ };
3558
+
3559
+ updateMappers();
3560
+ });
3561
+
3562
+ module.controller('ClientScopeProtocolMapperCtrl', function($scope, realm, serverInfo, clientScope, mapper, clients, ClientScopeProtocolMapper, Notifications, Dialog, $location, $route) {
3563
+ $scope.realm = realm;
3564
+ $scope.clients = clients;
3565
+
3566
+ if (clientScope.protocol == null) {
3567
+ clientScope.protocol = 'openid-connect';
3568
+ }
3569
+
3570
+ $scope.model = {
3571
+ realm: realm,
3572
+ clientScope: clientScope,
3573
+ create: false,
3574
+ protocol: clientScope.protocol,
3575
+ mapper: angular.copy(mapper),
3576
+ changed: false
3577
+ }
3578
+
3579
+ var protocolMappers = serverInfo.protocolMapperTypes[clientScope.protocol];
3580
+ for (var i = 0; i < protocolMappers.length; i++) {
3581
+ if (protocolMappers[i].id == mapper.protocolMapper) {
3582
+ $scope.model.mapperType = protocolMappers[i];
3583
+ }
3584
+ }
3585
+ $scope.$watch(function() {
3586
+ return $location.path();
3587
+ }, function() {
3588
+ $scope.path = $location.path().substring(1).split("/");
3589
+ });
3590
+
3591
+ $scope.$watch('model.mapper', function() {
3592
+ if (!angular.equals($scope.model.mapper, mapper)) {
3593
+ $scope.model.changed = true;
3594
+ }
3595
+ }, true);
3596
+
3597
+ $scope.save = function() {
3598
+ ClientScopeProtocolMapper.update({
3599
+ realm : realm.realm,
3600
+ clientScope: clientScope.id,
3601
+ id : mapper.id
3602
+ }, $scope.model.mapper, function() {
3603
+ $route.reload();
3604
+ Notifications.success("Your changes have been saved.");
3605
+ });
3606
+ };
3607
+
3608
+ $scope.reset = function() {
3609
+ $scope.model.mapper = angular.copy(mapper);
3610
+ $scope.model.changed = false;
3611
+ };
3612
+
3613
+ $scope.cancel = function() {
3614
+ //$location.url("/realms");
3615
+ window.history.back();
3616
+ };
3617
+
3618
+ $scope.remove = function() {
3619
+ Dialog.confirmDelete($scope.model.mapper.name, 'mapper', function() {
3620
+ ClientScopeProtocolMapper.remove({ realm: realm.realm, clientScope: clientScope.id, id : $scope.model.mapper.id }, function() {
3621
+ Notifications.success("The mapper has been deleted.");
3622
+ $location.url("/realms/" + realm.realm + '/client-scopes/' + clientScope.id + "/mappers");
3623
+ });
3624
+ });
3625
+ };
3626
+
3627
+ });
3628
+
3629
+ module.controller('ClientScopeProtocolMapperCreateCtrl', function($scope, realm, serverInfo, clientScope, clients, ClientScopeProtocolMapper, Notifications, Dialog, $location) {
3630
+ $scope.realm = realm;
3631
+ $scope.clients = clients;
3632
+
3633
+ if (clientScope.protocol == null) {
3634
+ clientScope.protocol = 'openid-connect';
3635
+ }
3636
+ var protocol = clientScope.protocol;
3637
+ $scope.model = {
3638
+ realm: realm,
3639
+ clientScope: clientScope,
3640
+ create: true,
3641
+ protocol: clientScope.protocol,
3642
+ mapper: { protocol : clientScope.protocol, config: {}},
3643
+ changed: false,
3644
+ mapperTypes: serverInfo.protocolMapperTypes[protocol]
3645
+ }
3646
+
3647
+ // apply default configurations on change for selected protocolmapper type.
3648
+ $scope.$watch('model.mapperType', function() {
3649
+ var currentMapperType = $scope.model.mapperType;
3650
+ var defaultConfig = {};
3651
+
3652
+ if (currentMapperType && Array.isArray(currentMapperType.properties)) {
3653
+ for (var i = 0; i < currentMapperType.properties.length; i++) {
3654
+ var property = currentMapperType.properties[i];
3655
+ if (property && property.name && property.defaultValue) {
3656
+ defaultConfig[property.name] = property.defaultValue;
3657
+ }
3658
+ }
3659
+ }
3660
+
3661
+ $scope.model.mapper.config = defaultConfig;
3662
+ }, true);
3663
+
3664
+ $scope.model.mapperType = $scope.model.mapperTypes[0];
3665
+
3666
+ $scope.$watch(function() {
3667
+ return $location.path();
3668
+ }, function() {
3669
+ $scope.path = $location.path().substring(1).split("/");
3670
+ });
3671
+
3672
+ $scope.save = function() {
3673
+ $scope.model.mapper.protocolMapper = $scope.model.mapperType.id;
3674
+ ClientScopeProtocolMapper.save({
3675
+ realm : realm.realm, clientScope: clientScope.id
3676
+ }, $scope.model.mapper, function(data, headers) {
3677
+ var l = headers().location;
3678
+ var id = l.substring(l.lastIndexOf("/") + 1);
3679
+ $location.url("/realms/" + realm.realm + '/client-scopes/' + clientScope.id + "/mappers/" + id);
3680
+ Notifications.success("Mapper has been created.");
3681
+ });
3682
+ };
3683
+
3684
+ $scope.cancel = function() {
3685
+ //$location.url("/realms");
3686
+ window.history.back();
3687
+ };
3688
+
3689
+
3690
+ });
3691
+
3692
+ module.controller('ClientScopeAddBuiltinProtocolMapperCtrl', function($scope, realm, clientScope, serverInfo,
3693
+ ClientScopeProtocolMappersByProtocol,
3694
+ $http, $location, Dialog, Notifications) {
3695
+ $scope.realm = realm;
3696
+ $scope.clientScope = clientScope;
3697
+ if (clientScope.protocol == null) {
3698
+ clientScope.protocol = 'openid-connect';
3699
+ }
3700
+
3701
+ var protocolMappers = serverInfo.protocolMapperTypes[clientScope.protocol];
3702
+ var mapperTypes = {};
3703
+ for (var i = 0; i < protocolMappers.length; i++) {
3704
+ mapperTypes[protocolMappers[i].id] = protocolMappers[i];
3705
+ }
3706
+ $scope.mapperTypes = mapperTypes;
3707
+
3708
+
3709
+
3710
+
3711
+ var updateMappers = function() {
3712
+ var clientMappers = ClientScopeProtocolMappersByProtocol.query({realm : realm.realm, clientScope : clientScope.id, protocol : clientScope.protocol}, function() {
3713
+ var builtinMappers = serverInfo.builtinProtocolMappers[clientScope.protocol];
3714
+ for (var i = 0; i < clientMappers.length; i++) {
3715
+ for (var j = 0; j < builtinMappers.length; j++) {
3716
+ if (builtinMappers[j].name == clientMappers[i].name
3717
+ && builtinMappers[j].protocolMapper == clientMappers[i].protocolMapper) {
3718
+ builtinMappers.splice(j, 1);
3719
+ break;
3720
+ }
3721
+ }
3722
+ }
3723
+ $scope.mappers = builtinMappers;
3724
+ for (var i = 0; i < $scope.mappers.length; i++) {
3725
+ $scope.mappers[i].isChecked = false;
3726
+ }
3727
+
3728
+
3729
+ });
3730
+ };
3731
+
3732
+ updateMappers();
3733
+
3734
+ $scope.add = function() {
3735
+ var toAdd = [];
3736
+ for (var i = 0; i < $scope.mappers.length; i++) {
3737
+ if ($scope.mappers[i].isChecked) {
3738
+ delete $scope.mappers[i].isChecked;
3739
+ toAdd.push($scope.mappers[i]);
3740
+ }
3741
+ }
3742
+ $http.post(authUrl + '/admin/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/protocol-mappers/add-models',
3743
+ toAdd).then(function() {
3744
+ Notifications.success("Mappers added");
3745
+ $location.url('/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/mappers');
3746
+ }).catch(function() {
3747
+ Notifications.error("Error adding mappers");
3748
+ $location.url('/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/mappers');
3749
+ });
3750
+ };
3751
+
3752
+ });
3753
+
3754
+
3755
+ module.controller('ClientScopeScopeMappingCtrl', function($scope, $http, $route, realm, clientScope, Notifications,
3756
+ ClientScope, Client,
3757
+ ClientScopeRealmScopeMapping, ClientScopeClientScopeMapping, ClientRole,
3758
+ ClientScopeAvailableRealmScopeMapping, ClientScopeAvailableClientScopeMapping,
3759
+ ClientScopeCompositeRealmScopeMapping, ClientScopeCompositeClientScopeMapping) {
3760
+ $scope.realm = realm;
3761
+ $scope.clientScope = angular.copy(clientScope);
3762
+ $scope.selectedRealmRoles = [];
3763
+ $scope.selectedRealmMappings = [];
3764
+ $scope.realmMappings = [];
3765
+ $scope.clientRoles = [];
3766
+ $scope.clientComposite = [];
3767
+ $scope.selectedClientRoles = [];
3768
+ $scope.selectedClientMappings = [];
3769
+ $scope.clientMappings = [];
3770
+ $scope.dummymodel = [];
3771
+ $scope.selectedClient = null;
3772
+
3773
+ function updateScopeRealmRoles() {
3774
+ $scope.realmRoles = ClientScopeAvailableRealmScopeMapping.query({realm : realm.realm, clientScope : clientScope.id});
3775
+ $scope.realmMappings = ClientScopeRealmScopeMapping.query({realm : realm.realm, clientScope : clientScope.id});
3776
+ $scope.realmComposite = ClientScopeCompositeRealmScopeMapping.query({realm : realm.realm, clientScope : clientScope.id});
3777
+ }
3778
+
3779
+ function updateScopeClientRoles() {
3780
+ if ($scope.selectedClient) {
3781
+ $scope.clientRoles = ClientScopeAvailableClientScopeMapping.query({realm : realm.realm, clientScope : clientScope.id, targetClient : $scope.selectedClient.id});
3782
+ $scope.clientMappings = ClientScopeClientScopeMapping.query({realm : realm.realm, clientScope : clientScope.id, targetClient : $scope.selectedClient.id});
3783
+ $scope.clientComposite = ClientScopeCompositeClientScopeMapping.query({realm : realm.realm, clientScope : clientScope.id, targetClient : $scope.selectedClient.id});
3784
+ } else {
3785
+ $scope.clientRoles = null;
3786
+ $scope.clientMappings = null;
3787
+ $scope.clientComposite = null;
3788
+ }
3789
+ }
3790
+
3791
+ $scope.changeClient = function(client) {
3792
+ if (!client || !client.id) {
3793
+ $scope.selectedClient = null;
3794
+ return;
3795
+ }
3796
+ $scope.selectedClient = client;
3797
+ updateScopeClientRoles();
3798
+ };
3799
+
3800
+ $scope.addRealmRole = function() {
3801
+ $scope.selectedRealmRolesToAdd = JSON.parse('[' + $scope.selectedRealmRoles + ']');
3802
+ $scope.selectedRealmRoles = [];
3803
+ $http.post(authUrl + '/admin/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/scope-mappings/realm',
3804
+ $scope.selectedRealmRolesToAdd).then(function() {
3805
+ updateScopeRealmRoles();
3806
+ $scope.selectedRealmRolesToAdd = [];
3807
+ Notifications.success("Scope mappings updated.");
3808
+ });
3809
+ };
3810
+
3811
+ $scope.deleteRealmRole = function() {
3812
+ $scope.selectedRealmMappingsToRemove = JSON.parse('[' + $scope.selectedRealmMappings + ']');
3813
+ $scope.selectedRealmMappings = [];
3814
+ $http.delete(authUrl + '/admin/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/scope-mappings/realm',
3815
+ {data : $scope.selectedRealmMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function () {
3816
+ updateScopeRealmRoles();
3817
+ $scope.selectedRealmMappingsToRemove = [];
3818
+ Notifications.success("Scope mappings updated.");
3819
+ });
3820
+ };
3821
+
3822
+ $scope.addClientRole = function() {
3823
+ $scope.selectedClientRolesToAdd = JSON.parse('[' + $scope.selectedClientRoles + ']');
3824
+ $scope.selectedClientRoles = [];
3825
+ $http.post(authUrl + '/admin/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/scope-mappings/clients/' + $scope.selectedClient.id,
3826
+ $scope.selectedClientRolesToAdd).then(function () {
3827
+ updateScopeClientRoles();
3828
+ $scope.selectedClientRolesToAdd = [];
3829
+ Notifications.success("Scope mappings updated.");
3830
+ });
3831
+ };
3832
+
3833
+ $scope.deleteClientRole = function() {
3834
+ $scope.selectedClientMappingsToRemove = JSON.parse('[' + $scope.selectedClientMappings + ']');
3835
+ $scope.selectedClientMappings = [];
3836
+ $http.delete(authUrl + '/admin/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/scope-mappings/clients/' + $scope.selectedClient.id,
3837
+ {data : $scope.selectedClientMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function () {
3838
+ updateScopeClientRoles();
3839
+ $scope.selectedClientMappingsToRemove = [];
3840
+ Notifications.success("Scope mappings updated.");
3841
+ });
3842
+ };
3843
+
3844
+ clientSelectControl($scope, $route.current.params.realm, Client);
3845
+ updateScopeRealmRoles();
3846
+ });
3847
+
3848
+ module.controller('ClientStoresCtrl', function($scope, $location, $route, realm, serverInfo, Components, Notifications, Dialog) {
3849
+ console.log('ClientStoresCtrl ++++****');
3850
+ $scope.realm = realm;
3851
+ $scope.providers = serverInfo.componentTypes['org.keycloak.storage.client.ClientStorageProvider'];
3852
+ $scope.clientStorageProviders = serverInfo.componentTypes['org.keycloak.storage.client.ClientStorageProvider'];
3853
+ $scope.instancesLoaded = false;
3854
+
3855
+ if (!$scope.providers) $scope.providers = [];
3856
+
3857
+ $scope.addProvider = function(provider) {
3858
+ console.log('Add provider: ' + provider.id);
3859
+ $location.url("/create/client-storage/" + realm.realm + "/providers/" + provider.id);
3860
+ };
3861
+
3862
+ $scope.getInstanceLink = function(instance) {
3863
+ return "/realms/" + realm.realm + "/client-storage/providers/" + instance.providerId + "/" + instance.id;
3864
+ }
3865
+
3866
+ $scope.getInstanceName = function(instance) {
3867
+ return instance.name;
3868
+ }
3869
+ $scope.getInstanceProvider = function(instance) {
3870
+ return instance.providerId;
3871
+ }
3872
+
3873
+ $scope.isProviderEnabled = function(instance) {
3874
+ return !instance.config['enabled'] || instance.config['enabled'][0] == 'true';
3875
+ }
3876
+
3877
+ $scope.getInstancePriority = function(instance) {
3878
+ if (!instance.config['priority']) {
3879
+ return "0";
3880
+ }
3881
+ return instance.config['priority'][0];
3882
+ }
3883
+
3884
+ Components.query({realm: realm.realm,
3885
+ parent: realm.id,
3886
+ type: 'org.keycloak.storage.client.ClientStorageProvider'
3887
+ }, function(data) {
3888
+ $scope.instances = data;
3889
+ $scope.instancesLoaded = true;
3890
+ });
3891
+
3892
+ $scope.removeInstance = function(instance) {
3893
+ Dialog.confirmDelete(instance.name, 'client storage provider', function() {
3894
+ Components.remove({
3895
+ realm : realm.realm,
3896
+ componentId : instance.id
3897
+ }, function() {
3898
+ $route.reload();
3899
+ Notifications.success("The provider has been deleted.");
3900
+ });
3901
+ });
3902
+ };
3903
+ });
3904
+
3905
+ module.controller('GenericClientStorageCtrl', function($scope, $location, Notifications, $route, Dialog, realm,
3906
+ serverInfo, instance, providerId, Components) {
3907
+ console.log('GenericClientStorageCtrl');
3908
+ console.log('providerId: ' + providerId);
3909
+ $scope.create = !instance.providerId;
3910
+ console.log('create: ' + $scope.create);
3911
+ var providers = serverInfo.componentTypes['org.keycloak.storage.client.ClientStorageProvider'];
3912
+ console.log('providers length ' + providers.length);
3913
+ var providerFactory = null;
3914
+ for (var i = 0; i < providers.length; i++) {
3915
+ var p = providers[i];
3916
+ console.log('provider: ' + p.id);
3917
+ if (p.id == providerId) {
3918
+ $scope.providerFactory = p;
3919
+ providerFactory = p;
3920
+ break;
3921
+ }
3922
+
3923
+ }
3924
+ $scope.changed = false;
3925
+
3926
+ console.log("providerFactory: " + providerFactory.id);
3927
+
3928
+ function initClientStorageSettings() {
3929
+ if ($scope.create) {
3930
+ $scope.changed = true;
3931
+ instance.name = providerFactory.id;
3932
+ instance.providerId = providerFactory.id;
3933
+ instance.providerType = 'org.keycloak.storage.client.ClientStorageProvider';
3934
+ instance.parentId = realm.id;
3935
+ instance.config = {
3936
+
3937
+ };
3938
+ instance.config['priority'] = ["0"];
3939
+ instance.config['enabled'] = ["true"];
3940
+
3941
+ $scope.fullSyncEnabled = false;
3942
+ $scope.changedSyncEnabled = false;
3943
+ instance.config['cachePolicy'] = ['DEFAULT'];
3944
+ instance.config['evictionDay'] = [''];
3945
+ instance.config['evictionHour'] = [''];
3946
+ instance.config['evictionMinute'] = [''];
3947
+ instance.config['maxLifespan'] = [''];
3948
+ if (providerFactory.properties) {
3949
+
3950
+ for (var i = 0; i < providerFactory.properties.length; i++) {
3951
+ var configProperty = providerFactory.properties[i];
3952
+ if (configProperty.defaultValue) {
3953
+ instance.config[configProperty.name] = [configProperty.defaultValue];
3954
+ } else {
3955
+ instance.config[configProperty.name] = [''];
3956
+ }
3957
+
3958
+ }
3959
+ }
3960
+
3961
+ } else {
3962
+ $scope.changed = false;
3963
+ if (!instance.config['enabled']) {
3964
+ instance.config['enabled'] = ['true'];
3965
+ }
3966
+ if (!instance.config['cachePolicy']) {
3967
+ instance.config['cachePolicy'] = ['DEFAULT'];
3968
+
3969
+ }
3970
+ if (!instance.config['evictionDay']) {
3971
+ instance.config['evictionDay'] = [''];
3972
+
3973
+ }
3974
+ if (!instance.config['evictionHour']) {
3975
+ instance.config['evictionHour'] = [''];
3976
+
3977
+ }
3978
+ if (!instance.config['evictionMinute']) {
3979
+ instance.config['evictionMinute'] = [''];
3980
+
3981
+ }
3982
+ if (!instance.config['maxLifespan']) {
3983
+ instance.config['maxLifespan'] = [''];
3984
+
3985
+ }
3986
+ if (!instance.config['priority']) {
3987
+ instance.config['priority'] = ['0'];
3988
+ }
3989
+
3990
+ if (providerFactory.properties) {
3991
+ for (var i = 0; i < providerFactory.properties.length; i++) {
3992
+ var configProperty = providerFactory.properties[i];
3993
+ if (!instance.config[configProperty.name]) {
3994
+ instance.config[configProperty.name] = [''];
3995
+ }
3996
+ }
3997
+ }
3998
+
3999
+ }
4000
+ }
4001
+
4002
+ initClientStorageSettings();
4003
+ $scope.instance = angular.copy(instance);
4004
+ $scope.realm = realm;
4005
+
4006
+ $scope.$watch('instance', function() {
4007
+ if (!angular.equals($scope.instance, instance)) {
4008
+ $scope.changed = true;
4009
+ }
4010
+
4011
+ }, true);
4012
+
4013
+ $scope.save = function() {
4014
+ console.log('save provider');
4015
+ $scope.changed = false;
4016
+ if ($scope.create) {
4017
+ console.log('saving new provider');
4018
+ Components.save({realm: realm.realm}, $scope.instance, function (data, headers) {
4019
+ var l = headers().location;
4020
+ var id = l.substring(l.lastIndexOf("/") + 1);
4021
+
4022
+ $location.url("/realms/" + realm.realm + "/client-storage/providers/" + $scope.instance.providerId + "/" + id);
4023
+ Notifications.success("The provider has been created.");
4024
+ });
4025
+ } else {
4026
+ console.log('update existing provider');
4027
+ Components.update({realm: realm.realm,
4028
+ componentId: instance.id
4029
+ },
4030
+ $scope.instance, function () {
4031
+ $route.reload();
4032
+ Notifications.success("The provider has been updated.");
4033
+ });
4034
+ }
4035
+ };
4036
+
4037
+ $scope.reset = function() {
4038
+ $route.reload();
4039
+ };
4040
+
4041
+ $scope.cancel = function() {
4042
+ console.log('cancel');
4043
+ if ($scope.create) {
4044
+ $location.url("/realms/" + realm.realm + "/client-stores");
4045
+ } else {
4046
+ $route.reload();
4047
+ }
4048
+ };
4049
+
4050
+
4051
+
4052
+ });
4053
+
4054
+