generator-jhipster 7.3.0 → 7.5.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 (340) hide show
  1. package/cli/import-jdl.js +3 -2
  2. package/cli/jhipster-command.js +2 -2
  3. package/cli/program.js +32 -29
  4. package/generators/app/index.js +46 -27
  5. package/generators/aws/index.js +8 -8
  6. package/generators/aws/lib/eb.js +1 -1
  7. package/generators/azure-app-service/index.js +16 -9
  8. package/generators/azure-app-service/templates/github/workflows/azure-app-service.yml.ejs +2 -2
  9. package/generators/azure-spring-cloud/index.js +16 -9
  10. package/generators/azure-spring-cloud/templates/github/workflows/azure-spring-cloud.yml.ejs +2 -2
  11. package/generators/bootstrap/index.js +57 -62
  12. package/generators/ci-cd/index.js +11 -8
  13. package/generators/ci-cd/templates/github-actions.yml.ejs +1 -1
  14. package/generators/ci-cd/templates/travis.yml.ejs +9 -4
  15. package/generators/cleanup.js +27 -171
  16. package/generators/client/files-angular.js +12 -1
  17. package/generators/client/files-common.js +6 -2
  18. package/generators/client/files-react.js +13 -2
  19. package/generators/client/files-vue.js +59 -7
  20. package/generators/client/index.js +46 -32
  21. package/generators/client/needle-api/needle-client-angular.js +1 -1
  22. package/generators/client/needle-api/needle-client-vue.js +57 -7
  23. package/generators/client/templates/angular/.eslintrc.json.ejs +1 -0
  24. package/generators/client/templates/angular/angular.json.ejs +5 -0
  25. package/generators/client/templates/angular/jest.conf.js.ejs +2 -0
  26. package/generators/client/templates/angular/package.json +29 -29
  27. package/generators/client/templates/angular/package.json.ejs +3 -1
  28. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.spec.ts.ejs +52 -54
  29. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.ts.ejs +4 -4
  30. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.service.spec.ts.ejs +65 -0
  31. package/generators/client/templates/angular/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.spec.ts.ejs +35 -37
  32. package/generators/client/templates/angular/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.ts.ejs +1 -1
  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.component.ts.ejs +4 -4
  35. package/generators/client/templates/angular/src/main/webapp/app/account/password/password.service.spec.ts.ejs +41 -0
  36. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.spec.ts.ejs +73 -75
  37. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs +4 -4
  38. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.spec.ts.ejs +62 -0
  39. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.spec.ts.ejs +44 -46
  40. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.service.spec.ts.ejs +61 -0
  41. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.spec.ts.ejs +122 -123
  42. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.ts.ejs +1 -1
  43. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.service.spec.ts.ejs +66 -0
  44. package/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.component.spec.ts.ejs +75 -77
  45. package/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.spec.ts.ejs +80 -80
  46. package/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.spec.ts.ejs +48 -50
  47. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.spec.ts.ejs +45 -47
  48. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.ts.ejs +4 -4
  49. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.service.spec.ts.ejs +66 -0
  50. package/generators/client/templates/angular/src/main/webapp/app/admin/health/modal/health-modal.component.spec.ts.ejs +99 -101
  51. package/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.spec.ts.ejs +61 -63
  52. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/jvm-memory/jvm-memory.component.html.ejs +2 -2
  53. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.spec.ts.ejs +28 -30
  54. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.spec.ts.ejs +35 -37
  55. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/detail/user-management-detail.component.spec.ts.ejs +40 -42
  56. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.spec.ts.ejs +89 -91
  57. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.ts.ejs +4 -4
  58. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.spec.ts.ejs +81 -83
  59. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.ts.ejs +8 -8
  60. package/generators/client/templates/angular/src/main/webapp/app/app-routing.module.ts.ejs +14 -3
  61. package/generators/client/templates/angular/src/main/webapp/app/app.module.ts.ejs +8 -29
  62. package/generators/client/templates/angular/src/main/webapp/app/config/datepicker-adapter.ts.ejs +1 -1
  63. package/generators/client/templates/angular/src/main/webapp/app/config/dayjs.ts.ejs +4 -4
  64. package/generators/client/templates/angular/src/main/webapp/app/core/auth/account.service.spec.ts.ejs +14 -9
  65. package/generators/client/templates/angular/src/main/webapp/app/core/tracker/tracker.service.ts.ejs +6 -6
  66. package/generators/client/templates/angular/src/main/webapp/app/core/util/parse-links.service.ts.ejs +1 -1
  67. package/generators/client/templates/angular/src/main/webapp/app/entities/entity-navbar-items.ts.ejs +29 -0
  68. package/generators/client/templates/angular/src/main/webapp/app/home/home.component.spec.ts.ejs +106 -98
  69. package/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.spec.ts.ejs +166 -168
  70. package/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.ts.ejs +1 -1
  71. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +20 -0
  72. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts.ejs +74 -70
  73. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.ts.ejs +41 -2
  74. package/generators/client/templates/angular/src/main/webapp/app/layouts/profiles/page-ribbon.component.spec.ts.ejs +27 -29
  75. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.spec.ts.ejs +114 -115
  76. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.ts.ejs +4 -4
  77. package/generators/client/templates/angular/src/main/webapp/app/shared/alert/alert-error.component.spec.ts.ejs +132 -134
  78. package/generators/client/templates/angular/src/main/webapp/app/shared/alert/alert.component.spec.ts.ejs +29 -31
  79. package/generators/client/templates/angular/src/main/webapp/app/shared/auth/has-any-authority.directive.spec.ts.ejs +4 -4
  80. package/generators/client/templates/angular/src/main/webapp/app/shared/date/duration.pipe.ts.ejs +1 -1
  81. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-date.pipe.spec.ts.ejs +1 -1
  82. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-date.pipe.ts.ejs +1 -1
  83. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-datetime.pipe.spec.ts.ejs +1 -1
  84. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-datetime.pipe.ts.ejs +1 -1
  85. package/generators/client/templates/angular/src/main/webapp/app/shared/language/translate.directive.ts.ejs +6 -6
  86. package/generators/client/templates/angular/src/main/webapp/app/shared/language/translation.module.ts.ejs +83 -0
  87. package/generators/client/templates/angular/src/main/webapp/declarations.d.ts.ejs +16 -2
  88. package/generators/client/templates/angular/tsconfig.json.ejs +2 -0
  89. package/generators/client/templates/angular/tsconfig.spec.json.ejs +0 -1
  90. package/generators/client/templates/angular/webpack/proxy.conf.js.ejs +0 -2
  91. package/generators/client/templates/angular/webpack/webpack.custom.js.ejs +0 -16
  92. package/generators/client/templates/angular/webpack/webpack.microfrontend.js.ejs +12 -5
  93. package/generators/client/templates/common/package.json +6 -6
  94. package/generators/client/templates/common/src/main/webapp/robots.txt.ejs +0 -1
  95. package/generators/client/templates/common/src/main/webapp/swagger-ui/index.html.ejs +86 -56
  96. package/generators/client/templates/common/webpack/webpack.microfrontend.js.jhi.ejs +56 -0
  97. package/generators/client/templates/react/.eslintrc.json.ejs +1 -0
  98. package/generators/client/templates/react/package.json +54 -53
  99. package/generators/client/templates/react/package.json.ejs +6 -1
  100. package/generators/client/templates/react/src/main/webapp/app/app.scss.ejs +0 -3
  101. package/generators/client/templates/react/src/main/webapp/app/config/axios-interceptor.spec.ts.ejs +3 -2
  102. package/generators/client/templates/react/src/main/webapp/app/modules/account/password/password.tsx.ejs +2 -2
  103. package/generators/client/templates/react/src/main/webapp/app/modules/administration/configuration/configuration.tsx.ejs +2 -2
  104. package/generators/client/templates/react/src/main/webapp/app/modules/administration/gateway/gateway.tsx.ejs +2 -2
  105. package/generators/client/templates/react/src/main/webapp/app/modules/administration/metrics/metrics.tsx.ejs +6 -6
  106. package/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/user-management.tsx.ejs +8 -8
  107. package/generators/client/templates/react/src/main/webapp/app/modules/home/home.tsx.ejs +1 -1
  108. package/generators/client/templates/react/src/main/webapp/app/shared/layout/header/header.scss.ejs +9 -0
  109. package/generators/client/templates/react/src/main/webapp/app/shared/layout/header/header.tsx.ejs +2 -2
  110. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/account.tsx.ejs +3 -3
  111. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/admin.tsx.ejs +7 -7
  112. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/menu-components.tsx.ejs +1 -1
  113. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/authentication.spec.ts.ejs +1 -1
  114. package/generators/client/templates/react/webpack/webpack.dev.js.ejs +17 -3
  115. package/generators/client/templates/react/webpack/webpack.prod.js.ejs +13 -1
  116. package/generators/client/templates/vue/.eslintrc.js.ejs +8 -5
  117. package/generators/client/templates/vue/package.json +40 -49
  118. package/generators/client/templates/vue/package.json.ejs +13 -17
  119. package/generators/client/templates/vue/src/main/webapp/app/account/account.service.ts.ejs +23 -12
  120. package/generators/client/templates/vue/src/main/webapp/app/account/settings/settings.vue.ejs +7 -1
  121. package/generators/client/templates/vue/src/main/webapp/app/admin/configuration/configuration.vue.ejs +1 -1
  122. package/generators/client/templates/vue/src/main/webapp/app/admin/metrics/metrics.component.ts.ejs +1 -1
  123. package/generators/client/templates/vue/src/main/webapp/app/constants.ts.ejs +16 -6
  124. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +27 -8
  125. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.vue.ejs +6 -0
  126. package/generators/client/templates/vue/src/main/webapp/app/declarations.d.ts.ejs +41 -0
  127. package/generators/client/templates/vue/src/main/webapp/app/entities/entities-menu.component.ts.ejs +34 -0
  128. package/generators/client/templates/vue/src/main/webapp/app/entities/entities-menu.vue.ejs +13 -0
  129. package/generators/client/templates/vue/src/main/webapp/app/entities/entities.component.ts.ejs +20 -0
  130. package/generators/client/templates/vue/src/main/webapp/app/entities/entities.vue.ejs +5 -0
  131. package/generators/client/templates/vue/src/main/webapp/app/entities/user/{user.oauth2.service.ts.ejs → user.service.ts.ejs} +1 -1
  132. package/generators/client/templates/vue/{webpack/utils.js.ejs → src/main/webapp/app/index.ts.ejs} +1 -12
  133. package/generators/client/templates/vue/src/main/webapp/app/locale/translation.service.ts.ejs +26 -9
  134. package/generators/client/templates/vue/src/main/webapp/app/main.ts.ejs +20 -18
  135. package/generators/client/templates/vue/src/main/webapp/app/router/entities.ts.ejs +45 -3
  136. package/generators/client/templates/vue/src/main/webapp/app/router/index.ts.ejs +19 -3
  137. package/generators/client/templates/vue/src/main/webapp/app/shared/config/axios-interceptor.ts.ejs +0 -2
  138. package/generators/client/templates/vue/src/main/webapp/app/shared/data/data-utils.service.ts.ejs +3 -1
  139. package/generators/client/templates/vue/src/main/webapp/app/shims-vue.d.ts.ejs +17 -3
  140. package/generators/client/templates/vue/src/test/javascript/jest.conf.js.ejs +25 -10
  141. package/generators/client/templates/vue/src/test/javascript/spec/app/account/login-form/login-form.component.spec.ts.ejs +2 -2
  142. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/user-management/user-management-edit.component.spec.ts.ejs +6 -4
  143. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts.ejs +4 -2
  144. package/generators/client/templates/vue/src/test/javascript/spec/app/core/jhi-navbar/jhi-navbar.component.spec.ts.ejs +10 -4
  145. package/generators/client/templates/vue/src/test/javascript/spec/app/entities/entities-menu.spec.ts.ejs +52 -0
  146. package/generators/client/templates/vue/src/test/javascript/spec/app/microfrontends/entities-menu.component.ts.ejs +4 -0
  147. package/generators/client/templates/vue/src/test/javascript/spec/app/microfrontends/entities-menu.vue.ejs +7 -0
  148. package/generators/client/templates/vue/src/test/javascript/spec/app/microfrontends/entities-router.ts.ejs +1 -0
  149. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/config/axios-interceptor.spec.ts.ejs +0 -1
  150. package/generators/client/templates/vue/tsconfig.json.ejs +6 -10
  151. package/generators/client/templates/vue/tsconfig.spec.json.ejs +37 -0
  152. package/generators/client/templates/vue/webpack/config.js.ejs +50 -0
  153. package/generators/client/templates/vue/webpack/vue.utils.js.ejs +33 -32
  154. package/generators/client/templates/vue/webpack/webpack.common.js.ejs +150 -126
  155. package/generators/client/templates/vue/webpack/webpack.dev.js.ejs +19 -76
  156. package/generators/client/templates/vue/webpack/webpack.microfrontend.js.jhi.vue.ejs +77 -0
  157. package/generators/client/templates/vue/webpack/webpack.prod.js.ejs +5 -41
  158. package/generators/cloudfoundry/index.js +9 -9
  159. package/generators/common/index.js +12 -10
  160. package/generators/common/templates/.prettierrc.ejs +1 -1
  161. package/generators/common/templates/README.md.jhi.ejs +19 -0
  162. package/generators/common/templates/package.json +4 -4
  163. package/generators/cypress/index.js +12 -9
  164. package/generators/cypress/templates/cypress.json.ejs +16 -2
  165. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/login-page.spec.ts.ejs +3 -14
  166. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/password-page.spec.ts.ejs +33 -39
  167. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/register-page.spec.ts.ejs +52 -62
  168. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/reset-password-page.spec.ts.ejs +2 -10
  169. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/settings-page.spec.ts.ejs +25 -34
  170. package/generators/cypress/templates/src/test/javascript/cypress/integration/administration/administration.spec.ts.ejs +1 -22
  171. package/generators/cypress/templates/src/test/javascript/cypress/plugins/index.ts.ejs +4 -4
  172. package/generators/cypress/templates/src/test/javascript/cypress/support/commands.ts.ejs +67 -7
  173. package/generators/cypress/templates/src/test/javascript/cypress/support/entity.ts.ejs +4 -4
  174. package/generators/cypress/templates/src/test/javascript/cypress/support/index.ts.ejs +1 -6
  175. package/generators/cypress/templates/src/test/javascript/cypress/support/management.ts.ejs +1 -1
  176. package/generators/cypress/templates/src/test/javascript/cypress/support/navbar.ts.ejs +8 -8
  177. package/generators/cypress/templates/src/test/javascript/cypress/support/oauth2.ts.ejs +0 -9
  178. package/generators/database-changelog/index.js +33 -22
  179. package/generators/database-changelog-liquibase/index.js +12 -8
  180. package/generators/database-changelog-liquibase/templates/src/main/resources/config/liquibase/changelog/updated_entity_constraints.xml.ejs +1 -1
  181. package/generators/docker-compose/index.js +11 -12
  182. package/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +1 -1
  183. package/generators/entities/index.js +35 -26
  184. package/generators/entities-client/index.js +10 -7
  185. package/generators/entity/index.js +81 -32
  186. package/generators/entity-client/files.js +7 -16
  187. package/generators/entity-client/index.js +22 -12
  188. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/delete/entity-management-delete-dialog.component.spec.ts.ejs +42 -44
  189. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.html.ejs +1 -1
  190. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.spec.ts.ejs +58 -60
  191. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs +1 -35
  192. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.model.ts.ejs +1 -1
  193. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.html.ejs +4 -4
  194. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.spec.ts.ejs +110 -112
  195. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.ts.ejs +9 -2
  196. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/infinite-scroll-template.ejs +8 -8
  197. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/no-pagination-template.ejs +8 -8
  198. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/pagination-template.ejs +8 -8
  199. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/route/entity-management-routing-resolve.service.spec.ts.ejs +15 -6
  200. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/route/entity-management-routing.module.ts.ejs +1 -1
  201. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.spec.ts.ejs +1 -1
  202. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.ts.ejs +1 -1
  203. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.spec.ts.ejs +203 -198
  204. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.ts.ejs +5 -5
  205. package/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs +1 -1
  206. package/generators/entity-client/templates/common/src/test/javascript/cypress/integration/entity/entity.spec.ts.ejs +264 -127
  207. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-update.tsx.ejs +17 -14
  208. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.reducer.ts.ejs +5 -4
  209. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.tsx.ejs +11 -13
  210. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity-update.component.ts.ejs +32 -25
  211. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity-update.vue.ejs +6 -9
  212. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity.component.ts.ejs +2 -1
  213. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity.model.ts.ejs +1 -1
  214. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity.service.ts.ejs +2 -6
  215. package/generators/entity-client/templates/vue/src/test/javascript/spec/app/entities/entity-update.component.spec.ts.ejs +10 -7
  216. package/generators/entity-client/templates/vue/src/test/javascript/spec/app/entities/entity.component.spec.ts.ejs +5 -1
  217. package/generators/entity-client/templates/vue/src/test/javascript/spec/app/entities/entity.service.spec.ts.ejs +1 -1
  218. package/generators/entity-i18n/index.js +7 -4
  219. package/generators/entity-server/files.js +14 -0
  220. package/generators/entity-server/index.js +12 -8
  221. package/generators/entity-server/templates/src/main/java/package/common/get_all_template.ejs +2 -2
  222. package/generators/entity-server/templates/src/main/java/package/common/search_template.ejs +1 -1
  223. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.ejs +9 -8
  224. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryInternalImpl_reactive.java.ejs +16 -29
  225. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository_reactive.java.ejs +3 -3
  226. package/generators/entity-server/templates/src/main/java/package/repository/EntitySqlHelper_reactive.java.ejs +46 -0
  227. package/generators/entity-server/templates/src/main/java/package/repository/rowmapper/EntityRowMapper.java.ejs +1 -1
  228. package/generators/entity-server/templates/src/main/java/package/repository/search/EntitySearchRepository.java.ejs +18 -2
  229. package/generators/entity-server/templates/src/main/java/package/repository/search/SortToFieldSortBuilderConverter.java.ejs +24 -0
  230. package/generators/entity-server/templates/src/main/java/package/service/dto/EntityDTO.java.ejs +8 -6
  231. package/generators/entity-server/templates/src/main/java/package/service/mapper/EntityMapper.java.ejs +5 -1
  232. package/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs +41 -43
  233. package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +3 -3
  234. package/generators/gae/index.js +10 -10
  235. package/generators/generator-base-blueprint.js +14 -46
  236. package/generators/generator-base-private.js +44 -23
  237. package/generators/generator-base.js +58 -18
  238. package/generators/generator-constants.js +30 -23
  239. package/generators/generator-transforms.js +39 -27
  240. package/generators/heroku/index.js +14 -33
  241. package/generators/init/constants.cjs +1 -1
  242. package/generators/java/constants.cjs +1 -1
  243. package/generators/kubernetes/files.js +3 -0
  244. package/generators/kubernetes/index.js +10 -10
  245. package/generators/kubernetes/templates/db/couchbase.yml.ejs +1 -1
  246. package/generators/kubernetes/templates/deployment.yml.ejs +8 -3
  247. package/generators/kubernetes/templates/istio/destination-rule.yml.ejs +1 -1
  248. package/generators/kubernetes/templates/istio/gateway/grafana-gateway.yml.ejs +5 -2
  249. package/generators/kubernetes/templates/istio/gateway/jhipster-grafana-gateway.yml.ejs +5 -2
  250. package/generators/kubernetes/templates/istio/gateway/kiali-gateway.yml.ejs +10 -8
  251. package/generators/kubernetes/templates/istio/gateway/zipkin-gateway.yml.ejs +5 -2
  252. package/generators/kubernetes/templates/istio/gateway.yml.ejs +7 -5
  253. package/generators/kubernetes/templates/secret/couchbase-secret.yml.ejs +9 -0
  254. package/generators/kubernetes-base.js +1 -0
  255. package/generators/kubernetes-helm/files.js +3 -8
  256. package/generators/kubernetes-helm/index.js +10 -10
  257. package/generators/kubernetes-helm/templates/README-KUBERNETES-HELM.md.ejs +0 -1
  258. package/generators/kubernetes-helm/templates/app/Chart.yml.ejs +5 -0
  259. package/generators/kubernetes-helm/templates/app/helpers.tpl.ejs +0 -11
  260. package/generators/kubernetes-helm/templates/app/requirements.yml.ejs +5 -0
  261. package/generators/kubernetes-helm/templates/app/values.yml.ejs +68 -5
  262. package/generators/kubernetes-helm/templates/csvc/Chart.yml.ejs +1 -1
  263. package/generators/kubernetes-helm/templates/csvc/requirements.yml.ejs +1 -1
  264. package/generators/kubernetes-knative/index.js +10 -10
  265. package/generators/kubernetes-knative/templates/istio/gateway.yml.ejs +6 -4
  266. package/generators/kubernetes-knative/templates/service.yml.ejs +1 -1
  267. package/generators/languages/index.js +13 -13
  268. package/generators/languages/templates/src/main/webapp/i18n/vi/login.json +1 -1
  269. package/generators/openapi-client/index.js +13 -10
  270. package/generators/openshift/index.js +10 -11
  271. package/generators/openshift/templates/deployment.yml.ejs +1 -1
  272. package/generators/page/index.js +12 -10
  273. package/generators/server/__snapshots__/generator.spec.mjs.snap +28 -15
  274. package/generators/server/cleanup.js +151 -0
  275. package/generators/server/files-sql.js +52 -0
  276. package/generators/server/files.js +31 -14
  277. package/generators/server/index.js +86 -33
  278. package/generators/server/templates/build.gradle.ejs +231 -189
  279. package/generators/server/templates/gradle.properties.ejs +12 -12
  280. package/generators/server/templates/npmw +8 -6
  281. package/generators/server/templates/npmw.cmd +13 -8
  282. package/generators/server/templates/pom.xml.ejs +425 -217
  283. package/generators/server/templates/sql/reactive/src/main/java/package/repository/UserSqlHelper.java.ejs +48 -0
  284. package/generators/server/templates/src/main/docker/app.yml.ejs +1 -1
  285. package/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +2 -2
  286. package/generators/server/templates/src/main/java/package/config/LocaleConfiguration.java.ejs +3 -2
  287. package/generators/server/templates/src/main/java/package/config/OpenApiConfiguration.java.ejs +17 -54
  288. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs +5 -5
  289. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration_reactive.java.ejs +4 -6
  290. package/generators/server/templates/src/main/java/package/config/WebConfigurer.java.ejs +0 -3
  291. package/generators/server/templates/src/main/java/package/config/neo4j/Neo4jMigrations.java.ejs +19 -9
  292. package/generators/server/templates/src/main/java/package/management/SecurityMetersService.java.ejs +68 -0
  293. package/generators/server/templates/src/main/java/package/repository/AuthorityRepository.java.ejs +2 -2
  294. package/generators/server/templates/src/main/java/package/repository/UserRepository.java.ejs +0 -25
  295. package/generators/server/templates/src/main/java/package/security/jwt/TokenProvider.java.ejs +31 -4
  296. package/generators/server/templates/src/main/java/package/security/oauth2/CustomClaimConverter.java.ejs +23 -11
  297. package/generators/server/templates/src/main/java/package/service/UserService.java.ejs +16 -8
  298. package/generators/server/templates/src/main/java/package/service/dto/UserDTO.java.ejs +6 -6
  299. package/generators/server/templates/src/main/java/package/web/filter/ModifyServersOpenApiFilter.java.ejs +3 -2
  300. package/generators/server/templates/src/main/java/package/web/filter/SpaWebFilter.java.ejs +1 -1
  301. package/generators/server/templates/src/main/java/package/web/rest/PublicUserResource.java.ejs +2 -2
  302. package/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs +2 -2
  303. package/generators/server/templates/src/main/resources/config/application.yml.ejs +22 -8
  304. package/generators/server/templates/src/main/resources/logback-spring.xml.ejs +1 -2
  305. package/generators/server/templates/src/main/resources/static/microservices_index.html.ejs +1 -1
  306. package/generators/server/templates/src/test/java/package/cucumber/CucumberIT.java.ejs +2 -6
  307. package/generators/server/templates/src/test/java/package/cucumber/CucumberTestContextConfiguration.java.ejs +2 -3
  308. package/generators/server/templates/src/test/java/package/cucumber/stepdefs/UserStepDefs.java.ejs +41 -6
  309. package/generators/server/templates/src/test/java/package/management/SecurityMetersServiceTests.java.ejs +113 -0
  310. package/generators/server/templates/src/test/java/package/security/jwt/JWTFilterTest.java.ejs +6 -1
  311. package/generators/server/templates/src/test/java/package/security/jwt/TokenProviderSecurityMetersTests.java.ejs +198 -0
  312. package/generators/server/templates/src/test/java/package/security/jwt/TokenProviderTest.java.ejs +13 -3
  313. package/generators/server/templates/src/test/java/package/security/oauth2/AuthorizationHeaderUtilTest.java.ejs +17 -3
  314. package/generators/server/templates/src/test/java/package/security/oauth2/CustomClaimConverterIT.java.ejs +63 -0
  315. package/generators/server/templates/src/test/java/package/service/MailServiceIT.java.ejs +1 -1
  316. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs +2 -3
  317. package/generators/server/templates/src/test/java/package/web/rest/ClientForwardControllerTest.java.ejs +9 -0
  318. package/generators/server/templates/src/test/resources/junit-platform.properties.ejs +2 -0
  319. package/generators/server/templates/src/test/resources/logback.xml.ejs +1 -1
  320. package/generators/server/templates/src/test/{features → resources/package/features}/gitkeep +0 -0
  321. package/generators/server/templates/src/test/{features → resources/package/features}/user/user.feature.ejs +0 -0
  322. package/generators/spring-controller/index.js +9 -7
  323. package/generators/spring-controller/templates/src/test/java/package/web/rest/ResourceIT.java.ejs +1 -1
  324. package/generators/spring-service/index.js +10 -7
  325. package/generators/upgrade/index.js +4 -5
  326. package/generators/utils.js +2 -2
  327. package/generators/workspaces/index.js +16 -7
  328. package/jdl/jhipster/default-application-options.js +9 -7
  329. package/package.json +22 -22
  330. package/utils/entity.js +17 -4
  331. package/utils/field.js +11 -1
  332. package/utils/multi-step-transform/index.js +8 -8
  333. package/generators/client/templates/react/.npmrc.ejs +0 -1
  334. package/generators/client/templates/vue/webpack/dev.env.js.ejs +0 -17
  335. package/generators/client/templates/vue/webpack/env.js.ejs +0 -67
  336. package/generators/client/templates/vue/webpack/loader.conf.js.ejs +0 -20
  337. package/generators/client/templates/vue/webpack/prod.env.js.ejs +0 -15
  338. package/generators/server/templates/src/main/java/package/config/apidocs/GatewaySwaggerResourcesProvider.java.ejs +0 -91
  339. package/generators/server/templates/src/test/java/package/config/apidocs/GatewaySwaggerResourcesProviderTest.java.ejs +0 -79
  340. package/generators/server/templates/src/test/resources/cucumber.properties.ejs +0 -1
@@ -0,0 +1,198 @@
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 %>.security.jwt;
20
+
21
+ import <%= packageName %>.security.AuthoritiesConstants;
22
+ import <%= packageName %>.management.SecurityMetersService;
23
+
24
+ import io.jsonwebtoken.Jwts;
25
+ import io.jsonwebtoken.SignatureAlgorithm;
26
+ import io.jsonwebtoken.io.Decoders;
27
+ import io.jsonwebtoken.security.Keys;
28
+
29
+ import io.micrometer.core.instrument.Counter;
30
+ import io.micrometer.core.instrument.MeterRegistry;
31
+ import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
32
+
33
+ import org.junit.jupiter.api.BeforeEach;
34
+ import org.junit.jupiter.api.Test;
35
+
36
+ import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
37
+ import org.springframework.security.core.Authentication;
38
+ import org.springframework.security.core.GrantedAuthority;
39
+ import org.springframework.security.core.authority.SimpleGrantedAuthority;
40
+ import org.springframework.test.util.ReflectionTestUtils;
41
+ import tech.jhipster.config.JHipsterProperties;
42
+
43
+ import java.security.Key;
44
+ import java.util.ArrayList;
45
+ import java.util.Collection;
46
+ import java.util.Date;
47
+
48
+ import static org.assertj.core.api.Assertions.assertThat;
49
+
50
+ class TokenProviderSecurityMetersTests {
51
+
52
+ private static final long ONE_MINUTE = 60000;
53
+ private static final String INVALID_TOKENS_METER_EXPECTED_NAME = "security.authentication.invalid-tokens";
54
+
55
+ private MeterRegistry meterRegistry;
56
+
57
+ private TokenProvider tokenProvider;
58
+
59
+ @BeforeEach
60
+ public void setup() {
61
+ JHipsterProperties jHipsterProperties = new JHipsterProperties();
62
+ String base64Secret = "fd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8";
63
+ jHipsterProperties.getSecurity().getAuthentication().getJwt().setBase64Secret(base64Secret);
64
+
65
+ meterRegistry = new SimpleMeterRegistry();
66
+
67
+ SecurityMetersService securityMetersService = new SecurityMetersService(meterRegistry);
68
+
69
+ tokenProvider = new TokenProvider(jHipsterProperties, securityMetersService);
70
+ Key key = Keys.hmacShaKeyFor(Decoders.BASE64.decode(base64Secret));
71
+
72
+ ReflectionTestUtils.setField(tokenProvider, "key", key);
73
+ ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", ONE_MINUTE);
74
+ }
75
+
76
+ @Test
77
+ void testValidTokenShouldNotCountAnything() {
78
+ Collection<Counter> counters = meterRegistry.find(INVALID_TOKENS_METER_EXPECTED_NAME).counters();
79
+
80
+ assertThat(aggregate(counters)).isZero();
81
+
82
+ String validToken = createValidToken();
83
+
84
+ tokenProvider.validateToken(validToken);
85
+
86
+ assertThat(aggregate(counters)).isZero();
87
+ }
88
+
89
+ @Test
90
+ void testTokenExpiredCount() {
91
+ assertThat(meterRegistry.get(INVALID_TOKENS_METER_EXPECTED_NAME)
92
+ .tag("cause", "expired")
93
+ .counter().count()).isZero();
94
+
95
+ String expiredToken = createExpiredToken();
96
+
97
+ tokenProvider.validateToken(expiredToken);
98
+
99
+ assertThat(meterRegistry.get(INVALID_TOKENS_METER_EXPECTED_NAME)
100
+ .tag("cause", "expired")
101
+ .counter().count()).isEqualTo(1);
102
+ }
103
+
104
+ @Test
105
+ void testTokenUnsupportedCount() {
106
+ assertThat(meterRegistry.get(INVALID_TOKENS_METER_EXPECTED_NAME)
107
+ .tag("cause", "unsupported")
108
+ .counter().count()).isZero();
109
+
110
+ String unsupportedToken = createUnsupportedToken();
111
+
112
+ tokenProvider.validateToken(unsupportedToken);
113
+
114
+ assertThat(meterRegistry.get(INVALID_TOKENS_METER_EXPECTED_NAME)
115
+ .tag("cause", "unsupported")
116
+ .counter().count()).isEqualTo(1);
117
+ }
118
+
119
+ @Test
120
+ void testTokenSignatureInvalidCount() {
121
+ assertThat(meterRegistry.get(INVALID_TOKENS_METER_EXPECTED_NAME)
122
+ .tag("cause", "invalid-signature")
123
+ .counter().count()).isZero();
124
+
125
+ String tokenWithDifferentSignature = createTokenWithDifferentSignature();
126
+
127
+ tokenProvider.validateToken(tokenWithDifferentSignature);
128
+
129
+ assertThat(meterRegistry.get(INVALID_TOKENS_METER_EXPECTED_NAME)
130
+ .tag("cause", "invalid-signature")
131
+ .counter().count()).isEqualTo(1);
132
+ }
133
+
134
+ @Test
135
+ void testTokenMalformedCount() {
136
+ assertThat(meterRegistry.get(INVALID_TOKENS_METER_EXPECTED_NAME)
137
+ .tag("cause", "malformed")
138
+ .counter().count()).isZero();
139
+
140
+ String malformedToken = createMalformedToken();
141
+
142
+ tokenProvider.validateToken(malformedToken);
143
+
144
+ assertThat(meterRegistry.get(INVALID_TOKENS_METER_EXPECTED_NAME)
145
+ .tag("cause", "malformed")
146
+ .counter().count()).isEqualTo(1);
147
+ }
148
+
149
+ private String createValidToken() {
150
+ Authentication authentication = createAuthentication();
151
+
152
+ return tokenProvider.createToken(authentication, false);
153
+ }
154
+
155
+ private String createExpiredToken() {
156
+ ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", -ONE_MINUTE);
157
+
158
+ Authentication authentication = createAuthentication();
159
+
160
+ return tokenProvider.createToken(authentication, false);
161
+ }
162
+
163
+ private Authentication createAuthentication() {
164
+ Collection<GrantedAuthority> authorities = new ArrayList<>();
165
+ authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.ANONYMOUS));
166
+ return new UsernamePasswordAuthenticationToken("anonymous", "anonymous", authorities);
167
+ }
168
+
169
+ private String createUnsupportedToken() {
170
+ Key key = (Key) ReflectionTestUtils.getField(tokenProvider, "key");
171
+
172
+ return Jwts.builder().setPayload("payload").signWith(key, SignatureAlgorithm.HS256).compact();
173
+ }
174
+
175
+ private String createMalformedToken() {
176
+ String validToken = createValidToken();
177
+
178
+ return "X" + validToken;
179
+ }
180
+
181
+ private String createTokenWithDifferentSignature() {
182
+ Key otherKey = Keys.hmacShaKeyFor(
183
+ Decoders.BASE64.decode("Xfd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8")
184
+ );
185
+
186
+ return Jwts
187
+ .builder()
188
+ .setSubject("anonymous")
189
+ .signWith(otherKey, SignatureAlgorithm.HS512)
190
+ .setExpiration(new Date(new Date().getTime() + ONE_MINUTE))
191
+ .compact();
192
+ }
193
+
194
+ private double aggregate(Collection<Counter> counters) {
195
+ return counters.stream().mapToDouble(Counter::count).sum();
196
+ }
197
+
198
+ }
@@ -19,6 +19,7 @@
19
19
  package <%= packageName %>.security.jwt;
20
20
 
21
21
  import <%= packageName %>.security.AuthoritiesConstants;
22
+ import <%= packageName %>.management.SecurityMetersService;
22
23
 
23
24
  import java.security.Key;
24
25
  import java.util.*;
@@ -31,6 +32,8 @@ import org.springframework.security.core.GrantedAuthority;
31
32
  import org.springframework.security.core.authority.SimpleGrantedAuthority;
32
33
  import org.springframework.test.util.ReflectionTestUtils;
33
34
 
35
+ import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
36
+
34
37
  import tech.jhipster.config.JHipsterProperties;
35
38
  import io.jsonwebtoken.Jwts;
36
39
  import io.jsonwebtoken.SignatureAlgorithm;
@@ -53,7 +56,10 @@ class TokenProviderTest {
53
56
  JHipsterProperties jHipsterProperties = new JHipsterProperties();
54
57
  String base64Secret = "fd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8";
55
58
  jHipsterProperties.getSecurity().getAuthentication().getJwt().setBase64Secret(base64Secret);
56
- tokenProvider = new TokenProvider(jHipsterProperties);
59
+
60
+ SecurityMetersService securityMetersService = new SecurityMetersService(new SimpleMeterRegistry());
61
+
62
+ tokenProvider = new TokenProvider(jHipsterProperties, securityMetersService);
57
63
  key = Keys.hmacShaKeyFor(Decoders.BASE64.decode(base64Secret));
58
64
 
59
65
  ReflectionTestUtils.setField(tokenProvider, "key", key);
@@ -111,7 +117,9 @@ class TokenProviderTest {
111
117
  JHipsterProperties jHipsterProperties = new JHipsterProperties();
112
118
  jHipsterProperties.getSecurity().getAuthentication().getJwt().setSecret(secret);
113
119
 
114
- TokenProvider tokenProvider = new TokenProvider(jHipsterProperties);
120
+ SecurityMetersService securityMetersService = new SecurityMetersService(new SimpleMeterRegistry());
121
+
122
+ TokenProvider tokenProvider = new TokenProvider(jHipsterProperties, securityMetersService);
115
123
 
116
124
  Key key = (Key) ReflectionTestUtils.getField(tokenProvider, "key");
117
125
  assertThat(key).isNotNull().isEqualTo(Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8)));
@@ -123,7 +131,9 @@ class TokenProviderTest {
123
131
  JHipsterProperties jHipsterProperties = new JHipsterProperties();
124
132
  jHipsterProperties.getSecurity().getAuthentication().getJwt().setBase64Secret(base64Secret);
125
133
 
126
- TokenProvider tokenProvider = new TokenProvider(jHipsterProperties);
134
+ SecurityMetersService securityMetersService = new SecurityMetersService(new SimpleMeterRegistry());
135
+
136
+ TokenProvider tokenProvider = new TokenProvider(jHipsterProperties, securityMetersService);
127
137
 
128
138
  Key key = (Key) ReflectionTestUtils.getField(tokenProvider, "key");
129
139
  assertThat(key).isNotNull().isEqualTo(Keys.hmacShaKeyFor(Decoders.BASE64.decode(base64Secret)));
@@ -50,6 +50,7 @@ import java.util.List;
50
50
  import java.util.Map;
51
51
  import java.util.Optional;
52
52
 
53
+ import static org.junit.jupiter.api.Assertions.fail;
53
54
  import static org.mockito.ArgumentMatchers.*;
54
55
  import static org.mockito.Mockito.*;
55
56
 
@@ -67,7 +68,7 @@ class AuthorizationHeaderUtilTest {
67
68
 
68
69
  @BeforeEach
69
70
  public void setup() {
70
- MockitoAnnotations.initMocks(this);
71
+ MockitoAnnotations.openMocks(this);
71
72
  SecurityContextHolder.setContext(securityContext);
72
73
 
73
74
  doReturn(restTemplateBuilder).when(restTemplateBuilder).additionalMessageConverters(any(HttpMessageConverter.class));
@@ -179,6 +180,20 @@ class AuthorizationHeaderUtilTest {
179
180
  }
180
181
 
181
182
  private OAuth2AuthorizedClient getTestOAuth2AuthorizedClient(boolean accessTokenExpired) {
183
+ Instant issuedAt = Instant.now();
184
+ Instant expiresAt;
185
+ if (accessTokenExpired) {
186
+ expiresAt = issuedAt.plus(Duration.ofNanos(1));
187
+ try {
188
+ Thread.sleep(1);
189
+ } catch (Exception e) {
190
+ fail("Error in Thread.sleep(1) : " + e.getMessage());
191
+ }
192
+ } else {
193
+ expiresAt = issuedAt.plus(Duration.ofMinutes(3));
194
+ }
195
+ OAuth2AccessToken token = new OAuth2AccessToken(OAuth2AccessToken.TokenType.BEARER, "tokenVal", issuedAt, expiresAt);
196
+
182
197
  return new OAuth2AuthorizedClient(
183
198
  ClientRegistration.withRegistrationId(VALID_REGISTRATION_ID)
184
199
  .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
@@ -189,8 +204,7 @@ class AuthorizationHeaderUtilTest {
189
204
  .tokenUri("https://localhost:8080/auth/realms/master/protocol/openid-connect/token")
190
205
  .build(),
191
206
  "sub",
192
- new OAuth2AccessToken(OAuth2AccessToken.TokenType.BEARER, "tokenVal", Instant.now(),
193
- accessTokenExpired ? Instant.now() : Instant.now().plus(Duration.ofMinutes(3))),
207
+ token,
194
208
  new OAuth2RefreshToken("refreshVal", Instant.now()));
195
209
  }
196
210
 
@@ -50,6 +50,9 @@ class CustomClaimConverterIT {
50
50
  private static final String USERNAME = "admin";
51
51
  private static final String NAME = "John";
52
52
  private static final String FAMILY_NAME = "Doe";
53
+ private static final String FULL_NAME = NAME + " " + FAMILY_NAME;
54
+ private static final String NAME_SUFFIX = "Sr.";
55
+ private static final String EMAIL = "john.doe@gmail.com";
53
56
 
54
57
  private final ObjectMapper mapper = new ObjectMapper();
55
58
 
@@ -161,4 +164,64 @@ class CustomClaimConverterIT {
161
164
  .doesNotContainKeys("given_name", "family_name");
162
165
  }).doesNotThrowAnyException();
163
166
  }
167
+
168
+ @Test
169
+ void testConvert_withName() {
170
+ // GIVEN
171
+ Map<String, Object> claims = new HashMap<>();
172
+ claims.put("sub", "123");
173
+ // AND
174
+ ObjectNode user = mapper.createObjectNode();
175
+ user.put("preferred_username", USERNAME);
176
+ user.put("name", FULL_NAME);
177
+ mockHttpGetUserInfo(user);
178
+
179
+ assertThatCode(() -> {
180
+ Map<String, Object> convertedClaims = customClaimConverter.convert(claims);
181
+ assertThat(convertedClaims)
182
+ .containsEntry("preferred_username", USERNAME)
183
+ .containsEntry("given_name", NAME)
184
+ .containsEntry("family_name", FAMILY_NAME);
185
+ }).doesNotThrowAnyException();
186
+ }
187
+
188
+ @Test
189
+ void testConvert_withLastNameMultipleWords() {
190
+ // GIVEN
191
+ Map<String, Object> claims = new HashMap<>();
192
+ claims.put("sub", "123");
193
+ // AND
194
+ ObjectNode user = mapper.createObjectNode();
195
+ user.put("preferred_username", USERNAME);
196
+ user.put("name", FULL_NAME + " " + NAME_SUFFIX);
197
+ mockHttpGetUserInfo(user);
198
+
199
+ assertThatCode(() -> {
200
+ Map<String, Object> convertedClaims = customClaimConverter.convert(claims);
201
+ System.out.println(convertedClaims);
202
+ assertThat(convertedClaims)
203
+ .containsEntry("preferred_username", USERNAME)
204
+ .containsEntry("given_name", NAME)
205
+ .containsEntry("family_name", FAMILY_NAME + " " + NAME_SUFFIX);
206
+ }).doesNotThrowAnyException();
207
+ }
208
+
209
+ @Test
210
+ void testConvert_withEmail() {
211
+ // GIVEN
212
+ Map<String, Object> claims = new HashMap<>();
213
+ claims.put("sub", "123");
214
+ // AND
215
+ ObjectNode user = mapper.createObjectNode();
216
+ user.put("preferred_username", USERNAME);
217
+ user.put("email", EMAIL);
218
+ mockHttpGetUserInfo(user);
219
+
220
+ assertThatCode(() -> {
221
+ Map<String, Object> convertedClaims = customClaimConverter.convert(claims);
222
+ assertThat(convertedClaims)
223
+ .containsEntry("preferred_username", USERNAME)
224
+ .containsEntry("email", EMAIL);
225
+ }).doesNotThrowAnyException();
226
+ }
164
227
  }
@@ -86,7 +86,7 @@ class MailServiceIT <% if (databaseTypeCassandra) { %>extends AbstractCassandraT
86
86
 
87
87
  @BeforeEach
88
88
  public void setup() {
89
- MockitoAnnotations.initMocks(this);
89
+ MockitoAnnotations.openMocks(this);
90
90
  doNothing().when(javaMailSender).send(any(MimeMessage.class));
91
91
  mailService = new MailService(jHipsterProperties, javaMailSender, messageSource, templateEngine);
92
92
  }
@@ -68,8 +68,7 @@ import org.springframework.security.crypto.password.PasswordEncoder;
68
68
  import org.springframework.security.test.context.support.WithMockUser;
69
69
  <%_ if (reactive) { _%>
70
70
  import org.springframework.test.web.reactive.server.WebTestClient;
71
- <%_ } _%>
72
- <%_ if (!reactive) { _%>
71
+ <%_ } else { _%>
73
72
  import org.springframework.test.web.servlet.MockMvc;
74
73
  <%_ } _%>
75
74
  <%_ if (databaseTypeSql && !reactive) { _%>
@@ -165,7 +164,7 @@ class AccountResourceIT <% if (databaseTypeCassandra) { %>extends AbstractCassan
165
164
  @Test
166
165
  @WithUnauthenticatedMockUser
167
166
  <%_ if (!reactive) { _%>
168
- void testNonAuthenticatedUser() <% if (!reactive) { %>throws Exception <% } %>{
167
+ void testNonAuthenticatedUser() throws Exception {
169
168
  restAccountMockMvc.perform(get("/api/authenticate")
170
169
  .accept(MediaType.APPLICATION_JSON))
171
170
  .andExpect(status().isOk())
@@ -69,6 +69,15 @@ class ClientForwardControllerTest {
69
69
  .andExpect(status().isOk())
70
70
  .andExpect(forwardedUrl("/"));
71
71
  }
72
+ @Test
73
+ void getUnmappedDottedEndpoint() throws Exception {
74
+ restMockMvc.perform(get("/foo.js")).andExpect(status().isNotFound());
75
+ }
76
+
77
+ @Test
78
+ void getUnmappedNestedDottedEndpoint() throws Exception {
79
+ restMockMvc.perform(get("/foo/bar.js")).andExpect(status().isNotFound());
80
+ }
72
81
 
73
82
  <%_ if (communicationSpringWebsocket) { _%>
74
83
  @Test
@@ -0,0 +1,2 @@
1
+ cucumber.publish.enabled=true
2
+ cucumber.plugin=pretty, html:target/cucumber-reports/Cucumber.html
@@ -123,7 +123,7 @@
123
123
  <%_ if (reactive) { _%>
124
124
  <logger name="reactor" level="WARN"/>
125
125
  <%_ } _%>
126
- <logger name="springfox" level="WARN"/>
126
+ <logger name="io.swagger.v3" level="INFO"/>
127
127
  <logger name="sun.rmi" level="WARN"/>
128
128
  <%_ if (databaseTypeSql) { _%>
129
129
  <logger name="liquibase" level="WARN"/>
@@ -45,8 +45,6 @@ const {
45
45
  const NO_CACHE_PROVIDER = cacheProviders.NO;
46
46
  const NO_MESSAGE_BROKER = messageBrokers.NO;
47
47
 
48
- let useBlueprints;
49
-
50
48
  module.exports = class extends BaseBlueprintGenerator {
51
49
  constructor(args, options, features) {
52
50
  super(args, options, features);
@@ -60,8 +58,12 @@ module.exports = class extends BaseBlueprintGenerator {
60
58
  description: 'default option',
61
59
  });
62
60
  this.defaultOption = this.options.default;
61
+ }
63
62
 
64
- useBlueprints = !this.fromBlueprint && this.instantiateBlueprints(GENERATOR_SPRING_CONTROLLER, { arguments: [this.name] });
63
+ async _postConstruct() {
64
+ if (!this.fromBlueprint) {
65
+ await this.composeWithBlueprints(GENERATOR_SPRING_CONTROLLER, { arguments: [this.name] });
66
+ }
65
67
  }
66
68
 
67
69
  // Public API method used by the getter and also by Blueprints
@@ -94,7 +96,7 @@ module.exports = class extends BaseBlueprintGenerator {
94
96
  }
95
97
 
96
98
  get initializing() {
97
- if (useBlueprints) return;
99
+ if (this.delegateToBlueprint) return {};
98
100
  return this._initializing();
99
101
  }
100
102
 
@@ -106,7 +108,7 @@ module.exports = class extends BaseBlueprintGenerator {
106
108
  }
107
109
 
108
110
  get prompting() {
109
- if (useBlueprints) return;
111
+ if (this.delegateToBlueprint) return {};
110
112
  return this._prompting();
111
113
  }
112
114
 
@@ -120,7 +122,7 @@ module.exports = class extends BaseBlueprintGenerator {
120
122
  }
121
123
 
122
124
  get default() {
123
- if (useBlueprints) return;
125
+ if (this.delegateToBlueprint) return {};
124
126
  return this._default();
125
127
  }
126
128
 
@@ -177,7 +179,7 @@ module.exports = class extends BaseBlueprintGenerator {
177
179
  }
178
180
 
179
181
  get writing() {
180
- if (useBlueprints) return;
182
+ if (this.delegateToBlueprint) return {};
181
183
  return this._writing();
182
184
  }
183
185
  };
@@ -41,7 +41,7 @@ class <%= controllerClass %>IT {
41
41
 
42
42
  @BeforeEach
43
43
  public void setUp() {
44
- MockitoAnnotations.initMocks(this);
44
+ MockitoAnnotations.openMocks(this);
45
45
 
46
46
  <%= controllerClass %> <%= controllerInstance %> = new <%= controllerClass %>();
47
47
  restMockMvc = MockMvcBuilders
@@ -27,7 +27,6 @@ const { GENERATOR_SPRING_SERVICE } = require('../generator-list');
27
27
  const { BASE_NAME, PACKAGE_NAME, PACKAGE_FOLDER, DATABASE_TYPE } = OptionNames;
28
28
  const SERVER_MAIN_SRC_DIR = constants.SERVER_MAIN_SRC_DIR;
29
29
 
30
- let useBlueprints;
31
30
  module.exports = class extends BaseBlueprintGenerator {
32
31
  constructor(args, options, features) {
33
32
  super(args, options, features);
@@ -41,8 +40,12 @@ module.exports = class extends BaseBlueprintGenerator {
41
40
  description: 'default option',
42
41
  });
43
42
  this.defaultOption = this.options.default;
43
+ }
44
44
 
45
- useBlueprints = !this.fromBlueprint && this.instantiateBlueprints(GENERATOR_SPRING_SERVICE, { arguments: [this.name] });
45
+ async _postConstruct() {
46
+ if (!this.fromBlueprint) {
47
+ await this.composeWithBlueprints(GENERATOR_SPRING_SERVICE, { arguments: [this.name] });
48
+ }
46
49
  }
47
50
 
48
51
  // Public API method used by the getter and also by Blueprints
@@ -64,7 +67,7 @@ module.exports = class extends BaseBlueprintGenerator {
64
67
  }
65
68
 
66
69
  get initializing() {
67
- if (useBlueprints) return;
70
+ if (this.delegateToBlueprint) return {};
68
71
  return this._initializing();
69
72
  }
70
73
 
@@ -94,7 +97,7 @@ module.exports = class extends BaseBlueprintGenerator {
94
97
  }
95
98
 
96
99
  get prompting() {
97
- if (useBlueprints) return;
100
+ if (this.delegateToBlueprint) return {};
98
101
  return this._prompting();
99
102
  }
100
103
 
@@ -108,7 +111,7 @@ module.exports = class extends BaseBlueprintGenerator {
108
111
  }
109
112
 
110
113
  get loading() {
111
- if (useBlueprints) return;
114
+ if (this.delegateToBlueprint) return {};
112
115
  return this._loading();
113
116
  }
114
117
 
@@ -122,7 +125,7 @@ module.exports = class extends BaseBlueprintGenerator {
122
125
  }
123
126
 
124
127
  get default() {
125
- if (useBlueprints) return;
128
+ if (this.delegateToBlueprint) return {};
126
129
  return this._default();
127
130
  }
128
131
 
@@ -151,7 +154,7 @@ module.exports = class extends BaseBlueprintGenerator {
151
154
  }
152
155
 
153
156
  get writing() {
154
- if (useBlueprints) return;
157
+ if (this.delegateToBlueprint) return {};
155
158
  return this._writing();
156
159
  }
157
160
  };
@@ -89,10 +89,9 @@ module.exports = class extends BaseGenerator {
89
89
  // Used for isJhipsterVersionLessThan on cleanup.upgradeFiles
90
90
  this.jhipsterOldVersion = this.config.get('jhipsterVersion');
91
91
 
92
- // Verify 6.6.0 app blueprint bug
93
- if (!this.config.existed && !this.options.blueprints && !this.options.help) {
94
- this.error(
95
- 'This seems to be an app blueprinted project with jhipster 6.6.0 bug (https://github.com/jhipster/generator-jhipster/issues/11045), you should pass --blueprints to jhipster upgrade commmand.'
92
+ if (!this.config.existed) {
93
+ throw new Error(
94
+ "Could not find a valid JHipster application configuration, check if the '.yo-rc.json' file exists and if the 'generator-jhipster' key exists inside it."
96
95
  );
97
96
  }
98
97
  }
@@ -165,7 +164,7 @@ module.exports = class extends BaseGenerator {
165
164
  generatorCommand = `"${generatorDir.replace('\n', '')}/jhipster"`;
166
165
  }
167
166
  const skipChecksOption = this.skipChecks ? '--skip-checks' : '';
168
- const regenerateCmd = `${generatorCommand} --with-entities --force --skip-install --skip-git --no-insight ${skipChecksOption}`;
167
+ const regenerateCmd = `${generatorCommand} --with-entities --force --skip-install --skip-git --ignore-errors --no-insight ${skipChecksOption}`;
169
168
  this.info(regenerateCmd);
170
169
  try {
171
170
  childProcess.execSync(regenerateCmd, { stdio: 'inherit' });
@@ -522,7 +522,7 @@ function getEnumInfo(field, clientRootFolder) {
522
522
  const customValuesState = getCustomValuesState(enums);
523
523
  return {
524
524
  enumName: fieldType,
525
- javadoc: field.fieldTypeJavadoc && this.getJavadoc(field.fieldTypeJavadoc),
525
+ javadoc: field.fieldTypeJavadoc && getJavadoc(field.fieldTypeJavadoc),
526
526
  enumInstance: field.enumInstance,
527
527
  enums,
528
528
  ...customValuesState,
@@ -794,7 +794,7 @@ function vueReplaceTranslation(generator, files) {
794
794
  const regexp = ['v-text', 'v-bind:placeholder', 'v-html', 'v-bind:title', 'v-bind:label', 'v-bind:value', 'v-bind:html']
795
795
  .map(s => `${s}="\\$t\\(.*?\\)"`)
796
796
  .join(')|(');
797
- this.replaceContent(
797
+ replaceContent(
798
798
  {
799
799
  file: filePath,
800
800
  pattern: new RegExp(` ?(${regexp})`, 'g'),