generator-jhipster 8.0.0-rc.1 → 8.1.0

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 (369) hide show
  1. package/README.md +71 -58
  2. package/dist/cli/environment-builder.mjs +14 -7
  3. package/dist/cli/jhipster-command.mjs +7 -3
  4. package/dist/cli/program.mjs +2 -2
  5. package/dist/generators/angular/cleanup.mjs +7 -0
  6. package/dist/generators/angular/files-angular.mjs +3 -4
  7. package/dist/generators/angular/generator.mjs +10 -22
  8. package/dist/generators/angular/needle-api/needle-client-angular.mjs +2 -8
  9. package/dist/generators/angular/resources/package.json +25 -24
  10. package/dist/generators/angular/support/translate-angular.mjs +2 -2
  11. package/dist/generators/angular/templates/README.md.jhi.client.angular.ejs +1 -1
  12. package/dist/generators/angular/templates/angular.json.ejs +3 -7
  13. package/dist/generators/angular/templates/package.json.ejs +4 -8
  14. package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.component.html.ejs +6 -4
  15. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.ts.ejs +1 -1
  16. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.component.html.ejs +39 -33
  17. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs +44 -36
  18. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs +24 -23
  19. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.html.ejs +74 -62
  20. package/dist/generators/angular/templates/src/main/webapp/app/account/sessions/sessions.component.html.ejs +12 -4
  21. package/dist/generators/angular/templates/src/main/webapp/app/account/settings/settings.component.html.ejs +54 -48
  22. package/dist/generators/angular/templates/src/main/webapp/app/admin/admin.routes.ts.ejs +74 -0
  23. package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.component.html.ejs +15 -5
  24. package/dist/generators/angular/templates/src/main/webapp/app/admin/docs/docs.component.ts.ejs +1 -1
  25. package/dist/generators/angular/templates/src/main/webapp/app/admin/gateway/gateway.component.html.ejs +20 -7
  26. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.component.html.ejs +10 -7
  27. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/modal/health-modal.component.html.ejs +9 -3
  28. package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.component.html.ejs +12 -4
  29. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/jvm-memory/jvm-memory.component.html.ejs +13 -7
  30. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-cache/metrics-cache.component.html.ejs +6 -2
  31. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-datasource/metrics-datasource.component.html.ejs +3 -1
  32. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-endpoints-requests/metrics-endpoints-requests.component.html.ejs +13 -9
  33. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-garbagecollector/metrics-garbagecollector.component.html.ejs +13 -5
  34. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.html.ejs +21 -7
  35. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-request/metrics-request.component.html.ejs +6 -2
  36. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-system/metrics-system.component.html.ejs +3 -1
  37. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.component.html.ejs +16 -7
  38. package/dist/generators/angular/templates/src/main/webapp/app/admin/tracker/tracker.component.html.ejs +3 -1
  39. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.html.ejs +3 -1
  40. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/detail/user-management-detail.component.html.ejs +11 -4
  41. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.html.ejs +20 -11
  42. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/update/user-management-update.component.html.ejs +48 -34
  43. package/dist/generators/angular/templates/src/main/webapp/app/app.component.ts.ejs +73 -0
  44. package/dist/generators/angular/templates/src/main/webapp/app/app.config.ts.ejs +67 -0
  45. package/dist/generators/angular/templates/src/main/webapp/app/app.routes.ts.ejs +85 -0
  46. package/dist/generators/angular/templates/src/main/webapp/app/core/microfrontend/index.ts.ejs +5 -4
  47. package/dist/generators/angular/templates/src/main/webapp/app/core/util/alert.service.spec.ts.ejs +1 -1
  48. package/dist/generators/angular/templates/src/main/webapp/app/core/util/data-util.service.ts.ejs +2 -2
  49. package/dist/generators/angular/templates/src/main/webapp/app/core/util/event-manager.service.spec.ts.ejs +12 -12
  50. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.model.ts.ejs +4 -4
  51. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/delete/_entityFile_-delete-dialog.component.html.ejs +3 -1
  52. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/detail/_entityFile_-detail.component.html.ejs +26 -14
  53. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.html.ejs +44 -35
  54. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.ts.ejs +1 -1
  55. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/service/_entityFile_.service.ts.ejs +1 -1
  56. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-form.service.spec.ts.ejs +2 -2
  57. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-form.service.ts.ejs +5 -12
  58. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.html.ejs +55 -21
  59. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.spec.ts.ejs +2 -2
  60. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.ts.ejs +10 -10
  61. package/dist/generators/angular/templates/src/main/webapp/app/entities/entity.routes.ts.ejs +25 -0
  62. package/dist/generators/angular/templates/src/main/webapp/app/home/home.component.html.ejs +21 -17
  63. package/dist/generators/angular/templates/src/main/webapp/app/home/home.component.ts.ejs +1 -1
  64. package/dist/generators/angular/templates/src/main/webapp/app/layouts/error/error.component.html.ejs +3 -3
  65. package/dist/generators/angular/templates/src/main/webapp/app/layouts/main/main.component.spec.ts.ejs +5 -2
  66. package/dist/generators/angular/templates/src/main/webapp/app/layouts/main/main.component.ts.ejs +5 -1
  67. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +97 -78
  68. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.scss.ejs +1 -1
  69. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.ts.ejs +1 -1
  70. package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.scss.ejs +1 -1
  71. package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts.ejs +6 -4
  72. package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.html.ejs +3 -3
  73. package/dist/generators/angular/templates/src/main/webapp/app/shared/alert/alert-error.component.html.ejs +6 -2
  74. package/dist/generators/angular/templates/src/main/webapp/app/shared/alert/alert.component.html.ejs +6 -2
  75. package/dist/generators/angular/templates/src/main/webapp/app/shared/filter/filter.component.html.ejs +11 -7
  76. package/dist/generators/angular/templates/src/main/webapp/app/shared/filter/filter.model.spec.ts.ejs +1 -1
  77. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.spec.ts.ejs +3 -3
  78. package/dist/generators/angular/templates/src/main/webapp/bootstrap.ts.ejs +5 -5
  79. package/dist/generators/angular/templates/src/main/webapp/content/scss/global.scss.ejs +1 -1
  80. package/dist/generators/angular/templates/webpack/webpack.microfrontend.js.ejs +48 -126
  81. package/dist/generators/app/README.md +108 -0
  82. package/dist/generators/app/USAGE +3 -0
  83. package/dist/generators/app/command.mjs +3 -3
  84. package/dist/generators/app/generator.mjs +11 -0
  85. package/dist/generators/app/support/config.mjs +3 -3
  86. package/dist/generators/base/command.mjs +0 -11
  87. package/dist/generators/base/generator.mjs +0 -3
  88. package/dist/generators/base/support/config.mjs +6 -6
  89. package/dist/generators/base/support/jhipster7-context.mjs +3 -3
  90. package/dist/generators/base-application/generator.mjs +7 -8
  91. package/dist/generators/base-application/support/entities.mjs +2 -2
  92. package/dist/generators/base-application/support/enum.mjs +1 -1
  93. package/dist/generators/base-application/support/index.mjs +1 -0
  94. package/dist/generators/base-application/support/prepare-entity.mjs +14 -11
  95. package/dist/generators/base-application/support/prepare-field.mjs +11 -7
  96. package/dist/generators/base-application/support/prepare-relationship.mjs +16 -14
  97. package/dist/generators/base-application/support/update-application-entities-transform.mjs +52 -0
  98. package/dist/generators/base-core/generator.mjs +17 -4
  99. package/dist/generators/base-entity-changes/generator.mjs +1 -1
  100. package/dist/generators/base-workspaces/internal/docker-prompts.mjs +13 -12
  101. package/dist/generators/bootstrap/command.mjs +6 -0
  102. package/dist/generators/bootstrap/generator.mjs +84 -45
  103. package/dist/generators/bootstrap/support/auto-crlf-transform.mjs +34 -21
  104. package/dist/generators/bootstrap/support/eslint-transform.mjs +2 -5
  105. package/dist/generators/bootstrap/support/java-unused-imports-transform.mjs +2 -2
  106. package/dist/generators/bootstrap/support/multi-step-transform/index.mjs +17 -28
  107. package/dist/generators/bootstrap/support/multi-step-transform/template-file-fs.mjs +12 -6
  108. package/dist/generators/bootstrap/support/multi-step-transform/template-file.mjs +1 -0
  109. package/dist/generators/bootstrap/support/prettier-support.mjs +2 -2
  110. package/dist/generators/bootstrap-application/generator.mjs +10 -21
  111. package/dist/generators/bootstrap-application-base/command.mjs +30 -0
  112. package/dist/generators/bootstrap-application-base/generator.mjs +36 -11
  113. package/dist/generators/bootstrap-application-base/index.mjs +1 -0
  114. package/dist/generators/bootstrap-application-base/support/export-jdl-transform.mjs +61 -0
  115. package/dist/generators/bootstrap-application-base/support/import-jdl-transform.mjs +64 -0
  116. package/dist/generators/bootstrap-application-base/support/index.mjs +2 -0
  117. package/dist/generators/bootstrap-application-server/generator.mjs +2 -2
  118. package/dist/generators/client/command.mjs +2 -0
  119. package/dist/generators/client/resources/package.json +4 -4
  120. package/dist/generators/client/support/entity-definition.mjs +3 -3
  121. package/dist/generators/client/templates/README.md.jhi.client.ejs +2 -2
  122. package/dist/generators/client/templates/src/main/webapp/content/css/loading.css.ejs +1 -1
  123. package/dist/generators/client/templates/src/main/webapp/index.html.ejs +2 -2
  124. package/dist/generators/client/templates/webpack/webpack.microfrontend.js.jhi.ejs +14 -1
  125. package/dist/generators/common/command.mjs +2 -0
  126. package/dist/generators/common/files.mjs +1 -1
  127. package/dist/generators/common/generator.mjs +29 -7
  128. package/dist/generators/common/resources/package.json +4 -4
  129. package/dist/generators/common/templates/.lintstagedrc.cjs.ejs +21 -0
  130. package/dist/generators/common/templates/.prettierrc.ejs +1 -1
  131. package/dist/generators/common/templates/README.md.jhi.ejs +2 -0
  132. package/dist/generators/common/templates/sonar-project.properties.ejs +1 -1
  133. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/settings-page.cy.ts.ejs +3 -0
  134. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/entity/_entity_.cy.ts.ejs +0 -1
  135. package/dist/generators/docker/generator.mjs +1 -1
  136. package/dist/generators/docker/templates/docker/cassandra.yml.ejs +2 -2
  137. package/dist/generators/docker/templates/docker/keycloak.yml.ejs +1 -1
  138. package/dist/generators/docker/templates/docker/realm-config/jhipster-realm.json.ejs +4 -1
  139. package/dist/generators/docker-compose/generator.mjs +4 -11
  140. package/dist/generators/docker-compose/templates/docker-compose.yml.ejs +1 -1
  141. package/dist/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +4 -1
  142. package/dist/generators/entity/prompts.mjs +123 -306
  143. package/dist/generators/export-jdl/generator.mjs +1 -1
  144. package/dist/generators/feign-client/cleanup.mjs +12 -0
  145. package/dist/generators/feign-client/files.mjs +35 -0
  146. package/dist/generators/feign-client/generator.mjs +65 -0
  147. package/dist/generators/feign-client/index.mjs +19 -0
  148. package/dist/generators/feign-client/templates/src/main/java/_package_/client/AuthorizationHeaderUtil.java.ejs +174 -0
  149. package/dist/generators/feign-client/templates/src/main/java/_package_/client/AuthorizedFeignClient.java.ejs +72 -0
  150. package/dist/generators/feign-client/templates/src/main/java/_package_/client/OAuth2InterceptedFeignConfiguration.java.ejs +35 -0
  151. package/dist/generators/feign-client/templates/src/main/java/_package_/client/OAuthIdpTokenResponseDTO.java.ejs +161 -0
  152. package/dist/generators/feign-client/templates/src/main/java/_package_/client/TokenRelayRequestInterceptor.java.ejs +42 -0
  153. package/dist/generators/feign-client/templates/src/main/java/_package_/client/UserFeignClientInterceptor_jwt.java.ejs +36 -0
  154. package/dist/generators/feign-client/templates/src/main/java/_package_/config/FeignConfiguration.java.ejs +45 -0
  155. package/dist/generators/feign-client/templates/src/test/java/_package_/client/AuthorizationHeaderUtilTest.java.ejs +263 -0
  156. package/dist/generators/generate-blueprint/command.mjs +1 -1
  157. package/dist/generators/generate-blueprint/resources/package.json +1 -1
  158. package/dist/generators/generate-blueprint/templates/vitest.config.ts.ejs +1 -1
  159. package/dist/generators/generator-constants.mjs +11 -7
  160. package/dist/generators/generator-list.mjs +1 -0
  161. package/dist/generators/git/generator.mjs +3 -5
  162. package/dist/generators/gradle/constants.mjs +1 -1
  163. package/dist/generators/heroku/generator.mjs +318 -595
  164. package/dist/generators/heroku/templates/Procfile.ejs +1 -1
  165. package/dist/generators/heroku/templates/application-heroku.yml.ejs +0 -12
  166. package/dist/generators/info/generator.mjs +6 -4
  167. package/dist/generators/init/generator.mjs +2 -2
  168. package/dist/generators/java/command.mjs +6 -0
  169. package/dist/generators/java/entity-files.mjs +5 -1
  170. package/dist/generators/java/generator.mjs +15 -15
  171. package/dist/generators/java/support/package-info-transform.mjs +20 -6
  172. package/dist/generators/java/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.ejs +24 -28
  173. package/dist/generators/java/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.jackson_identity_info.ejs +30 -0
  174. package/dist/generators/java/templates/src/main/java/_package_/_entityPackage_/domain/enumeration/_enumName_.java.ejs +3 -3
  175. package/dist/generators/java/templates/src/test/java/_package_/_entityPackage_/domain/_persistClass_Test.java.ejs +86 -8
  176. package/dist/generators/java/templates/src/test/java/_package_/_entityPackage_/domain/_persistClass_TestSamples.java.ejs +85 -0
  177. package/dist/generators/jdl/generator.mjs +32 -28
  178. package/dist/generators/kubernetes/templates/ingress.yml.ejs +0 -1
  179. package/dist/generators/kubernetes/templates/keycloak/keycloak-configmap.yml.ejs +4 -1
  180. package/dist/generators/kubernetes/templates/keycloak/keycloak.yml.ejs +1 -1
  181. package/dist/generators/languages/command.mjs +5 -0
  182. package/dist/generators/languages/generator.mjs +44 -28
  183. package/dist/generators/languages/prompts.mjs +3 -1
  184. package/dist/generators/languages/support/translate.mjs +1 -1
  185. package/dist/generators/languages/templates/entity/i18n/entity_pt-br.json.ejs +1 -1
  186. package/dist/generators/languages/translation-data.mjs +8 -13
  187. package/dist/generators/liquibase/README.md +19 -0
  188. package/dist/generators/liquibase/generator.mjs +7 -3
  189. package/dist/generators/project-name/generator.mjs +14 -19
  190. package/dist/generators/project-name/support/name-resolver.mjs +35 -6
  191. package/dist/generators/react/generator.mjs +18 -10
  192. package/dist/generators/react/resources/package.json +30 -29
  193. package/dist/generators/react/templates/package.json.ejs +4 -5
  194. package/dist/generators/react/templates/src/main/webapp/app/config/icon-loader.ts.ejs +35 -33
  195. package/dist/generators/react/templates/src/main/webapp/app/config/notification-middleware.spec.ts.ejs +4 -4
  196. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-detail.tsx.ejs +1 -2
  197. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.tsx.ejs +19 -15
  198. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.reducer.ts.ejs +1 -1
  199. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.tsx.ejs +3 -8
  200. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityModel_.model.ts.ejs +1 -1
  201. package/dist/generators/react/templates/src/main/webapp/app/modules/home/home.tsx.ejs +1 -1
  202. package/dist/generators/react/templates/src/main/webapp/app/routes.tsx.ejs +9 -2
  203. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header-components.tsx.ejs +1 -1
  204. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header.scss.ejs +6 -5
  205. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/entities.tsx.ejs +10 -1
  206. package/dist/generators/react/templates/src/main/webapp/app/shared/reducers/reducer.utils.ts.ejs +1 -1
  207. package/dist/generators/react/templates/src/main/webapp/app/shared/util/date-utils.ts.ejs +1 -1
  208. package/dist/generators/react/templates/tsconfig.test.json.ejs +1 -1
  209. package/dist/generators/react/templates/webpack/webpack.microfrontend.js.jhi.react.ejs +13 -58
  210. package/dist/generators/server/cleanup.mjs +5 -0
  211. package/dist/generators/server/command.mjs +13 -2
  212. package/dist/generators/server/entity-files.mjs +3 -3
  213. package/dist/generators/server/files.mjs +2 -38
  214. package/dist/generators/server/generator.mjs +48 -23
  215. package/dist/generators/server/jdl/application-definition.mjs +5 -2
  216. package/dist/generators/server/options/feign-client.mjs +24 -0
  217. package/dist/generators/server/options/index.mjs +1 -0
  218. package/dist/generators/server/resources/Dockerfile +19 -19
  219. package/dist/generators/server/resources/gradle/libs.versions.toml +4 -4
  220. package/dist/generators/server/resources/pom.xml +18 -18
  221. package/dist/generators/server/support/config.mjs +5 -4
  222. package/dist/generators/server/support/prepare-entity.mjs +9 -6
  223. package/dist/generators/server/support/prepare-field.mjs +20 -0
  224. package/dist/generators/server/support/relationship.mjs +2 -1
  225. package/dist/generators/server/support/templates/field-values.mjs +5 -2
  226. package/dist/generators/server/templates/README.md.jhi.spring-boot.ejs +0 -1
  227. package/dist/generators/server/templates/build.gradle.ejs +1 -2
  228. package/dist/generators/server/templates/gradle/profile_dev.gradle.ejs +3 -21
  229. package/dist/generators/server/templates/gradle/profile_prod.gradle.ejs +5 -15
  230. package/dist/generators/server/templates/package.json.ejs +0 -5
  231. package/dist/generators/server/templates/pom.xml.ejs +2 -12
  232. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/get_all_template.ejs +8 -8
  233. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/search_template.ejs +4 -4
  234. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/repository/_entityClass_Repository.java.ejs +1 -1
  235. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/service/dto/_dtoClass_.java.ejs +2 -2
  236. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/service/mapper/_entityClass_Mapper.java.ejs +2 -2
  237. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/web/rest/_entityClass_Resource.java.ejs +14 -14
  238. package/dist/generators/server/templates/src/main/java/_package_/config/JacksonConfiguration.java.ejs +2 -1
  239. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_imperative.java.ejs +21 -3
  240. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_reactive.java.ejs +6 -1
  241. package/dist/generators/server/templates/src/main/java/_package_/security/oauth2/CustomClaimConverter.java.ejs +1 -5
  242. package/dist/generators/server/templates/src/main/java/_package_/service/MailService.java.ejs +48 -6
  243. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource.java.ejs +1 -1
  244. package/dist/generators/server/templates/src/main/java/_package_/web/rest/LogoutResource_imperative.java.ejs +4 -13
  245. package/dist/generators/server/templates/src/main/java/_package_/web/rest/LogoutResource_reactive.java.ejs +5 -11
  246. package/dist/generators/server/templates/src/main/java/_package_/web/rest/PublicUserResource.java.ejs +6 -7
  247. package/dist/generators/server/templates/src/main/java/_package_/web/rest/UserResource.java.ejs +6 -8
  248. package/dist/generators/server/templates/src/main/java/_package_/web/rest/errors/ExceptionTranslator.java.ejs +4 -7
  249. package/dist/generators/server/templates/src/main/resources/config/application.yml.ejs +8 -7
  250. package/dist/generators/server/templates/src/test/java/_package_/TechnicalStructureTest.java.ejs +1 -1
  251. package/dist/generators/server/templates/src/test/java/_package_/_entityPackage_/web/rest/_entityClass_ResourceIT.java.ejs +11 -11
  252. package/dist/generators/server/templates/src/test/java/_package_/web/rest/AccountResourceIT.java.ejs +4 -4
  253. package/dist/generators/server/templates/src/test/java/_package_/web/rest/errors/ExceptionTranslatorTestController.java.ejs +2 -2
  254. package/dist/generators/spring-cache/internal/dependencies.mjs +1 -1
  255. package/dist/generators/spring-cache/templates/gradle/cache.gradle.ejs +1 -1
  256. package/dist/generators/spring-cache/templates/src/main/java/_package_/config/CacheFactoryConfiguration.java.ejs +1 -1
  257. package/dist/generators/spring-cloud-stream/templates/src/main/java/_package_/web/rest/KafkaResource_imperative.java.ejs +1 -1
  258. package/dist/generators/spring-cloud-stream/templates/src/main/java/_package_/web/rest/KafkaResource_reactive.java.ejs +1 -1
  259. package/dist/generators/spring-cloud-stream/templates/src/test/java/_package_/web/rest/KafkaResourceIT_reactive.java.ejs +3 -0
  260. package/dist/generators/spring-data-elasticsearch/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.elastic_search.ejs +1 -1
  261. package/dist/generators/spring-data-elasticsearch/templates/src/main/java/_package_/_entityPackage_/repository/search/_entityClass_SearchRepository.java.ejs +1 -3
  262. package/dist/generators/spring-data-elasticsearch/templates/src/main/java/_package_/repository/search/UserSearchRepository.java.ejs +4 -4
  263. package/dist/generators/spring-data-neo4j/generator.mjs +43 -1
  264. package/dist/generators/spring-data-neo4j/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.spring_data_neo4j.ejs +3 -37
  265. package/dist/generators/spring-data-relational/README.md +7 -0
  266. package/dist/generators/spring-data-relational/generator.mjs +2 -1
  267. package/dist/generators/spring-data-relational/internal/dependencies.mjs +29 -8
  268. package/dist/generators/spring-data-relational/support/database-data.mjs +4 -0
  269. package/dist/generators/spring-data-relational/templates/src/main/java/_package_/repository/EntityManager_reactive.java.ejs +49 -8
  270. package/dist/generators/spring-data-relational/templates/src/test/java/_package_/config/SqlTestContainersSpringContextCustomizerFactory.java.ejs +1 -1
  271. package/dist/generators/upgrade/generator.mjs +3 -3
  272. package/dist/generators/vue/generator.mjs +25 -16
  273. package/dist/generators/vue/resources/package.json +29 -28
  274. package/dist/generators/vue/templates/package.json.ejs +4 -5
  275. package/dist/generators/vue/templates/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +10 -3
  276. package/dist/generators/vue/templates/src/main/webapp/app/core/jhi-navbar/jhi-navbar.vue.ejs +3 -4
  277. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-details.vue.ejs +1 -2
  278. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.component.spec.ts.ejs +1 -1
  279. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.component.ts.ejs +3 -3
  280. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.vue.ejs +2 -15
  281. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.service.ts.ejs +1 -1
  282. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.vue.ejs +14 -7
  283. package/dist/generators/vue/templates/src/main/webapp/app/router/index.ts.ejs +8 -1
  284. package/dist/generators/vue/templates/webpack/webpack.microfrontend.js.jhi.vue.ejs +19 -34
  285. package/dist/jdl/converters/jdl-to-json/jdl-to-json-basic-entity-converter.js +1 -0
  286. package/dist/jdl/converters/jdl-to-json/jdl-to-json-option-converter.js +2 -2
  287. package/dist/jdl/converters/jdl-to-json/jdl-to-json-relationship-converter.js +1 -1
  288. package/dist/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.js +1 -1
  289. package/dist/jdl/converters/json-to-jdl-converter.js +1 -1
  290. package/dist/jdl/converters/json-to-jdl-entity-converter.js +1 -0
  291. package/dist/jdl/converters/parsed-jdl-to-jdl-object/application-converter.js +1 -17
  292. package/dist/jdl/converters/parsed-jdl-to-jdl-object/entity-converter.js +5 -0
  293. package/dist/jdl/converters/parsed-jdl-to-jdl-object/parsed-jdl-to-jdl-object-converter.js +0 -27
  294. package/dist/jdl/exporters/applications/jhipster-application-formatter.js +17 -1
  295. package/dist/jdl/exporters/config.js +11 -0
  296. package/dist/jdl/exporters/export-utils.js +2 -13
  297. package/dist/jdl/exporters/jhipster-entity-exporter.js +3 -2
  298. package/dist/jdl/index.js +1 -0
  299. package/dist/jdl/jdl-importer.js +6 -2
  300. package/dist/jdl/jhipster/default-application-options.js +1 -1
  301. package/dist/jdl/jhipster/field-types.js +1 -1
  302. package/dist/jdl/jhipster/json-entity.js +6 -0
  303. package/dist/jdl/models/jdl-application-configuration-factory.js +34 -2
  304. package/dist/jdl/models/jdl-application-configuration.js +6 -3
  305. package/dist/jdl/models/jdl-application-factory.js +2 -2
  306. package/dist/jdl/models/jdl-application.js +12 -3
  307. package/dist/jdl/models/jdl-entity.js +16 -1
  308. package/dist/jdl/models/jdl-field.js +13 -0
  309. package/dist/jdl/models/jdl-object.js +3 -3
  310. package/dist/jdl/models/jdl-relationship.js +23 -5
  311. package/dist/jdl/parsing/jdl-ast-builder-visitor.js +63 -7
  312. package/dist/jdl/parsing/jdl-parser.js +52 -6
  313. package/dist/jdl/parsing/lexer/application-tokens.js +2 -2
  314. package/dist/jdl/validators/entity-validator.js +4 -2
  315. package/dist/jdl/validators/enum-validator.js +4 -2
  316. package/dist/jdl/validators/jdl-with-application-validator.js +18 -8
  317. package/dist/jdl/validators/jdl-without-application-validator.js +30 -29
  318. package/dist/jdl/validators/validator.js +1 -1
  319. package/dist/testing/helpers.mjs +10 -3
  320. package/dist/types/cli/environment-builder.d.mts +2 -0
  321. package/dist/types/generators/angular/needle-api/needle-client-angular.d.mts +0 -1
  322. package/dist/types/generators/base/api.d.mts +12 -0
  323. package/dist/types/generators/base/support/config.d.mts +3 -3
  324. package/dist/types/generators/base/support/needles.d.mts +1 -1
  325. package/dist/types/generators/base-application/generator.d.mts +2 -2
  326. package/dist/types/generators/base-application/support/index.d.mts +1 -0
  327. package/dist/types/generators/base-application/support/prepare-entity.d.mts +6 -1
  328. package/dist/types/generators/base-application/support/update-application-entities-transform.d.mts +4 -0
  329. package/dist/types/generators/base-application/types/relationship.d.mts +4 -0
  330. package/dist/types/generators/base-core/generator.d.mts +7 -1
  331. package/dist/types/generators/bootstrap/support/auto-crlf-transform.d.mts +3 -2
  332. package/dist/types/generators/bootstrap/support/multi-step-transform/index.d.mts +3 -20
  333. package/dist/types/generators/bootstrap/support/multi-step-transform/template-file-fs.d.mts +15 -9
  334. package/dist/types/generators/bootstrap/support/multi-step-transform/template-file.d.mts +1 -0
  335. package/dist/types/generators/bootstrap-application-base/support/export-jdl-transform.d.mts +8 -0
  336. package/dist/types/generators/bootstrap-application-base/support/import-jdl-transform.d.mts +6 -0
  337. package/dist/types/generators/bootstrap-application-base/support/index.d.mts +2 -0
  338. package/dist/types/generators/client/support/entity-definition.d.mts +2 -2
  339. package/dist/types/generators/feign-client/types-export.d.ts +1 -0
  340. package/dist/types/generators/generator-constants.d.mts +52 -48
  341. package/dist/types/generators/generator-list.d.mts +1 -0
  342. package/dist/types/generators/java/support/package-info-transform.d.mts +1 -4
  343. package/dist/types/generators/project-name/support/name-resolver.d.mts +9 -1
  344. package/dist/types/generators/server/options/feign-client.d.mts +21 -0
  345. package/dist/types/generators/server/options/index.d.mts +1 -0
  346. package/dist/types/generators/server/support/templates/field-values.d.mts +1 -1
  347. package/dist/types/jdl/converters/json-to-jdl-converter.d.ts +1 -0
  348. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/option-converter.d.ts +1 -1
  349. package/dist/types/jdl/exporters/config.d.ts +1 -0
  350. package/dist/types/jdl/index.d.ts +1 -0
  351. package/dist/types/jdl/jdl-importer.d.ts +1 -0
  352. package/dist/types/jdl/jhipster/json-entity.d.ts +2 -0
  353. package/dist/types/jdl/models/jdl-application-configuration-factory.d.ts +1 -0
  354. package/dist/types/jdl/models/jdl-application-configuration-option.d.ts +2 -2
  355. package/dist/types/jdl/models/jdl-application-configuration.d.ts +8 -6
  356. package/dist/types/jdl/models/jdl-application-factory.d.ts +1 -1
  357. package/dist/types/jdl/models/jdl-application.d.ts +8 -4
  358. package/dist/types/jdl/models/jdl-entity.d.ts +1 -0
  359. package/dist/types/jdl/models/jdl-object.d.ts +1 -1
  360. package/dist/types/jdl/models/jdl-relationship.d.ts +0 -18
  361. package/dist/types/jdl/models/list-jdl-application-configuration-option.d.ts +1 -1
  362. package/dist/types/jdl/parsing/jdl-ast-builder-visitor.d.ts +10 -0
  363. package/dist/types/jdl/parsing/jdl-parser.d.ts +3 -0
  364. package/dist/types/jdl/parsing/lexer/application-tokens.d.ts +1 -0
  365. package/dist/types/jdl/types/types.d.mts +2 -2
  366. package/dist/types/jdl/validators/entity-validator.d.ts +2 -2
  367. package/dist/types/jdl/validators/enum-validator.d.ts +2 -2
  368. package/dist/types/jdl/validators/validator.d.ts +4 -1
  369. package/package.json +41 -41
@@ -62,11 +62,18 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
62
62
  import org.springframework.security.crypto.password.PasswordEncoder;
63
63
  <%_ } _%>
64
64
  <%_ if (authenticationTypeOauth2) { _%>
65
+ import static org.springframework.security.oauth2.core.oidc.StandardClaimNames.PREFERRED_USERNAME;
66
+
65
67
  import <%= packageName %>.security.oauth2.AudienceValidator;
66
68
  import <%= packageName %>.security.SecurityUtils;
67
69
  import org.springframework.security.authentication.AbstractAuthenticationToken;
70
+ import org.springframework.security.oauth2.client.userinfo.OAuth2UserService;
71
+ import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest;
72
+ import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService;
68
73
  import org.springframework.security.oauth2.core.DelegatingOAuth2TokenValidator;
69
74
  import org.springframework.security.oauth2.core.OAuth2TokenValidator;
75
+ import org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser;
76
+ import org.springframework.security.oauth2.core.oidc.user.OidcUser;
70
77
  import org.springframework.security.oauth2.jwt.*;
71
78
  import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter;
72
79
  import org.springframework.beans.factory.annotation.Value;
@@ -182,7 +189,7 @@ public class SecurityConfiguration {
182
189
  // prettier-ignore
183
190
  authz
184
191
  <%_ if (!skipClient) { _%>
185
- .requestMatchers(mvc.pattern("/index.html"), mvc.pattern("/*.js"), mvc.pattern("/*.map"), mvc.pattern("/*.css")).permitAll()
192
+ .requestMatchers(mvc.pattern("/index.html"), mvc.pattern("/*.js"), mvc.pattern("/*.txt"), mvc.pattern("/*.json"), mvc.pattern("/*.map"), mvc.pattern("/*.css")).permitAll()
186
193
  .requestMatchers(mvc.pattern("/*.ico"), mvc.pattern("/*.png"), mvc.pattern("/*.svg"), mvc.pattern("/*.webapp")).permitAll()
187
194
  <%_ if (clientFrameworkVue) { _%>
188
195
  .requestMatchers(mvc.pattern("/assets/**")).permitAll()
@@ -261,14 +268,14 @@ public class SecurityConfiguration {
261
268
  .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()));
262
269
  <%_ } else if (authenticationTypeOauth2) { _%>
263
270
  <%_ if (applicationTypeMonolith) { _%>
264
- .oauth2Login(withDefaults())
271
+ .oauth2Login(oauth2 -> oauth2.userInfoEndpoint(userInfo -> userInfo.oidcUserService(this.oidcUserService())))
265
272
  <%_ } else if (applicationTypeMicroservice) { _%>
266
273
  .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
267
274
  <%_ } _%>
268
275
  .oauth2ResourceServer(oauth2 -> oauth2
269
276
  .jwt(jwt -> jwt
270
277
  .jwtAuthenticationConverter(authenticationConverter())))
271
- .oauth2Client();
278
+ .oauth2Client(withDefaults());
272
279
  <%_ } _%>
273
280
  <%_ if (devDatabaseTypeH2Any) { _%>
274
281
  if (env.acceptsProfiles(Profiles.of(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT))) {
@@ -291,9 +298,20 @@ public class SecurityConfiguration {
291
298
  Converter<Jwt, AbstractAuthenticationToken> authenticationConverter() {
292
299
  JwtAuthenticationConverter jwtAuthenticationConverter = new JwtAuthenticationConverter();
293
300
  jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(new JwtGrantedAuthorityConverter());
301
+ jwtAuthenticationConverter.setPrincipalClaimName(PREFERRED_USERNAME);
294
302
  return jwtAuthenticationConverter;
295
303
  }
304
+
305
+ OAuth2UserService<OidcUserRequest, OidcUser> oidcUserService() {
306
+ final OidcUserService delegate = new OidcUserService();
307
+
308
+ return userRequest -> {
309
+ OidcUser oidcUser = delegate.loadUser(userRequest);
310
+ return new DefaultOidcUser(oidcUser.getAuthorities(), oidcUser.getIdToken(), oidcUser.getUserInfo(), PREFERRED_USERNAME);
311
+ };
312
+ }
296
313
  <%_ if (!applicationTypeMicroservice) { _%>
314
+
297
315
  /**
298
316
  * Map authorities from "groups" or "roles" claim in ID Token.
299
317
  *
@@ -20,6 +20,8 @@ package <%= packageName %>.config;
20
20
 
21
21
  import <%= packageName %>.security.AuthoritiesConstants;
22
22
  <%_ if (authenticationTypeOauth2) { _%>
23
+ import static org.springframework.security.oauth2.core.oidc.StandardClaimNames.PREFERRED_USERNAME;
24
+
23
25
  import <%= packageName %>.security.SecurityUtils;
24
26
  import <%= packageName %>.security.oauth2.AudienceValidator;
25
27
  import <%= packageName %>.security.oauth2.JwtGrantedAuthorityConverter;
@@ -285,6 +287,8 @@ public class SecurityConfiguration {
285
287
  <%_ if (microfrontend) { _%>
286
288
  // microfrontend resources are loaded by webpack without authentication, they need to be public
287
289
  .pathMatchers("/services/*/*.js").permitAll()
290
+ .pathMatchers("/services/*/*.txt").permitAll()
291
+ .pathMatchers("/services/*/*.json").permitAll()
288
292
  .pathMatchers("/services/*/*.js.map").permitAll()
289
293
  <%_ } _%>
290
294
  .pathMatchers("/services/*/management/health/readiness").permitAll()
@@ -337,6 +341,7 @@ public class SecurityConfiguration {
337
341
  Converter<Jwt, Mono<AbstractAuthenticationToken>> jwtAuthenticationConverter() {
338
342
  JwtAuthenticationConverter jwtAuthenticationConverter = new JwtAuthenticationConverter();
339
343
  jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(new JwtGrantedAuthorityConverter());
344
+ jwtAuthenticationConverter.setPrincipalClaimName(PREFERRED_USERNAME);
340
345
  return new ReactiveJwtAuthenticationConverterAdapter(jwtAuthenticationConverter);
341
346
  }
342
347
 
@@ -361,7 +366,7 @@ public class SecurityConfiguration {
361
366
  }
362
367
  });
363
368
 
364
- return new DefaultOidcUser(mappedAuthorities, user.getIdToken(), user.getUserInfo());
369
+ return new DefaultOidcUser(mappedAuthorities, user.getIdToken(), user.getUserInfo(), PREFERRED_USERNAME);
365
370
  });
366
371
  };
367
372
  }
@@ -80,7 +80,7 @@ public class CustomClaimConverter implements Converter<Map<String, Object>, Map<
80
80
  // Retrieve and set the token
81
81
  String token = bearerTokenResolver.resolve(((ServletRequestAttributes) attributes).getRequest());
82
82
  HttpHeaders headers = new HttpHeaders();
83
- headers.set("Authorization", buildBearer(token));
83
+ headers.setBearerAuth(token);
84
84
 
85
85
  // Retrieve user info from OAuth provider if not already loaded
86
86
  ObjectNode user = users.get(claims.get("sub").toString(), s -> {
@@ -126,8 +126,4 @@ public class CustomClaimConverter implements Converter<Map<String, Object>, Map<
126
126
  }
127
127
  return convertedClaims;
128
128
  }
129
-
130
- private String buildBearer(String token) {
131
- return "Bearer " + token;
132
- }
133
129
  }
@@ -33,15 +33,25 @@ import org.springframework.context.MessageSource;
33
33
  import org.springframework.mail.MailException;
34
34
  import org.springframework.mail.javamail.JavaMailSender;
35
35
  import org.springframework.mail.javamail.MimeMessageHelper;
36
- import org.springframework.scheduling.annotation.Async;
37
36
  import org.springframework.stereotype.Service;
38
37
  import org.thymeleaf.context.Context;
39
38
  import org.thymeleaf.spring6.SpringTemplateEngine;
39
+ <%_ if (reactive) { _%>
40
+ import reactor.core.publisher.Mono;
41
+ <%_ } else { _%>
42
+ import org.springframework.scheduling.annotation.Async;
43
+ <%_ } _%>
44
+ <%_
45
+ const localSendEmailFromTemplateApi = reactive ? 'sendEmailFromTemplate' : 'sendEmailFromTemplateSync';
46
+ _%>
47
+
40
48
 
41
49
  /**
42
- * Service for sending emails.
50
+ * Service for sending emails asynchronously.
51
+ <%_ if (!reactive) { _%>
43
52
  * <p>
44
53
  * We use the {@link Async} annotation to send emails asynchronously.
54
+ <%_ } _%>
45
55
  */
46
56
  @Service
47
57
  public class MailService {
@@ -69,8 +79,21 @@ public class MailService {
69
79
  this.templateEngine = templateEngine;
70
80
  }
71
81
 
82
+ <%_ if (!reactive) { _%>
72
83
  @Async
84
+ <%_ } _%>
73
85
  public void sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) {
86
+ <%_ if (reactive) { _%>
87
+ Mono.defer(() -> {
88
+ this.sendEmailSync(to, subject, content, isMultipart, isHtml);
89
+ return Mono.empty();
90
+ }).subscribe();
91
+ <%_ } else { _%>
92
+ this.sendEmailSync(to, subject, content, isMultipart, isHtml);
93
+ <%_ } _%>
94
+ }
95
+
96
+ private void sendEmailSync(String to, String subject, String content, boolean isMultipart, boolean isHtml) {
74
97
  log.debug("Send email[multipart '{}' and html '{}'] to '{}' with subject '{}' and content={}",
75
98
  isMultipart, isHtml, to, subject, content);
76
99
 
@@ -89,8 +112,21 @@ public class MailService {
89
112
  }
90
113
  }
91
114
 
115
+ <%_ if (!reactive) { _%>
92
116
  @Async
117
+ <%_ } _%>
93
118
  public void sendEmailFromTemplate(<%= user.persistClass %> user, String templateName, String titleKey) {
119
+ <%_ if (reactive) { _%>
120
+ Mono.defer(() -> {
121
+ this.sendEmailFromTemplateSync(user, templateName, titleKey);
122
+ return Mono.empty();
123
+ }).subscribe();
124
+ <%_ } else { _%>
125
+ this.sendEmailFromTemplateSync(user, templateName, titleKey);
126
+ <%_ } _%>
127
+ }
128
+
129
+ private void sendEmailFromTemplateSync(<%= user.persistClass %> user, String templateName, String titleKey) {
94
130
  if (user.getEmail() == null) {
95
131
  log.debug("Email doesn't exist for user '{}'", user.getLogin());
96
132
  return;
@@ -101,26 +137,32 @@ public class MailService {
101
137
  context.setVariable(BASE_URL, jHipsterProperties.getMail().getBaseUrl());
102
138
  String content = templateEngine.process(templateName, context);
103
139
  String subject = messageSource.getMessage(titleKey, null, locale);
104
- sendEmail(user.getEmail(), subject, content, false, true);
140
+ this.sendEmailSync(user.getEmail(), subject, content, false, true);
105
141
  }
106
142
  <%_ if (!authenticationTypeOauth2) { _%>
107
143
 
144
+ <%_ if (!reactive) { _%>
108
145
  @Async
146
+ <%_ } _%>
109
147
  public void sendActivationEmail(<%= user.persistClass %> user) {
110
148
  log.debug("Sending activation email to '{}'", user.getEmail());
111
- sendEmailFromTemplate(user, "mail/activationEmail", "email.activation.title");
149
+ this.<%- localSendEmailFromTemplateApi %>(user, "mail/activationEmail", "email.activation.title");
112
150
  }
113
151
 
152
+ <%_ if (!reactive) { _%>
114
153
  @Async
154
+ <%_ } _%>
115
155
  public void sendCreationEmail(<%= user.persistClass %> user) {
116
156
  log.debug("Sending creation email to '{}'", user.getEmail());
117
- sendEmailFromTemplate(user, "mail/creationEmail", "email.activation.title");
157
+ this.<%- localSendEmailFromTemplateApi %>(user, "mail/creationEmail", "email.activation.title");
118
158
  }
119
159
 
160
+ <%_ if (!reactive) { _%>
120
161
  @Async
162
+ <%_ } _%>
121
163
  public void sendPasswordResetMail(<%= user.persistClass %> user) {
122
164
  log.debug("Sending password reset email to '{}'", user.getEmail());
123
- sendEmailFromTemplate(user, "mail/passwordResetEmail", "email.reset.title");
165
+ this.<%- localSendEmailFromTemplateApi %>(user, "mail/passwordResetEmail", "email.reset.title");
124
166
  }
125
167
  <%_ } _%>
126
168
  }
@@ -264,7 +264,7 @@ public class AccountResource {
264
264
  * @throws IllegalArgumentException if the series couldn't be URL decoded.
265
265
  */
266
266
  @DeleteMapping("/account/sessions/{series}")
267
- public void invalidateSession(@PathVariable String series) {
267
+ public void invalidateSession(@PathVariable("series") String series) {
268
268
  String decodedSeries = URLDecoder.decode(series, StandardCharsets.UTF_8);
269
269
  SecurityUtils.getCurrentUserLogin()
270
270
  .flatMap(userRepository::findOneByLogin)
@@ -52,21 +52,12 @@ public class LogoutResource {
52
52
  @AuthenticationPrincipal(expression = "idToken") OidcIdToken idToken) {
53
53
  StringBuilder logoutUrl = new StringBuilder();
54
54
 
55
- String issuerUri = this.registration.getProviderDetails().getIssuerUri();
56
- if (issuerUri.contains("auth0.com")) {
57
- logoutUrl.append(issuerUri.endsWith("/") ? issuerUri + "v2/logout" : issuerUri + "/v2/logout");
58
- } else {
59
- logoutUrl.append(this.registration.getProviderDetails().getConfigurationMetadata().get("end_session_endpoint").toString());
60
- }
61
-
55
+ logoutUrl.append(this.registration.getProviderDetails().getConfigurationMetadata().get("end_session_endpoint").toString());
56
+
62
57
  String originUrl = request.getHeader(HttpHeaders.ORIGIN);
63
58
 
64
- if (issuerUri.contains("auth0.com")) {
65
- logoutUrl.append("?client_id=").append(this.registration.getClientId()).append("&returnTo=").append(originUrl);
66
- } else {
67
- logoutUrl.append("?id_token_hint=").append(idToken.getTokenValue()).append("&post_logout_redirect_uri=").append(originUrl);
68
- }
69
-
59
+ logoutUrl.append("?id_token_hint=").append(idToken.getTokenValue()).append("&post_logout_redirect_uri=").append(originUrl);
60
+
70
61
  request.getSession().invalidate();
71
62
  return ResponseEntity.ok().body(Map.of("logoutUrl", logoutUrl.toString()));
72
63
  }
@@ -59,19 +59,13 @@ public class LogoutResource {
59
59
 
60
60
  private Map<String, String> prepareLogoutUri(ServerHttpRequest request, ClientRegistration clientRegistration, OidcIdToken idToken) {
61
61
  StringBuilder logoutUrl = new StringBuilder();
62
- String issuerUri = clientRegistration.getProviderDetails().getIssuerUri();
63
- if (issuerUri.contains("auth0.com")) {
64
- logoutUrl.append(issuerUri.endsWith("/") ? issuerUri + "v2/logout" : issuerUri + "/v2/logout");
65
- } else {
66
- logoutUrl.append(clientRegistration.getProviderDetails().getConfigurationMetadata().get("end_session_endpoint").toString());
67
- }
62
+
63
+ logoutUrl.append(clientRegistration.getProviderDetails().getConfigurationMetadata().get("end_session_endpoint").toString());
68
64
 
69
65
  String originUrl = request.getHeaders().getOrigin();
70
- if (issuerUri.contains("auth0.com")) {
71
- logoutUrl.append("?client_id=").append(clientRegistration.getClientId()).append("&returnTo=").append(originUrl);
72
- } else {
73
- logoutUrl.append("?id_token_hint=").append(idToken.getTokenValue()).append("&post_logout_redirect_uri=").append(originUrl);
74
- }
66
+
67
+ logoutUrl.append("?id_token_hint=").append(idToken.getTokenValue()).append("&post_logout_redirect_uri=").append(originUrl);
68
+
75
69
  return Map.of("logoutUrl", logoutUrl.toString());
76
70
  }
77
71
  }
@@ -59,7 +59,7 @@ import org.springframework.http.server.reactive.ServerHttpRequest;
59
59
  import org.springframework.web.bind.annotation.*;
60
60
  <%_ if (reactive) { _%>
61
61
  import org.springframework.web.server.ResponseStatusException;
62
- import org.springframework.web.util.UriComponentsBuilder;
62
+ import org.springframework.web.util.ForwardedHeaderUtils;
63
63
  import reactor.core.publisher.Flux;
64
64
  import reactor.core.publisher.Mono;
65
65
  <%_ } else {_%>
@@ -75,7 +75,6 @@ import java.util.*;
75
75
  <%_ } _%>
76
76
  <%_ if (searchEngineElasticsearch && !reactive) { _%>
77
77
  import java.util.stream.StreamSupport;
78
- import static org.springframework.data.elasticsearch.client.elc.QueryBuilders.*;
79
78
  <%_ } _%>
80
79
 
81
80
  @RestController
@@ -111,7 +110,7 @@ public class PublicUserResource {
111
110
  }
112
111
 
113
112
  /**
114
- * {@code GET /users} : get all users with only the public informations - calling this are allowed for anyone.
113
+ * {@code GET /users} : get all users with only public information - calling this method is allowed for anyone.
115
114
  <%_ if (databaseTypeSql || databaseTypeMongodb || databaseTypeNeo4j || databaseTypeCouchbase) { _%>
116
115
  *
117
116
  <%_ if (reactive) { _%>
@@ -134,7 +133,7 @@ public class PublicUserResource {
134
133
 
135
134
  return userService.countManagedUsers()
136
135
  .map(total -> new PageImpl<>(new ArrayList<>(), pageable, total))
137
- .map(page -> PaginationUtil.generatePaginationHttpHeaders(UriComponentsBuilder.fromHttpRequest(request), page))
136
+ .map(page -> PaginationUtil.generatePaginationHttpHeaders(ForwardedHeaderUtils.adaptFromForwardedHeaders(request.getURI(), request.getHeaders()), page))
138
137
  .map(headers -> ResponseEntity.ok().headers(headers).body(userService.getAllPublicUsers(pageable)));
139
138
  }
140
139
  <%_ } else { _%>
@@ -176,13 +175,13 @@ public class PublicUserResource {
176
175
  <%_ if (searchEngineAny) { _%>
177
176
 
178
177
  /**
179
- * {@code SEARCH /_search/users/:query} : search for the User corresponding to the query.
178
+ * {@code SEARCH /users/_search/:query} : search for the User corresponding to the query.
180
179
  *
181
180
  * @param query the query to search.
182
181
  * @return the result of the search.
183
182
  */
184
- @GetMapping("/_search/users/{query}")
185
- public <% if(reactive) { %>Mono<<% } %>List<<%= user.dtoClass %>><% if(reactive) { %>><% } %> search(@PathVariable String query) {
183
+ @GetMapping("/users/_search/{query}")
184
+ public <% if(reactive) { %>Mono<<% } %>List<<%= user.dtoClass %>><% if(reactive) { %>><% } %> search(@PathVariable("query") String query) {
186
185
  <%_ if (searchEngineElasticsearch) { _%>
187
186
  <%_ if (reactive) { _%>
188
187
  return userSearchRepository.search(query).map(<%= user.dtoClass %>::new).collectList();
@@ -62,7 +62,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
62
62
  import org.springframework.web.bind.annotation.*;
63
63
  <%_ if (reactive) { _%>
64
64
  import org.springframework.web.server.ResponseStatusException;
65
- import org.springframework.web.util.UriComponentsBuilder;
65
+ import org.springframework.web.util.ForwardedHeaderUtils;
66
66
  import reactor.core.publisher.Flux;
67
67
  import reactor.core.publisher.Mono;
68
68
  <%_ } else { _%>
@@ -83,8 +83,6 @@ import java.util.*;
83
83
  <%_ if (searchEngineElasticsearch && !reactive) { _%>
84
84
  import java.util.stream.Collectors;
85
85
  import java.util.stream.StreamSupport;
86
-
87
- import static org.springframework.data.elasticsearch.client.elc.QueryBuilders.*;
88
86
  <%_ } _%>
89
87
 
90
88
  /**
@@ -272,7 +270,7 @@ public class UserResource {
272
270
 
273
271
  return userService.countManagedUsers()
274
272
  .map(total -> new PageImpl<>(new ArrayList<>(), pageable, total))
275
- .map(page -> PaginationUtil.generatePaginationHttpHeaders(UriComponentsBuilder.fromHttpRequest(request), page))
273
+ .map(page -> PaginationUtil.generatePaginationHttpHeaders(ForwardedHeaderUtils.adaptFromForwardedHeaders(request.getURI(), request.getHeaders()), page))
276
274
  .map(headers -> ResponseEntity.ok().headers(headers).body(userService.getAllManagedUsers(pageable)));
277
275
  <%_ } else { _%>
278
276
  public ResponseEntity<List<<%= user.adminUserDto %>>> getAllUsers(@org.springdoc.core.annotations.ParameterObject Pageable pageable) {
@@ -308,13 +306,13 @@ public class UserResource {
308
306
  @GetMapping("/users/{login}")
309
307
  @PreAuthorize("hasAuthority(\"" + AuthoritiesConstants.ADMIN + "\")")
310
308
  <%_ if (reactive) { _%>
311
- public Mono<<%= user.adminUserDto %>> getUser(@PathVariable String login) {
309
+ public Mono<<%= user.adminUserDto %>> getUser(@PathVariable("login") String login) {
312
310
  log.debug("REST request to get User : {}", login);
313
311
  return userService.getUserWithAuthoritiesByLogin(login)
314
312
  .map(<%= user.adminUserDto %>::new)
315
313
  .switchIfEmpty(Mono.error(new ResponseStatusException(HttpStatus.NOT_FOUND)));
316
314
  <%_ } else { _%>
317
- public ResponseEntity<<%= user.adminUserDto %>> getUser(@PathVariable @Pattern(regexp = Constants.LOGIN_REGEX) String login) {
315
+ public ResponseEntity<<%= user.adminUserDto %>> getUser(@PathVariable("login") @Pattern(regexp = Constants.LOGIN_REGEX) String login) {
318
316
  log.debug("REST request to get User : {}", login);
319
317
  return ResponseUtil.wrapOrNotFound(
320
318
  userService.getUserWithAuthoritiesByLogin(login)
@@ -331,12 +329,12 @@ public class UserResource {
331
329
  @DeleteMapping("/users/{login}")
332
330
  @PreAuthorize("hasAuthority(\"" + AuthoritiesConstants.ADMIN + "\")")
333
331
  <%_ if (reactive) { _%>
334
- public Mono<ResponseEntity<Void>> deleteUser(@PathVariable @Pattern(regexp = Constants.LOGIN_REGEX) String login) {
332
+ public Mono<ResponseEntity<Void>> deleteUser(@PathVariable("login") @Pattern(regexp = Constants.LOGIN_REGEX) String login) {
335
333
  log.debug("REST request to delete User: {}", login);
336
334
  return userService.deleteUser(login)
337
335
  .then(Mono.just(ResponseEntity.noContent().headers(HeaderUtil.createAlert( applicationName, <% if (enableTranslation) { %> "userManagement.deleted"<% } else { %> "A user is deleted with identifier " + login<% } %>, login)).build()));
338
336
  <%_ } else { _%>
339
- public ResponseEntity<Void> deleteUser(@PathVariable @Pattern(regexp = Constants.LOGIN_REGEX) String login) {
337
+ public ResponseEntity<Void> deleteUser(@PathVariable("login") @Pattern(regexp = Constants.LOGIN_REGEX) String login) {
340
338
  log.debug("REST request to delete User: {}", login);
341
339
  userService.deleteUser(login);
342
340
  return ResponseEntity.noContent().headers(HeaderUtil.createAlert(applicationName, <% if (enableTranslation) { %> "userManagement.deleted"<% } else { %> "A user is deleted with identifier " + login<% } %>, login)).build();
@@ -149,13 +149,10 @@ _%>
149
149
 
150
150
  private ProblemDetailWithCause getProblemDetailWithCause(Throwable ex) {
151
151
  <%_ if (!skipUserManagement) { _%>
152
- if(ex instanceof <%= packageName %>.service.EmailAlreadyUsedException ||
153
- ex instanceof <%= packageName %>.service.UsernameAlreadyUsedException) {
154
- // return 201 - CREATED on purpose to not reveal information to potential attackers
155
- // see https://github.com/jhipster/generator-jhipster/issues/21731
156
- return ProblemDetailWithCauseBuilder.instance()
157
- .withStatus(201).build();
158
- }
152
+ if(ex instanceof <%= packageName %>.service.UsernameAlreadyUsedException )
153
+ return (ProblemDetailWithCause) new LoginAlreadyUsedException().getBody();
154
+ if(ex instanceof <%= packageName %>.service.EmailAlreadyUsedException )
155
+ return (ProblemDetailWithCause) new EmailAlreadyUsedException().getBody();
159
156
  if(ex instanceof <%= packageName %>.service.InvalidPasswordException )
160
157
  return (ProblemDetailWithCause) new InvalidPasswordException().getBody();
161
158
 
@@ -142,6 +142,10 @@ management:
142
142
  export:
143
143
  enabled: true
144
144
  step: 60
145
+ observations:
146
+ key-values:
147
+ application: ${spring.application.name}
148
+ metrics:
145
149
  enable:
146
150
  http: true
147
151
  jvm: true
@@ -153,13 +157,10 @@ management:
153
157
  all: true
154
158
  percentiles:
155
159
  all: 0, 0.5, 0.75, 0.95, 0.99, 1.0
156
- tags:
157
- application: ${spring.application.name}
158
- web:
159
- server:
160
- request:
161
- autotime:
162
- enabled: true
160
+ data:
161
+ repository:
162
+ autotime:
163
+ enabled: true
163
164
 
164
165
  <%_ if (databaseTypeMongodb) { _%>
165
166
  mongock:
@@ -28,7 +28,7 @@ import static com.tngtech.archunit.core.domain.JavaClass.Predicates.belongToAnyO
28
28
  import static com.tngtech.archunit.library.Architectures.layeredArchitecture;
29
29
 
30
30
  <%_
31
- const hasClientLayer = !reactive && (applicationTypeMicroservice || applicationTypeGateway);
31
+ const hasClientLayer = feignClient;
32
32
  const hasDomainLayer = !databaseTypeNo;
33
33
  const hasConstants = !skipUserManagement || databaseTypeSql || databaseTypeMongodb || databaseTypeCouchbase || databaseTypeNeo4j;
34
34
  _%>
@@ -152,9 +152,6 @@ import org.springframework.test.web.servlet.MockMvc;
152
152
  import org.springframework.transaction.annotation.Transactional;
153
153
  <%_ } _%>
154
154
  <%_ } _%>
155
- <%_ if (anyFieldIsBlobDerived) { _%>
156
- import org.springframework.util.Base64Utils;
157
- <%_ } _%>
158
155
  <%_ if (reactive && (implementsEagerLoadApis || searchEngineElasticsearch)) { _%>
159
156
  import reactor.core.publisher.Flux;
160
157
  import reactor.core.publisher.Mono;
@@ -190,6 +187,9 @@ import java.time.temporal.ChronoUnit;
190
187
  <%_ if (!reactive && implementsEagerLoadApis) { _%>
191
188
  import java.util.ArrayList;
192
189
  <%_ } _%>
190
+ <%_ if (anyFieldIsBlobDerived) { _%>
191
+ import java.util.Base64;
192
+ <%_ } _%>
193
193
  <%_ if (searchEngineElasticsearch && !reactive) { _%>
194
194
  import java.util.Collections;
195
195
  <%_ if (paginationNo) { _%>
@@ -433,15 +433,15 @@ if (field.fieldTypeString || field.blobContentTypeText) {
433
433
  private static final String ENTITY_API_URL = "/api/<%= entityApiUrl %>";
434
434
  private static final String ENTITY_API_URL_ID = ENTITY_API_URL + "/{<%= primaryKey.name %>}";
435
435
  <%_ if (searchEngineAny) { _%>
436
- private static final String ENTITY_SEARCH_API_URL = "/api/_search/<%= entityApiUrl %>";
436
+ private static final String ENTITY_SEARCH_API_URL = "/api/<%= entityApiUrl %>/_search";
437
437
  <%_ } _%>
438
438
  <%_ if (!embedded && (primaryKey.hasLong || primaryKey.hasInteger)) { _%>
439
439
 
440
440
  private static Random random = new Random();
441
441
  <%_ if (primaryKey.hasLong) { _%>
442
- private static AtomicLong count = new AtomicLong(random.nextInt() + ( 2 * Integer.MAX_VALUE ));
442
+ private static AtomicLong longCount = new AtomicLong(random.nextInt() + ( 2 * Integer.MAX_VALUE ));
443
443
  <%_ } else if (primaryKey.hasInteger) { _%>
444
- private static AtomicInteger count = new AtomicInteger(random.nextInt() + ( 2 * Short.MAX_VALUE ));
444
+ private static AtomicInteger intCount = new AtomicInteger(random.nextInt() + ( 2 * Short.MAX_VALUE ));
445
445
  <%_ } _%>
446
446
  <%_ } _%>
447
447
 
@@ -933,7 +933,7 @@ _%>
933
933
  <%= !reactive ? '.andExpect(' : '.' %>jsonPath("$.[*].<%= field.fieldName %>ContentType").value(hasItem(<%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %>_CONTENT_TYPE))<%= !reactive ? ')' : '' %>
934
934
  <%_ } _%>
935
935
  <%= !reactive ? '.andExpect(' : '.' %>jsonPath("$.[*].<%= field.fieldName %>").value(hasItem(<%
936
- if (field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64Utils.encodeToString(<% } else
936
+ if (field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64.getEncoder().encodeToString(<% } else
937
937
  if (field.fieldTypeZonedDateTime) { %>sameInstant(<% } else
938
938
  if (field.fieldTypeBigDecimal) { %>sameNumber(<% } %><%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %><%
939
939
  if (field.fieldTypeBinary && !field.blobContentTypeText) { %><%
@@ -1020,7 +1020,7 @@ _%>
1020
1020
  <%= !reactive ? '.andExpect(' : '.' %>jsonPath("$.<%= field.fieldName %>ContentType").value(<%= reactive ? 'is(' : '' %><%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %>_CONTENT_TYPE))
1021
1021
  <%_ } _%>
1022
1022
  <%= !reactive ? '.andExpect(' : '.' %>jsonPath("$.<%= field.fieldName %>").value(<%= reactive ? 'is(' : '' %><%
1023
- if (field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64Utils.encodeToString(<% } else
1023
+ if (field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64.getEncoder().encodeToString(<% } else
1024
1024
  if (field.fieldTypeZonedDateTime) { %>sameInstant(<% } else
1025
1025
  if (field.fieldTypeBigDecimal) { %>sameNumber(<% } %><%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %><%
1026
1026
  if (field.fieldTypeBinary && !field.blobContentTypeText) { %><%
@@ -1259,7 +1259,7 @@ _%>
1259
1259
  .jsonPath("$.[*].<%= field.fieldName %>ContentType").value(hasItem(<%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %>_CONTENT_TYPE))
1260
1260
  <%_ } _%>
1261
1261
  .jsonPath("$.[*].<%= field.fieldName %>").value(hasItem(<% if
1262
- (field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64Utils.encodeToString(<% } else
1262
+ (field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64.getEncoder().encodeToString(<% } else
1263
1263
  if (field.fieldTypeZonedDateTime) { %>sameInstant(<% } else
1264
1264
  if (field.fieldTypeBigDecimal) { %>sameNumber(<% } %><%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %><%
1265
1265
  if (field.fieldTypeBinary && !field.blobContentTypeText) { %><% if (databaseTypeCassandra) { %>.array()<% } %>)<% } else
@@ -1301,7 +1301,7 @@ _%>
1301
1301
  .andExpect(jsonPath("$.[*].<%= field.fieldName %>ContentType").value(hasItem(<%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %>_CONTENT_TYPE)))
1302
1302
  <%_ } _%>
1303
1303
  .andExpect(jsonPath("$.[*].<%= field.fieldName %>").value(hasItem(<%
1304
- if (field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64Utils.encodeToString(<% } else
1304
+ if (field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64.getEncoder().encodeToString(<% } else
1305
1305
  if (field.fieldTypeZonedDateTime) { %>sameInstant(<% } else
1306
1306
  if (field.fieldTypeBigDecimal) { %>sameNumber(<% } %><%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %><%
1307
1307
  if (field.fieldTypeBinary && !field.blobContentTypeText) { %><%
@@ -1831,7 +1831,7 @@ _%>
1831
1831
  <%= !reactive ? '.andExpect(' : '.' %>jsonPath("$.[*].<%= field.fieldName %>ContentType").value(hasItem(<%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %>_CONTENT_TYPE))<%= !reactive ? ')' : '' %>
1832
1832
  <%_ } _%>
1833
1833
  <%= !reactive ? '.andExpect(' : '.' %>jsonPath("$.[*].<%= field.fieldName %>").value(hasItem(<%
1834
- if (field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64Utils.encodeToString(<% } else
1834
+ if (field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64.getEncoder().encodeToString(<% } else
1835
1835
  if (field.fieldTypeZonedDateTime) { %>sameInstant(<% } else
1836
1836
  if (field.fieldTypeBigDecimal) { %>sameNumber(<% } %><%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %><%
1837
1837
  if (field.fieldTypeBinary && !field.blobContentTypeText) { %><%
@@ -529,14 +529,14 @@ class AccountResourceIT {
529
529
  .contentType(MediaType.APPLICATION_JSON)
530
530
  .bodyValue(TestUtil.convertObjectToJsonBytes(secondUser))
531
531
  .exchange()
532
- .expectStatus().isCreated();
532
+ .expectStatus().isBadRequest();
533
533
  <%_ } else { _%>
534
534
  restAccountMockMvc.perform(
535
535
  post("/api/register")
536
536
  .contentType(MediaType.APPLICATION_JSON)
537
537
  .content(TestUtil.convertObjectToJsonBytes(secondUser))<% if (authenticationUsesCsrf) { %>
538
538
  .with(csrf())<% } %>)
539
- .andExpect(status().isCreated());
539
+ .andExpect(status().is4xxClientError());
540
540
  <%_ } _%>
541
541
  }
542
542
 
@@ -655,14 +655,14 @@ class AccountResourceIT {
655
655
  .contentType(MediaType.APPLICATION_JSON)
656
656
  .bodyValue(TestUtil.convertObjectToJsonBytes(secondUser))
657
657
  .exchange()
658
- .expectStatus().isCreated();
658
+ .expectStatus().is4xxClientError();
659
659
  <%_ } else { _%>
660
660
  restAccountMockMvc.perform(
661
661
  post("/api/register")
662
662
  .contentType(MediaType.APPLICATION_JSON)
663
663
  .content(TestUtil.convertObjectToJsonBytes(secondUser))<% if (authenticationUsesCsrf) { %>
664
664
  .with(csrf())<% } %>)
665
- .andExpect(status().isCreated());
665
+ .andExpect(status().is4xxClientError());
666
666
  <%_ } _%>
667
667
  }
668
668
 
@@ -45,11 +45,11 @@ public class ExceptionTranslatorTestController {
45
45
  }
46
46
 
47
47
  @GetMapping("/missing-servlet-request-part")
48
- public void missingServletRequestPartException(@RequestPart String part) {
48
+ public void missingServletRequestPartException(@RequestPart("part") String part) {
49
49
  }
50
50
 
51
51
  @GetMapping("/missing-servlet-request-parameter")
52
- public void missingServletRequestParameterException(@RequestParam String param) {
52
+ public void missingServletRequestParameterException(@RequestParam("param") String param) {
53
53
  }
54
54
 
55
55
  @GetMapping("/access-denied")
@@ -139,7 +139,7 @@ export const getCacheProviderMavenDefinition = (cacheProvider, javaDependencies)
139
139
  javaxCacheApi,
140
140
  {
141
141
  groupId: 'org.infinispan',
142
- artifactId: 'infinispan-hibernate-cache-v60',
142
+ artifactId: 'infinispan-hibernate-cache-v62',
143
143
  },
144
144
  {
145
145
  groupId: 'org.infinispan',
@@ -24,7 +24,7 @@ dependencies {
24
24
  implementation "com.hazelcast:hazelcast-spring:${hazelcastSpringVersion}"
25
25
  <%_ } _%>
26
26
  <%_ if (cacheProviderInfinispan) { _%>
27
- implementation "org.infinispan:infinispan-hibernate-cache-v60"
27
+ implementation "org.infinispan:infinispan-hibernate-cache-v62"
28
28
  implementation "org.infinispan:infinispan-spring-boot3-starter-embedded"
29
29
  implementation "org.infinispan:infinispan-commons-jakarta"
30
30
  implementation "org.infinispan:infinispan-core-jakarta"
@@ -19,7 +19,7 @@
19
19
  package <%= packageName %>.config;
20
20
 
21
21
  import org.hibernate.service.ServiceRegistry;
22
- import org.infinispan.hibernate.cache.v60.InfinispanRegionFactory;
22
+ import org.infinispan.hibernate.cache.v62.InfinispanRegionFactory;
23
23
  import org.infinispan.manager.EmbeddedCacheManager;
24
24
  import org.springframework.stereotype.Component;
25
25
 
@@ -43,7 +43,7 @@ public class <%= upperFirstCamelCaseBaseName %>KafkaResource {
43
43
  }
44
44
 
45
45
  @PostMapping("/publish")
46
- public void publish(@RequestParam String message) {
46
+ public void publish(@RequestParam("message") String message) {
47
47
  log.debug("REST request the message : {} to send to Kafka topic ", message);
48
48
  streamBridge.send(PRODUCER_BINDING_NAME, message);
49
49
  }