generator-jhipster 7.2.0 → 7.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (313) hide show
  1. package/cli/environment-builder.js +1 -0
  2. package/cli/import-jdl.js +3 -2
  3. package/cli/jdl.js +1 -0
  4. package/cli/jhipster-command.js +2 -2
  5. package/cli/program.js +32 -29
  6. package/generators/app/index.js +35 -26
  7. package/generators/aws/index.js +8 -8
  8. package/generators/aws/lib/eb.js +1 -1
  9. package/generators/azure-app-service/index.js +16 -9
  10. package/generators/azure-app-service/templates/github/workflows/azure-app-service.yml.ejs +2 -2
  11. package/generators/azure-spring-cloud/index.js +16 -9
  12. package/generators/azure-spring-cloud/templates/github/workflows/azure-spring-cloud.yml.ejs +2 -2
  13. package/generators/bootstrap/index.js +57 -61
  14. package/generators/ci-cd/index.js +11 -8
  15. package/generators/ci-cd/templates/github-actions.yml.ejs +1 -1
  16. package/generators/ci-cd/templates/travis.yml.ejs +9 -4
  17. package/generators/client/__workflow/devserver-angular.json +1 -1
  18. package/generators/client/__workflow/devserver-react.json +1 -1
  19. package/generators/client/__workflow/devserver-vue.json +1 -1
  20. package/generators/client/files-angular.js +6 -0
  21. package/generators/client/files-common.js +6 -2
  22. package/generators/client/files-react.js +13 -2
  23. package/generators/client/files-vue.js +56 -6
  24. package/generators/client/index.js +114 -32
  25. package/generators/client/needle-api/needle-client-angular.js +1 -1
  26. package/generators/client/needle-api/needle-client-vue.js +57 -7
  27. package/generators/client/templates/angular/.eslintrc.json.ejs +1 -0
  28. package/generators/client/templates/angular/package.json +19 -19
  29. package/generators/client/templates/angular/package.json.ejs +2 -1
  30. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.spec.ts.ejs +52 -54
  31. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.service.spec.ts.ejs +65 -0
  32. package/generators/client/templates/angular/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.spec.ts.ejs +35 -37
  33. package/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.spec.ts.ejs +78 -80
  34. package/generators/client/templates/angular/src/main/webapp/app/account/password/password.service.spec.ts.ejs +41 -0
  35. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.spec.ts.ejs +73 -75
  36. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.spec.ts.ejs +62 -0
  37. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.spec.ts.ejs +44 -46
  38. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.service.spec.ts.ejs +61 -0
  39. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.spec.ts.ejs +116 -118
  40. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.service.spec.ts.ejs +66 -0
  41. package/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.component.spec.ts.ejs +75 -77
  42. package/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.spec.ts.ejs +74 -76
  43. package/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.spec.ts.ejs +48 -50
  44. package/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.service.spec.ts.ejs +50 -52
  45. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.spec.ts.ejs +45 -47
  46. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.service.spec.ts.ejs +66 -0
  47. package/generators/client/templates/angular/src/main/webapp/app/admin/health/modal/health-modal.component.spec.ts.ejs +99 -101
  48. package/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.spec.ts.ejs +61 -63
  49. package/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.service.spec.ts.ejs +19 -21
  50. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/jvm-memory/jvm-memory.component.html.ejs +2 -2
  51. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.spec.ts.ejs +28 -30
  52. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.service.spec.ts.ejs +62 -64
  53. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.spec.ts.ejs +35 -37
  54. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/detail/user-management-detail.component.spec.ts.ejs +40 -42
  55. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.spec.ts.ejs +87 -89
  56. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/service/user-management.service.spec.ts.ejs +41 -43
  57. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.spec.ts.ejs +81 -83
  58. package/generators/client/templates/angular/src/main/webapp/app/app.module.ts.ejs +3 -0
  59. package/generators/client/templates/angular/src/main/webapp/app/core/auth/account.service.spec.ts.ejs +178 -180
  60. package/generators/client/templates/angular/src/main/webapp/app/core/config/application-config.service.ts.ejs +9 -0
  61. package/generators/client/templates/angular/src/main/webapp/app/entities/user/user.service.spec.ts.ejs +87 -89
  62. package/generators/client/templates/angular/src/main/webapp/app/home/home.component.spec.ts.ejs +93 -95
  63. package/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.spec.ts.ejs +166 -168
  64. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts.ejs +66 -68
  65. package/generators/client/templates/angular/src/main/webapp/app/layouts/profiles/page-ribbon.component.spec.ts.ejs +27 -29
  66. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.spec.ts.ejs +112 -114
  67. package/generators/client/templates/angular/src/main/webapp/app/shared/alert/alert-error.component.spec.ts.ejs +132 -134
  68. package/generators/client/templates/angular/src/main/webapp/app/shared/alert/alert.component.spec.ts.ejs +29 -31
  69. package/generators/client/templates/angular/webpack/webpack.custom.js.ejs +2 -3
  70. package/generators/client/templates/common/README.md.jhi.client.ejs +34 -0
  71. package/generators/client/templates/common/package.json +7 -7
  72. package/generators/client/templates/common/webpack/webpack.microfrontend.js.jhi.ejs +56 -0
  73. package/generators/client/templates/react/.eslintrc.json.ejs +1 -0
  74. package/generators/client/templates/react/package.json +57 -56
  75. package/generators/client/templates/react/package.json.ejs +5 -2
  76. package/generators/client/templates/react/src/main/webapp/app/app.scss.ejs +0 -3
  77. package/generators/client/templates/react/src/main/webapp/app/modules/account/password/password.tsx.ejs +2 -2
  78. package/generators/client/templates/react/src/main/webapp/app/modules/administration/configuration/configuration.tsx.ejs +2 -2
  79. package/generators/client/templates/react/src/main/webapp/app/modules/administration/gateway/gateway.tsx.ejs +2 -2
  80. package/generators/client/templates/react/src/main/webapp/app/modules/administration/metrics/metrics.tsx.ejs +6 -6
  81. package/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/user-management.tsx.ejs +8 -8
  82. package/generators/client/templates/react/src/main/webapp/app/modules/home/home.tsx.ejs +1 -1
  83. package/generators/client/templates/react/src/main/webapp/app/shared/layout/header/header.tsx.ejs +1 -1
  84. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/account.tsx.ejs +3 -3
  85. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/admin.tsx.ejs +7 -7
  86. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/menu-components.tsx.ejs +1 -1
  87. package/generators/client/templates/react/webpack/webpack.dev.js.ejs +17 -1
  88. package/generators/client/templates/react/webpack/webpack.prod.js.ejs +13 -1
  89. package/generators/client/templates/vue/.eslintrc.js.ejs +8 -5
  90. package/generators/client/templates/vue/package.json +40 -49
  91. package/generators/client/templates/vue/package.json.ejs +14 -18
  92. package/generators/client/templates/vue/src/main/webapp/app/account/account.service.ts.ejs +6 -5
  93. package/generators/client/templates/vue/src/main/webapp/app/account/settings/settings.vue.ejs +7 -1
  94. package/generators/client/templates/vue/src/main/webapp/app/admin/configuration/configuration.service.ts.ejs +1 -1
  95. package/generators/client/templates/vue/src/main/webapp/app/admin/configuration/configuration.vue.ejs +1 -1
  96. package/generators/client/templates/vue/src/main/webapp/app/admin/metrics/metrics.component.ts.ejs +1 -1
  97. package/generators/client/templates/vue/src/main/webapp/app/admin/tracker/tracker.service.ts.ejs +5 -4
  98. package/generators/client/templates/vue/src/main/webapp/app/admin/user-management/user-management-edit.component.ts.ejs +9 -0
  99. package/generators/client/templates/vue/src/main/webapp/app/admin/user-management/user-management-view.component.ts.ejs +5 -0
  100. package/generators/client/templates/vue/src/main/webapp/app/admin/user-management/user-management.component.ts.ejs +5 -0
  101. package/generators/client/templates/vue/src/main/webapp/app/constants.ts.ejs +16 -6
  102. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +27 -8
  103. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.vue.ejs +6 -0
  104. package/generators/client/templates/vue/src/main/webapp/app/declarations.d.ts.ejs +41 -0
  105. package/generators/client/templates/vue/src/main/webapp/app/entities/entities-menu.component.ts.ejs +34 -0
  106. package/generators/client/templates/vue/src/main/webapp/app/entities/entities-menu.vue.ejs +13 -0
  107. package/generators/client/templates/vue/src/main/webapp/app/entities/entities.component.ts.ejs +14 -0
  108. package/generators/client/templates/vue/src/main/webapp/app/entities/entities.vue.ejs +5 -0
  109. package/generators/client/templates/vue/{webpack/utils.js.ejs → src/main/webapp/app/index.ts.ejs} +1 -12
  110. package/generators/client/templates/vue/src/main/webapp/app/locale/translation.service.ts.ejs +26 -9
  111. package/generators/client/templates/vue/src/main/webapp/app/main.ts.ejs +23 -11
  112. package/generators/client/templates/vue/src/main/webapp/app/router/admin.ts.ejs +4 -4
  113. package/generators/client/templates/vue/src/main/webapp/app/router/entities.ts.ejs +45 -3
  114. package/generators/client/templates/vue/src/main/webapp/app/router/index.ts.ejs +19 -3
  115. package/generators/client/templates/vue/src/main/webapp/app/shared/alert/alert.service.ts.ejs +61 -0
  116. package/generators/client/templates/vue/src/main/webapp/app/shared/config/axios-interceptor.ts.ejs +0 -2
  117. package/generators/client/templates/vue/src/main/webapp/app/shared/data/data-utils.service.ts.ejs +3 -1
  118. package/generators/client/templates/vue/src/main/webapp/app/shims-vue.d.ts.ejs +17 -3
  119. package/generators/client/templates/vue/src/test/javascript/jest.conf.js.ejs +25 -10
  120. package/generators/client/templates/vue/src/test/javascript/spec/app/account/account.service.spec.ts.ejs +2 -2
  121. package/generators/client/templates/vue/src/test/javascript/spec/app/account/login-form/login-form.component.spec.ts.ejs +2 -2
  122. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/tracker/tracker.component.spec.ts.ejs +12 -12
  123. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/tracker/tracker.service.spec.ts.ejs +2 -1
  124. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/user-management/user-management-edit.component.spec.ts.ejs +5 -1
  125. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/user-management/user-management-view.component.spec.ts.ejs +2 -1
  126. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts.ejs +5 -1
  127. package/generators/client/templates/vue/src/test/javascript/spec/app/core/jhi-navbar/jhi-navbar.component.spec.ts.ejs +10 -4
  128. package/generators/client/templates/vue/src/test/javascript/spec/app/entities/entities-menu.spec.ts.ejs +52 -0
  129. package/generators/client/templates/vue/src/test/javascript/spec/app/microfrontends/entities-menu.component.ts.ejs +4 -0
  130. package/generators/client/templates/vue/src/test/javascript/spec/app/microfrontends/entities-menu.vue.ejs +7 -0
  131. package/generators/client/templates/vue/src/test/javascript/spec/app/microfrontends/entities-router.ts.ejs +1 -0
  132. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/alert/alert.service.spec.ts.ejs +124 -0
  133. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/config/axios-interceptor.spec.ts.ejs +0 -1
  134. package/generators/client/templates/vue/tsconfig.json.ejs +6 -10
  135. package/generators/client/templates/vue/tsconfig.spec.json.ejs +37 -0
  136. package/generators/client/templates/vue/webpack/config.js.ejs +50 -0
  137. package/generators/client/templates/vue/webpack/vue.utils.js.ejs +33 -32
  138. package/generators/client/templates/vue/webpack/webpack.common.js.ejs +152 -126
  139. package/generators/client/templates/vue/webpack/webpack.dev.js.ejs +19 -76
  140. package/generators/client/templates/vue/webpack/webpack.microfrontend.js.jhi.vue.ejs +77 -0
  141. package/generators/client/templates/vue/webpack/webpack.prod.js.ejs +5 -41
  142. package/generators/cloudfoundry/index.js +9 -9
  143. package/generators/common/index.js +12 -10
  144. package/generators/common/templates/.husky/pre-commit +1 -1
  145. package/generators/common/templates/.prettierrc.ejs +1 -1
  146. package/generators/common/templates/README.md.jhi.ejs +21 -0
  147. package/generators/common/templates/package.json +4 -4
  148. package/generators/cypress/index.js +12 -9
  149. package/generators/cypress/templates/cypress.json.ejs +9 -2
  150. package/generators/cypress/templates/src/test/javascript/cypress/plugins/index.ts.ejs +4 -4
  151. package/generators/cypress/templates/src/test/javascript/cypress/support/commands.ts.ejs +30 -2
  152. package/generators/cypress/templates/src/test/javascript/cypress/support/entity.ts.ejs +4 -4
  153. package/generators/cypress/templates/src/test/javascript/cypress/support/index.ts.ejs +1 -1
  154. package/generators/cypress/templates/src/test/javascript/cypress/support/management.ts.ejs +1 -1
  155. package/generators/cypress/templates/src/test/javascript/cypress/support/navbar.ts.ejs +1 -1
  156. package/generators/database-changelog/index.js +33 -22
  157. package/generators/database-changelog-liquibase/index.js +12 -8
  158. package/generators/database-changelog-liquibase/templates/src/main/resources/config/liquibase/changelog/updated_entity_constraints.xml.ejs +1 -1
  159. package/generators/docker-compose/index.js +11 -12
  160. package/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +13 -12
  161. package/generators/entities/index.js +35 -26
  162. package/generators/entities-client/index.js +10 -7
  163. package/generators/entity/index.js +49 -29
  164. package/generators/entity-client/files.js +7 -16
  165. package/generators/entity-client/index.js +74 -11
  166. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/delete/entity-management-delete-dialog.component.spec.ts.ejs +42 -44
  167. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.spec.ts.ejs +58 -60
  168. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs +1 -1
  169. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.spec.ts.ejs +105 -107
  170. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.ts.ejs +8 -1
  171. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/route/entity-management-routing-resolve.service.spec.ts.ejs +52 -54
  172. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/route/entity-management-routing.module.ts.ejs +1 -1
  173. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.spec.ts.ejs +173 -175
  174. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.html.ejs +2 -4
  175. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.spec.ts.ejs +193 -195
  176. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.ts.ejs +7 -0
  177. package/generators/entity-client/templates/common/src/test/javascript/cypress/integration/entity/entity.spec.ts.ejs +269 -109
  178. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-delete-dialog.tsx.ejs +5 -2
  179. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-update.tsx.ejs +17 -14
  180. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.tsx.ejs +11 -13
  181. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity-details.component.ts.ejs +5 -0
  182. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity-update.component.ts.ejs +23 -8
  183. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity-update.vue.ejs +6 -9
  184. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity.component.ts.ejs +9 -1
  185. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity.model.ts.ejs +1 -1
  186. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity.service.ts.ejs +2 -6
  187. package/generators/entity-client/templates/vue/src/test/javascript/spec/app/entities/entity-details.component.spec.ts.ejs +2 -1
  188. package/generators/entity-client/templates/vue/src/test/javascript/spec/app/entities/entity-update.component.spec.ts.ejs +8 -1
  189. package/generators/entity-client/templates/vue/src/test/javascript/spec/app/entities/entity.component.spec.ts.ejs +8 -2
  190. package/generators/entity-client/templates/vue/src/test/javascript/spec/app/entities/entity.service.spec.ts.ejs +1 -1
  191. package/generators/entity-i18n/index.js +7 -4
  192. package/generators/entity-server/files-couchbase.js +2 -2
  193. package/generators/entity-server/files.js +35 -30
  194. package/generators/entity-server/index.js +12 -8
  195. package/generators/entity-server/templates/couchbase/src/main/java/package/repository/EntityRepository.java.ejs +2 -2
  196. package/generators/entity-server/templates/couchbase/src/main/resources/config/couchmove/changelog/entity.fts.ejs +1 -1
  197. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.ejs +6 -2
  198. package/generators/entity-server/templates/src/main/java/package/domain/enumeration/Enum.java.ejs +1 -1
  199. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository.java.ejs +2 -2
  200. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryInternalImpl_reactive.java.ejs +17 -30
  201. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository_reactive.java.ejs +5 -5
  202. package/generators/entity-server/templates/src/main/java/package/repository/EntitySqlHelper_reactive.java.ejs +46 -0
  203. package/generators/entity-server/templates/src/main/java/package/repository/rowmapper/EntityRowMapper.java.ejs +3 -3
  204. package/generators/entity-server/templates/src/main/java/package/repository/search/EntitySearchRepository.java.ejs +2 -2
  205. package/generators/entity-server/templates/src/main/java/package/service/EntityQueryService.java.ejs +8 -8
  206. package/generators/entity-server/templates/src/main/java/package/service/EntityService.java.ejs +4 -4
  207. package/generators/entity-server/templates/src/main/java/package/service/criteria/EntityCriteria.java.ejs +4 -4
  208. package/generators/entity-server/templates/src/main/java/package/service/dto/EntityDTO.java.ejs +7 -3
  209. package/generators/entity-server/templates/src/main/java/package/service/impl/EntityServiceImpl.java.ejs +8 -8
  210. package/generators/entity-server/templates/src/main/java/package/service/mapper/BaseEntityMapper.java.ejs +1 -1
  211. package/generators/entity-server/templates/src/main/java/package/service/mapper/EntityMapper.java.ejs +7 -3
  212. package/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs +51 -53
  213. package/generators/entity-server/templates/src/test/java/package/domain/EntityTest.java.ejs +1 -1
  214. package/generators/entity-server/templates/src/test/java/package/repository/search/EntitySearchRepositoryMockConfiguration.java.ejs +1 -1
  215. package/generators/entity-server/templates/src/test/java/package/service/dto/EntityDTOTest.java.ejs +1 -1
  216. package/generators/entity-server/templates/src/test/java/package/service/mapper/EntityMapperTest.java.ejs +1 -1
  217. package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +17 -14
  218. package/generators/gae/index.js +10 -10
  219. package/generators/generator-base-blueprint.js +14 -46
  220. package/generators/generator-base-private.js +42 -22
  221. package/generators/generator-base.js +57 -20
  222. package/generators/generator-constants.js +29 -21
  223. package/generators/generator-transforms.js +39 -27
  224. package/generators/heroku/index.js +27 -48
  225. package/generators/init/constants.cjs +1 -1
  226. package/generators/init/templates/.husky/pre-commit +1 -1
  227. package/generators/java/constants.cjs +1 -1
  228. package/generators/kubernetes/files.js +3 -0
  229. package/generators/kubernetes/index.js +10 -10
  230. package/generators/kubernetes/templates/db/couchbase.yml.ejs +1 -1
  231. package/generators/kubernetes/templates/deployment.yml.ejs +8 -3
  232. package/generators/kubernetes/templates/istio/destination-rule.yml.ejs +1 -1
  233. package/generators/kubernetes/templates/istio/gateway/grafana-gateway.yml.ejs +5 -2
  234. package/generators/kubernetes/templates/istio/gateway/jhipster-grafana-gateway.yml.ejs +5 -2
  235. package/generators/kubernetes/templates/istio/gateway/kiali-gateway.yml.ejs +10 -8
  236. package/generators/kubernetes/templates/istio/gateway/zipkin-gateway.yml.ejs +5 -2
  237. package/generators/kubernetes/templates/istio/gateway.yml.ejs +7 -5
  238. package/generators/kubernetes/templates/secret/couchbase-secret.yml.ejs +9 -0
  239. package/generators/kubernetes-base.js +1 -0
  240. package/generators/kubernetes-helm/files.js +3 -8
  241. package/generators/kubernetes-helm/index.js +10 -10
  242. package/generators/kubernetes-helm/templates/README-KUBERNETES-HELM.md.ejs +0 -1
  243. package/generators/kubernetes-helm/templates/app/Chart.yml.ejs +27 -0
  244. package/generators/kubernetes-helm/templates/app/helpers.tpl.ejs +0 -11
  245. package/generators/kubernetes-helm/templates/app/requirements.yml.ejs +7 -2
  246. package/generators/kubernetes-helm/templates/app/values.yml.ejs +68 -5
  247. package/generators/kubernetes-helm/templates/csvc/Chart.yml.ejs +17 -0
  248. package/generators/kubernetes-helm/templates/csvc/requirements.yml.ejs +2 -2
  249. package/generators/kubernetes-knative/index.js +10 -10
  250. package/generators/kubernetes-knative/templates/istio/gateway.yml.ejs +6 -4
  251. package/generators/kubernetes-knative/templates/service.yml.ejs +1 -1
  252. package/generators/languages/index.js +13 -13
  253. package/generators/languages/templates/src/main/webapp/i18n/hr/reset.json.ejs +1 -2
  254. package/generators/languages/templates/src/main/webapp/i18n/vi/login.json +1 -1
  255. package/generators/maven/templates/.mvn/wrapper/maven-wrapper.properties +1 -1
  256. package/generators/openapi-client/index.js +13 -10
  257. package/generators/openshift/index.js +10 -11
  258. package/generators/openshift/templates/deployment.yml.ejs +1 -1
  259. package/generators/page/index.js +12 -10
  260. package/generators/server/__snapshots__/generator.spec.mjs.snap +12 -0
  261. package/generators/server/files-sql.js +52 -0
  262. package/generators/server/files.js +15 -0
  263. package/generators/server/index.js +100 -33
  264. package/generators/server/needle-api/needle-server-cache.js +4 -6
  265. package/generators/server/templates/.mvn/wrapper/maven-wrapper.properties +1 -1
  266. package/generators/server/templates/build.gradle.ejs +17 -1
  267. package/generators/server/templates/gradle.properties.ejs +11 -11
  268. package/generators/server/templates/npmw +1 -1
  269. package/generators/server/templates/npmw.cmd +1 -1
  270. package/generators/server/templates/pom.xml.ejs +128 -9
  271. package/generators/server/templates/settings.gradle.ejs +9 -0
  272. package/generators/server/templates/sql/reactive/src/main/java/package/repository/UserSqlHelper.java.ejs +48 -0
  273. package/generators/server/templates/src/main/docker/app.yml.ejs +2 -1
  274. package/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +13 -12
  275. package/generators/server/templates/src/main/java/package/aop/logging/LoggingAspect.java.ejs +1 -1
  276. package/generators/server/templates/src/main/java/package/config/DatabaseConfiguration_cassandra.java.ejs +0 -6
  277. package/generators/server/templates/src/main/java/package/config/DatabaseConfiguration_sql.java.ejs +2 -2
  278. package/generators/server/templates/src/main/java/package/config/JacksonConfiguration.java.ejs +1 -1
  279. package/generators/server/templates/src/main/java/package/config/LocaleConfiguration.java.ejs +0 -2
  280. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs +2 -5
  281. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration_reactive.java.ejs +9 -1
  282. package/generators/server/templates/src/main/java/package/config/WebConfigurer.java.ejs +0 -1
  283. package/generators/server/templates/src/main/java/package/management/SecurityMetersService.java.ejs +68 -0
  284. package/generators/server/templates/src/main/java/package/repository/UserRepository.java.ejs +0 -23
  285. package/generators/server/templates/src/main/java/package/security/PersistentTokenRememberMeServices.java.ejs +0 -2
  286. package/generators/server/templates/src/main/java/package/security/jwt/TokenProvider.java.ejs +29 -4
  287. package/generators/server/templates/src/main/java/package/security/oauth2/CustomClaimConverter.java.ejs +21 -9
  288. package/generators/server/templates/src/main/java/package/service/UserService.java.ejs +13 -5
  289. package/generators/server/templates/src/main/resources/config/application-dev.yml.ejs +1 -1
  290. package/generators/server/templates/src/main/resources/config/application-prod.yml.ejs +1 -1
  291. package/generators/server/templates/src/main/resources/config/application.yml.ejs +7 -7
  292. package/generators/server/templates/src/main/resources/static/microservices_index.html.ejs +1 -1
  293. package/generators/server/templates/src/test/java/package/management/SecurityMetersServiceTests.java.ejs +113 -0
  294. package/generators/server/templates/src/test/java/package/security/jwt/JWTFilterTest.java.ejs +6 -1
  295. package/generators/server/templates/src/test/java/package/security/jwt/TokenProviderSecurityMetersTests.java.ejs +198 -0
  296. package/generators/server/templates/src/test/java/package/security/jwt/TokenProviderTest.java.ejs +13 -3
  297. package/generators/server/templates/src/test/java/package/security/oauth2/AuthorizationHeaderUtilTest.java.ejs +16 -2
  298. package/generators/server/templates/src/test/java/package/security/oauth2/CustomClaimConverterIT.java.ejs +63 -0
  299. package/generators/spring-controller/index.js +9 -7
  300. package/generators/spring-service/index.js +10 -7
  301. package/generators/upgrade/index.js +4 -5
  302. package/generators/utils.js +2 -2
  303. package/generators/workspaces/index.js +16 -7
  304. package/jdl/jhipster/default-application-options.js +9 -7
  305. package/package.json +23 -23
  306. package/utils/entity.js +21 -4
  307. package/utils/field.js +12 -2
  308. package/utils/multi-step-transform/index.js +8 -8
  309. package/generators/client/templates/react/.npmrc.ejs +0 -1
  310. package/generators/client/templates/vue/webpack/dev.env.js.ejs +0 -17
  311. package/generators/client/templates/vue/webpack/env.js.ejs +0 -67
  312. package/generators/client/templates/vue/webpack/loader.conf.js.ejs +0 -20
  313. package/generators/client/templates/vue/webpack/prod.env.js.ejs +0 -15
@@ -28,6 +28,7 @@
28
28
  <version>0.0.1-SNAPSHOT</version>
29
29
  <packaging>jar</packaging>
30
30
  <name><%= humanizedBaseName %></name>
31
+ <description><%= projectDescription %></description>
31
32
 
32
33
  <repositories>
33
34
  <%_ if (SPRING_BOOT_VERSION.indexOf('M') > -1 || SPRING_BOOT_VERSION.indexOf('RC') > -1) { _%>
@@ -104,7 +105,7 @@
104
105
  https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies/${spring-boot.version} -->
105
106
  <liquibase.version><%= LIQUIBASE_VERSION %></liquibase.version>
106
107
  <%_ if (!reactive) { _%>
107
- <liquibase-hibernate5.version>4.4.3</liquibase-hibernate5.version>
108
+ <liquibase-hibernate5.version><%= LIQUIBASE_VERSION %></liquibase-hibernate5.version>
108
109
  <%_ } _%>
109
110
  <%_ if (devDatabaseTypeH2Disk) { _%>
110
111
  <h2.version>1.4.200</h2.version>
@@ -125,13 +126,13 @@
125
126
  https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies/${spring-boot.version} -->
126
127
  <cassandra-driver.version>4.11.3</cassandra-driver.version>
127
128
  <%_ } _%>
128
- <archunit-junit5.version>0.21.0</archunit-junit5.version>
129
+ <archunit-junit5.version>0.22.0</archunit-junit5.version>
129
130
  <mapstruct.version>1.4.2.Final</mapstruct.version>
130
131
  <%_ if (enableSwaggerCodegen) { _%>
131
132
  <jackson-databind-nullable.version><%= JACKSON_DATABIND_NULLABLE_VERSION %></jackson-databind-nullable.version>
132
133
  <%_ } _%>
133
134
  <%_ if (cacheProviderCaffeine) { _%>
134
- <caffeine.version>3.0.3</caffeine.version>
135
+ <caffeine.version>3.0.4</caffeine.version>
135
136
  <typesafe.version>1.4.1</typesafe.version>
136
137
  <%_ } _%>
137
138
  <%_ if (databaseTypeNeo4j) { _%>
@@ -150,10 +151,10 @@
150
151
  <maven-idea-plugin.version>2.2.1</maven-idea-plugin.version>
151
152
  <maven-resources-plugin.version>3.2.0</maven-resources-plugin.version>
152
153
  <maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
153
- <maven-war-plugin.version>3.3.1</maven-war-plugin.version>
154
+ <maven-war-plugin.version>3.3.2</maven-war-plugin.version>
154
155
  <maven-checkstyle-plugin.version>3.1.2</maven-checkstyle-plugin.version>
155
- <checkstyle.version>9.0</checkstyle.version>
156
- <nohttp-checkstyle.version>0.0.9</nohttp-checkstyle.version>
156
+ <checkstyle.version>9.1</checkstyle.version>
157
+ <nohttp-checkstyle.version>0.0.10</nohttp-checkstyle.version>
157
158
  <%_ if (!skipClient) { _%>
158
159
  <frontend-maven-plugin.version>1.12.0</frontend-maven-plugin.version>
159
160
  <checksum-maven-plugin.version>1.11</checksum-maven-plugin.version>
@@ -170,7 +171,7 @@
170
171
  <openapi-generator-maven-plugin.version>5.2.1</openapi-generator-maven-plugin.version>
171
172
  <%_ } _%>
172
173
  <properties-maven-plugin.version>1.0.0</properties-maven-plugin.version>
173
- <sonar-maven-plugin.version>3.9.0.2155</sonar-maven-plugin.version>
174
+ <sonar-maven-plugin.version>3.9.1.2184</sonar-maven-plugin.version>
174
175
  <!-- jhipster-needle-maven-property -->
175
176
  </properties>
176
177
 
@@ -1378,8 +1379,8 @@
1378
1379
  <version>[${maven.version},)</version>
1379
1380
  </requireMavenVersion>
1380
1381
  <requireJavaVersion>
1381
- <message>You are running an incompatible version of Java. JHipster supports JDK 8 to 16.</message>
1382
- <version>[1.8,17)</version>
1382
+ <message>You are running an incompatible version of Java. JHipster supports JDK <%= JAVA_COMPATIBLE_VERSIONS[0] %> to <%= JAVA_COMPATIBLE_VERSIONS[JAVA_COMPATIBLE_VERSIONS.length -1] %>.</message>
1383
+ <version><%= JAVA_COMPATIBLE_VERSIONS.map(version => parseInt(version)).map(version => `[${version},${version +1})`).join(',') %></version>
1383
1384
  </requireJavaVersion>
1384
1385
  </rules>
1385
1386
  </configuration>
@@ -1429,6 +1430,7 @@
1429
1430
  </execution>
1430
1431
  </executions>
1431
1432
  </plugin>
1433
+ <%_ if (!reactive) { _%>
1432
1434
  <plugin>
1433
1435
  <groupId>org.apache.maven.plugins</groupId>
1434
1436
  <artifactId>maven-surefire-plugin</artifactId>
@@ -1472,6 +1474,7 @@
1472
1474
  </execution>
1473
1475
  </executions>
1474
1476
  </plugin>
1477
+ <%_ } _%>
1475
1478
  <%_ if (enableSwaggerCodegen) { _%>
1476
1479
  <plugin>
1477
1480
  <!--
@@ -1998,6 +2001,122 @@
1998
2001
  </pluginManagement>
1999
2002
  </build>
2000
2003
  </profile>
2004
+ <%_ } _%>
2005
+ <%_ if (reactive) { _%>
2006
+ <profile>
2007
+ <id>surefire-java13-</id>
2008
+ <activation>
2009
+ <jdk>(,13]</jdk>
2010
+ </activation>
2011
+ <build>
2012
+ <pluginManagement>
2013
+ <plugins>
2014
+ <plugin>
2015
+ <groupId>org.apache.maven.plugins</groupId>
2016
+ <artifactId>maven-surefire-plugin</artifactId>
2017
+ <version>${maven-surefire-plugin.version}</version>
2018
+ <configuration>
2019
+ <!-- Force alphabetical order to have a reproducible build -->
2020
+ <runOrder>alphabetical</runOrder>
2021
+ <excludes>
2022
+ <exclude>**/*IT*</exclude>
2023
+ <exclude>**/*IntTest*</exclude>
2024
+ </excludes>
2025
+ </configuration>
2026
+ </plugin>
2027
+ <plugin>
2028
+ <groupId>org.apache.maven.plugins</groupId>
2029
+ <artifactId>maven-failsafe-plugin</artifactId>
2030
+ <version>${maven-failsafe-plugin.version}</version>
2031
+ <configuration>
2032
+ <!-- Due to spring-boot repackage, without adding this property test classes are not found
2033
+ See https://github.com/spring-projects/spring-boot/issues/6254 -->
2034
+ <classesDirectory>${project.build.outputDirectory}</classesDirectory>
2035
+ <!-- Force alphabetical order to have a reproducible build -->
2036
+ <runOrder>alphabetical</runOrder>
2037
+ <includes>
2038
+ <include>**/*IT*</include>
2039
+ <include>**/*IntTest*</include>
2040
+ </includes>
2041
+ </configuration>
2042
+ <executions>
2043
+ <execution>
2044
+ <id>integration-test</id>
2045
+ <goals>
2046
+ <goal>integration-test</goal>
2047
+ </goals>
2048
+ </execution>
2049
+ <execution>
2050
+ <id>verify</id>
2051
+ <goals>
2052
+ <goal>verify</goal>
2053
+ </goals>
2054
+ </execution>
2055
+ </executions>
2056
+ </plugin>
2057
+ </plugins>
2058
+ </pluginManagement>
2059
+ </build>
2060
+ </profile>
2061
+ <profile>
2062
+ <id>surefire-java13+</id>
2063
+ <activation>
2064
+ <jdk>(13,]</jdk>
2065
+ </activation>
2066
+ <build>
2067
+ <pluginManagement>
2068
+ <plugins>
2069
+ <plugin>
2070
+ <groupId>org.apache.maven.plugins</groupId>
2071
+ <artifactId>maven-surefire-plugin</artifactId>
2072
+ <version>${maven-surefire-plugin.version}</version>
2073
+ <configuration>
2074
+ <!-- Force alphabetical order to have a reproducible build -->
2075
+ <runOrder>alphabetical</runOrder>
2076
+ <excludes>
2077
+ <exclude>**/*IT*</exclude>
2078
+ <exclude>**/*IntTest*</exclude>
2079
+ </excludes>
2080
+ <!-- Fix tests at java 13+ https://github.com/reactor/BlockHound/issues/33 -->
2081
+ <argLine>-XX:+AllowRedefinitionToAddDeleteMethods</argLine>
2082
+ </configuration>
2083
+ </plugin>
2084
+ <plugin>
2085
+ <groupId>org.apache.maven.plugins</groupId>
2086
+ <artifactId>maven-failsafe-plugin</artifactId>
2087
+ <version>${maven-failsafe-plugin.version}</version>
2088
+ <configuration>
2089
+ <!-- Due to spring-boot repackage, without adding this property test classes are not found
2090
+ See https://github.com/spring-projects/spring-boot/issues/6254 -->
2091
+ <classesDirectory>${project.build.outputDirectory}</classesDirectory>
2092
+ <!-- Force alphabetical order to have a reproducible build -->
2093
+ <runOrder>alphabetical</runOrder>
2094
+ <includes>
2095
+ <include>**/*IT*</include>
2096
+ <include>**/*IntTest*</include>
2097
+ </includes>
2098
+ <!-- Fix tests at java 13+ https://github.com/reactor/BlockHound/issues/33 -->
2099
+ <argLine>-XX:+AllowRedefinitionToAddDeleteMethods</argLine>
2100
+ </configuration>
2101
+ <executions>
2102
+ <execution>
2103
+ <id>integration-test</id>
2104
+ <goals>
2105
+ <goal>integration-test</goal>
2106
+ </goals>
2107
+ </execution>
2108
+ <execution>
2109
+ <id>verify</id>
2110
+ <goals>
2111
+ <goal>verify</goal>
2112
+ </goals>
2113
+ </execution>
2114
+ </executions>
2115
+ </plugin>
2116
+ </plugins>
2117
+ </pluginManagement>
2118
+ </build>
2119
+ </profile>
2001
2120
  <%_ } _%>
2002
2121
  <!-- jhipster-needle-maven-add-profile -->
2003
2122
  </profiles>
@@ -61,5 +61,14 @@ gradleEnterprise {
61
61
  publishAlways()
62
62
  }
63
63
  }
64
+
65
+ buildCache {
66
+ local { enabled = true }
67
+ remote(HttpBuildCache) {
68
+ push = true
69
+ enabled = false // Disabled as this might not always desired
70
+ url = '<%= gradleEnterpriseHost %>/cache/' // note the trailing slash!
71
+ }
72
+ }
64
73
  <%_ } _%>
65
74
  rootProject.name = "<%= dasherizedBaseName %>"
@@ -0,0 +1,48 @@
1
+ <%#
2
+ Copyright 2013-2021 the original author or authors from the JHipster project.
3
+
4
+ This file is part of the JHipster project, see https://www.jhipster.tech/
5
+ for more information.
6
+
7
+ Licensed under the Apache License, Version 2.0 (the "License");
8
+ you may not use this file except in compliance with the License.
9
+ You may obtain a copy of the License at
10
+
11
+ https://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ Unless required by applicable law or agreed to in writing, software
14
+ distributed under the License is distributed on an "AS IS" BASIS,
15
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ See the License for the specific language governing permissions and
17
+ limitations under the License.
18
+ -%>
19
+ package <%= packageName %>.repository;
20
+
21
+ import java.util.ArrayList;
22
+ import java.util.List;
23
+ import org.springframework.data.relational.core.sql.Column;
24
+ import org.springframework.data.relational.core.sql.Expression;
25
+ import org.springframework.data.relational.core.sql.Table;
26
+
27
+ public class UserSqlHelper {
28
+ public static List<Expression> getColumns(Table table, String columnPrefix) {
29
+ List<Expression> columns = new ArrayList<>();
30
+ columns.add(Column.aliased("id", table, columnPrefix + "_id"));
31
+ columns.add(Column.aliased("login", table, columnPrefix + "_login"));
32
+ <%_ if (!authenticationTypeOauth2) { _%>
33
+ columns.add(Column.aliased("password_hash", table, columnPrefix + "_password"));
34
+ <%_ } _%>
35
+ columns.add(Column.aliased("first_name", table, columnPrefix + "_first_name"));
36
+ columns.add(Column.aliased("last_name", table, columnPrefix + "_last_name"));
37
+ columns.add(Column.aliased("email", table, columnPrefix + "_email"));
38
+ columns.add(Column.aliased("activated", table, columnPrefix + "_activated"));
39
+ columns.add(Column.aliased("lang_key", table, columnPrefix + "_lang_key"));
40
+ columns.add(Column.aliased("image_url", table, columnPrefix + "_image_url"));
41
+ <%_ if (!authenticationTypeOauth2) { _%>
42
+ columns.add(Column.aliased("activation_key", table, columnPrefix + "_activation_key"));
43
+ columns.add(Column.aliased("reset_key", table, columnPrefix + "_reset_key"));
44
+ columns.add(Column.aliased("reset_date", table, columnPrefix + "_reset_date"));
45
+ <%_ } _%>
46
+ return columns;
47
+ }
48
+ }
@@ -52,7 +52,7 @@ _%>
52
52
  <%_ } _%>
53
53
  <%_ if (databaseTypeCouchbase) { _%>
54
54
  - SPRING_COUCHBASE_CONNECTION_STRING=<%= baseName.toLowerCase() %>-couchbase
55
- - JHIPSTER_COUCHBASE_BUCKET_NAME=<%= baseName %>
55
+ - JHIPSTER_DATABASE_COUCHBASE_BUCKET_NAME=<%= baseName %>
56
56
  <%_ } _%>
57
57
  <%_ if (cacheProviderMemcached) { _%>
58
58
  - JHIPSTER_CACHE_MEMCACHED_SERVERS=<%= baseName.toLowerCase() %>-memcached:11211
@@ -294,6 +294,7 @@ _%>
294
294
  # When run with the "prod" Spring profile, it will read the configuration from a Git repository
295
295
  # See https://www.jhipster.tech/jhipster-registry/#spring-cloud-config
296
296
  environment:
297
+ - JHIPSTER_SLEEP=20
297
298
  - _JAVA_OPTIONS=-Xmx512m -Xms256m
298
299
  - SPRING_PROFILES_ACTIVE=dev,api-docs<% if (authenticationTypeOauth2) { %>,oauth2<% } %>
299
300
  - SPRING_SECURITY_USER_PASSWORD=admin
@@ -1671,14 +1671,14 @@
1671
1671
  "subComponents": {},
1672
1672
  "config": {
1673
1673
  "allowed-protocol-mapper-types": [
1674
- "oidc-full-name-mapper",
1674
+ "oidc-usermodel-property-mapper",
1675
+ "oidc-sha256-pairwise-sub-mapper",
1676
+ "saml-user-attribute-mapper",
1675
1677
  "saml-user-property-mapper",
1676
- "oidc-usermodel-attribute-mapper",
1677
- "saml-role-list-mapper",
1678
1678
  "oidc-address-mapper",
1679
- "saml-user-attribute-mapper",
1680
- "oidc-usermodel-property-mapper",
1681
- "oidc-sha256-pairwise-sub-mapper"
1679
+ "oidc-full-name-mapper",
1680
+ "saml-role-list-mapper",
1681
+ "oidc-usermodel-attribute-mapper"
1682
1682
  ]
1683
1683
  }
1684
1684
  },
@@ -1749,14 +1749,14 @@
1749
1749
  "subComponents": {},
1750
1750
  "config": {
1751
1751
  "allowed-protocol-mapper-types": [
1752
- "oidc-sha256-pairwise-sub-mapper",
1752
+ "oidc-address-mapper",
1753
1753
  "oidc-usermodel-attribute-mapper",
1754
- "oidc-full-name-mapper",
1754
+ "saml-user-property-mapper",
1755
1755
  "saml-user-attribute-mapper",
1756
- "oidc-address-mapper",
1757
- "oidc-usermodel-property-mapper",
1758
1756
  "saml-role-list-mapper",
1759
- "saml-user-property-mapper"
1757
+ "oidc-full-name-mapper",
1758
+ "oidc-usermodel-property-mapper",
1759
+ "oidc-sha256-pairwise-sub-mapper"
1760
1760
  ]
1761
1761
  }
1762
1762
  },
@@ -2487,10 +2487,11 @@
2487
2487
  "oauth2DevicePollingInterval": "5",
2488
2488
  "clientSessionIdleTimeout": "0",
2489
2489
  "clientSessionMaxLifespan": "0",
2490
+ "parRequestUriLifespan": "60",
2490
2491
  "clientOfflineSessionIdleTimeout": "0",
2491
2492
  "cibaInterval": "5"
2492
2493
  },
2493
- "keycloakVersion": "14.0.0",
2494
+ "keycloakVersion": "15.0.2",
2494
2495
  "userManagedAccessAllowed": false,
2495
2496
  "clientProfiles": {
2496
2497
  "profiles": []
@@ -88,7 +88,7 @@ public class LoggingAspect {
88
88
  if (env.acceptsProfiles(Profiles.of(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT))) {
89
89
  logger(joinPoint)
90
90
  .error(
91
- "Exception in {}() with cause = \'{}\' and exception = \'{}\'",
91
+ "Exception in {}() with cause = '{}' and exception = '{}'",
92
92
  joinPoint.getSignature().getName(),
93
93
  e.getCause() != null ? e.getCause() : "NULL",
94
94
  e.getMessage(),
@@ -21,9 +21,6 @@ package <%= packageName %>.config;
21
21
  import com.datastax.oss.driver.api.core.data.TupleValue;
22
22
  import com.datastax.oss.driver.api.core.type.DataTypes;
23
23
  import com.datastax.oss.driver.api.core.type.TupleType;
24
- <%_ if (applicationTypeGateway && !databaseTypeCassandra) { _%>
25
- import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
26
- <%_ } _%>
27
24
  import org.springframework.context.annotation.Bean;
28
25
  import org.springframework.context.annotation.Configuration;
29
26
  import org.springframework.core.convert.converter.Converter;
@@ -39,9 +36,6 @@ import java.util.ArrayList;
39
36
  import java.util.List;
40
37
 
41
38
  @Configuration
42
- <%_ if (applicationTypeGateway && !databaseTypeCassandra) { _%>
43
- @ConditionalOnProperty("jhipster.gateway.rate-limiting.enabled")
44
- <%_ } _%>
45
39
  public class DatabaseConfiguration {
46
40
 
47
41
  @Bean
@@ -85,9 +85,9 @@ import java.util.UUID;
85
85
 
86
86
  @Configuration
87
87
  <%_ if (reactive) { _%>
88
- @EnableR2dbcRepositories("<%= packageName %>.repository")
88
+ @EnableR2dbcRepositories({<%- domains.map(domain => `"${domain}.repository"`).join(', ') %>})
89
89
  <%_ } else { _%>
90
- @EnableJpaRepositories("<%= packageName %>.repository")
90
+ @EnableJpaRepositories({<%- domains.map(domain => `"${domain}.repository"`).join(', ') %>})
91
91
  @EnableJpaAuditing(auditorAwareRef = "springSecurityAuditorAware")
92
92
  <%_ } _%>
93
93
  @EnableTransactionManagement
@@ -26,7 +26,7 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
26
26
 
27
27
  import org.springframework.context.annotation.Bean;
28
28
  import org.springframework.context.annotation.Configuration;
29
- import org.zalando.problem.ProblemModule;
29
+ import org.zalando.problem.jackson.ProblemModule;
30
30
  import org.zalando.problem.violations.ConstraintViolationProblemModule;
31
31
 
32
32
  @Configuration
@@ -47,7 +47,6 @@ public class LocaleConfiguration implements WebMvcConfigurer {
47
47
  <%_ } else { _%>
48
48
  import org.apache.commons.logging.Log;
49
49
  import org.apache.commons.logging.LogFactory;
50
- import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration;
51
50
  import org.springframework.context.annotation.Bean;
52
51
  import org.springframework.context.annotation.Configuration;
53
52
  import org.springframework.context.annotation.Import;
@@ -70,7 +69,6 @@ import java.util.Locale;
70
69
  import java.util.TimeZone;
71
70
 
72
71
  @Configuration
73
- @Import(WebFluxAutoConfiguration.class)
74
72
  public class LocaleConfiguration {
75
73
 
76
74
  @Bean(name = "localeContextResolver")
@@ -233,7 +233,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
233
233
  .and()
234
234
  .referrerPolicy(ReferrerPolicyHeaderWriter.ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN)
235
235
  .and()
236
- .featurePolicy("geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'self'; payment 'none'")
236
+ .permissionsPolicy().policy("camera=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), sync-xhr=()")
237
237
  .and()
238
238
  .frameOptions()
239
239
  .deny()
@@ -258,9 +258,6 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
258
258
  .antMatchers("/api/**").authenticated()
259
259
  <%_ if (communicationSpringWebsocket) { _%>
260
260
  .antMatchers("/websocket/**").authenticated()
261
- <%_ } _%>
262
- <%_ if (applicationTypeGateway) { _%>
263
- .antMatchers("/services/*/v3/api-docs").hasAuthority(AuthoritiesConstants.ADMIN)
264
261
  <%_ } _%>
265
262
  .antMatchers("/management/health").permitAll()
266
263
  .antMatchers("/management/health/**").permitAll()
@@ -275,7 +272,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
275
272
  .and()
276
273
  .apply(securityConfigurerAdapter());
277
274
  <%_ } else if (authenticationTypeOauth2) { _%>
278
- <%_ if (applicationTypeMonolith || applicationTypeGateway) { _%>
275
+ <%_ if (applicationTypeMonolith) { _%>
279
276
  .and()
280
277
  .oauth2Login()
281
278
  <%_ } _%>
@@ -253,7 +253,7 @@ public class SecurityConfiguration {
253
253
  .and()
254
254
  .referrerPolicy(ReferrerPolicyServerHttpHeadersWriter.ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN)
255
255
  .and()
256
- .featurePolicy("geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'self'; payment 'none'")
256
+ .permissionsPolicy().policy("camera=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), sync-xhr=()")
257
257
  .and()
258
258
  .frameOptions().disable()
259
259
  <%_ if (applicationTypeMicroservice) { _%>
@@ -277,6 +277,14 @@ public class SecurityConfiguration {
277
277
  .pathMatchers("/api/auth-info").permitAll()
278
278
  .pathMatchers("/api/admin/**").hasAuthority(AuthoritiesConstants.ADMIN)
279
279
  .pathMatchers("/api/**").authenticated()
280
+ <%_ if (applicationTypeGateway) { _%>
281
+ <%_ if (microfrontend && (authenticationTypeJwt || clientFrameworkVue)) { _%>
282
+ // microfrontend resources are loaded by webpack without authentication, they need to be public
283
+ .pathMatchers("/services/*/*.js").permitAll()
284
+ .pathMatchers("/services/*/*.js.map").permitAll()
285
+ <%_ } _%>
286
+ .pathMatchers("/services/*/v3/api-docs").hasAuthority(AuthoritiesConstants.ADMIN)
287
+ <%_ } _%>
280
288
  <%_ if (applicationTypeMonolith || applicationTypeGateway) { _%>
281
289
  .pathMatchers("/services/**").authenticated()
282
290
  <%_ } _%>
@@ -79,7 +79,6 @@ import javax.servlet.*;
79
79
  import java.io.File;
80
80
  import java.nio.charset.StandardCharsets;
81
81
  import java.nio.file.Paths;
82
- import java.util.*;
83
82
 
84
83
  import static java.net.URLDecoder.decode;
85
84
  <%_ } _%>
@@ -0,0 +1,68 @@
1
+ <%#
2
+ Copyright 2013-2021 the original author or authors from the JHipster project.
3
+
4
+ This file is part of the JHipster project, see https://www.jhipster.tech/
5
+ for more information.
6
+
7
+ Licensed under the Apache License, Version 2.0 (the "License");
8
+ you may not use this file except in compliance with the License.
9
+ You may obtain a copy of the License at
10
+
11
+ https://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ Unless required by applicable law or agreed to in writing, software
14
+ distributed under the License is distributed on an "AS IS" BASIS,
15
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ See the License for the specific language governing permissions and
17
+ limitations under the License.
18
+ -%>
19
+ package <%= packageName %>.management;
20
+
21
+ import org.springframework.stereotype.Service;
22
+
23
+ import io.micrometer.core.instrument.Counter;
24
+ import io.micrometer.core.instrument.MeterRegistry;
25
+
26
+ @Service
27
+ public class SecurityMetersService {
28
+
29
+ public static final String INVALID_TOKENS_METER_NAME = "security.authentication.invalid-tokens";
30
+ public static final String INVALID_TOKENS_METER_DESCRIPTION = "Indicates validation error count of the tokens presented by the clients.";
31
+ public static final String INVALID_TOKENS_METER_BASE_UNIT = "errors";
32
+ public static final String INVALID_TOKENS_METER_CAUSE_DIMENSION = "cause";
33
+
34
+ private final Counter tokenInvalidSignatureCounter;
35
+ private final Counter tokenExpiredCounter;
36
+ private final Counter tokenUnsupportedCounter;
37
+ private final Counter tokenMalformedCounter;
38
+
39
+ public SecurityMetersService(MeterRegistry registry) {
40
+ this.tokenInvalidSignatureCounter = invalidTokensCounterForCauseBuilder("invalid-signature").register(registry);
41
+ this.tokenExpiredCounter = invalidTokensCounterForCauseBuilder("expired").register(registry);
42
+ this.tokenUnsupportedCounter = invalidTokensCounterForCauseBuilder("unsupported").register(registry);
43
+ this.tokenMalformedCounter = invalidTokensCounterForCauseBuilder("malformed").register(registry);
44
+ }
45
+
46
+ private Counter.Builder invalidTokensCounterForCauseBuilder(String cause) {
47
+ return Counter.builder(INVALID_TOKENS_METER_NAME)
48
+ .baseUnit(INVALID_TOKENS_METER_BASE_UNIT)
49
+ .description(INVALID_TOKENS_METER_DESCRIPTION)
50
+ .tag(INVALID_TOKENS_METER_CAUSE_DIMENSION, cause);
51
+ }
52
+
53
+ public void trackTokenInvalidSignature() {
54
+ this.tokenInvalidSignatureCounter.increment();
55
+ }
56
+
57
+ public void trackTokenExpired() {
58
+ this.tokenExpiredCounter.increment();
59
+ }
60
+
61
+ public void trackTokenUnsupported() {
62
+ this.tokenUnsupportedCounter.increment();
63
+ }
64
+
65
+ public void trackTokenMalformed() {
66
+ this.tokenMalformedCounter.increment();
67
+ }
68
+ }
@@ -464,29 +464,6 @@ class UserRepositoryInternalImpl implements UserRepositoryInternal {
464
464
  }
465
465
  }
466
466
 
467
- class UserSqlHelper {
468
- static List<Expression> getColumns(Table table, String columnPrefix) {
469
- List<Expression> columns = new ArrayList<>();
470
- columns.add(Column.aliased("id", table, columnPrefix + "_id"));
471
- columns.add(Column.aliased("login", table, columnPrefix + "_login"));
472
- <%_ if (!authenticationTypeOauth2) { _%>
473
- columns.add(Column.aliased("password_hash", table, columnPrefix + "_password"));
474
- <%_ } _%>
475
- columns.add(Column.aliased("first_name", table, columnPrefix + "_first_name"));
476
- columns.add(Column.aliased("last_name", table, columnPrefix + "_last_name"));
477
- columns.add(Column.aliased("email", table, columnPrefix + "_email"));
478
- columns.add(Column.aliased("activated", table, columnPrefix + "_activated"));
479
- columns.add(Column.aliased("lang_key", table, columnPrefix + "_lang_key"));
480
- columns.add(Column.aliased("image_url", table, columnPrefix + "_image_url"));
481
- <%_ if (!authenticationTypeOauth2) { _%>
482
- columns.add(Column.aliased("activation_key", table, columnPrefix + "_activation_key"));
483
- columns.add(Column.aliased("reset_key", table, columnPrefix + "_reset_key"));
484
- columns.add(Column.aliased("reset_date", table, columnPrefix + "_reset_date"));
485
- <%_ } _%>
486
- return columns;
487
- }
488
- }
489
-
490
467
  <%_ } else if (databaseTypeCassandra) { _%>
491
468
  @Repository
492
469
  public class UserRepository {
@@ -71,8 +71,6 @@ import java.util.*;
71
71
  * <p>
72
72
  * This is inspired by:
73
73
  * <ul>
74
- * <li><a href="http://jaspan.com/improved_persistent_login_cookie_best_practice">Improved Persistent Login Cookie
75
- * Best Practice</a></li>
76
74
  * <li><a href="https://github.com/blog/1661-modeling-your-app-s-user-session">GitHub's "Modeling your App's User Session"</a></li>
77
75
  * </ul>
78
76
  * <p>
@@ -34,13 +34,17 @@ import org.springframework.stereotype.Component;
34
34
  import org.springframework.util.ObjectUtils;
35
35
 
36
36
  import tech.jhipster.config.JHipsterProperties;
37
+
37
38
  import io.jsonwebtoken.*;
38
39
  import io.jsonwebtoken.io.Decoders;
40
+ import io.jsonwebtoken.security.SignatureException;
39
41
  <%_ if (reactive) { _%>
40
42
  import io.jsonwebtoken.jackson.io.JacksonSerializer;
41
43
  <%_ } _%>
42
44
  import io.jsonwebtoken.security.Keys;
43
45
 
46
+ import <%= packageName %>.management.SecurityMetersService;
47
+
44
48
  @Component
45
49
  public class TokenProvider {
46
50
 
@@ -56,7 +60,9 @@ public class TokenProvider {
56
60
 
57
61
  private final long tokenValidityInMillisecondsForRememberMe;
58
62
 
59
- public TokenProvider(JHipsterProperties jHipsterProperties) {
63
+ private final SecurityMetersService securityMetersService;
64
+
65
+ public TokenProvider(JHipsterProperties jHipsterProperties, SecurityMetersService securityMetersService) {
60
66
  byte[] keyBytes;
61
67
  String secret = jHipsterProperties.getSecurity().getAuthentication().getJwt().getBase64Secret();
62
68
  if (!ObjectUtils.isEmpty(secret)) {
@@ -75,6 +81,8 @@ public class TokenProvider {
75
81
  this.tokenValidityInMillisecondsForRememberMe =
76
82
  1000 * jHipsterProperties.getSecurity().getAuthentication().getJwt()
77
83
  .getTokenValidityInSecondsForRememberMe();
84
+
85
+ this.securityMetersService = securityMetersService;
78
86
  }
79
87
 
80
88
  public String createToken(Authentication authentication, boolean rememberMe) {
@@ -118,11 +126,28 @@ public class TokenProvider {
118
126
  public boolean validateToken(String authToken) {
119
127
  try {
120
128
  jwtParser.parseClaimsJws(authToken);
129
+
121
130
  return true;
122
- } catch (JwtException | IllegalArgumentException e) {
123
- log.info("Invalid JWT token.");
124
- log.trace("Invalid JWT token trace.", e);
131
+ } catch (ExpiredJwtException e) {
132
+ this.securityMetersService.trackTokenExpired();
133
+
134
+ log.trace("Invalid JWT token.", e);
135
+ } catch (UnsupportedJwtException e) {
136
+ this.securityMetersService.trackTokenUnsupported();
137
+
138
+ log.trace("Invalid JWT token.", e);
139
+ } catch (MalformedJwtException e) {
140
+ this.securityMetersService.trackTokenMalformed();
141
+
142
+ log.trace("Invalid JWT token.", e);
143
+ } catch (SignatureException e) {
144
+ this.securityMetersService.trackTokenInvalidSignature();
145
+
146
+ log.trace("Invalid JWT token.", e);
147
+ } catch (IllegalArgumentException e) { // TODO: should we let it bubble (no catch), to avoid defensive programming and follow the fail-fast principle?
148
+ log.error("Token validation error {}", e.getMessage());
125
149
  }
150
+
126
151
  return false;
127
152
  }
128
153
  }