generator-jhipster 7.9.0 → 7.9.3

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 (227) hide show
  1. package/cli/environment-builder.js +15 -1
  2. package/cli/jhipster.js +0 -0
  3. package/generators/app/index.js +12 -1
  4. package/generators/bootstrap/index.js +33 -1
  5. package/generators/ci-cd/templates/circle.yml.ejs +3 -13
  6. package/generators/client/files-angular.js +1 -1
  7. package/generators/client/files-react.js +5 -2
  8. package/generators/client/files-vue.js +3 -2
  9. package/generators/client/templates/angular/jest.conf.js.ejs +6 -3
  10. package/generators/client/templates/angular/package.json +18 -18
  11. package/generators/client/templates/angular/package.json.ejs +3 -7
  12. package/generators/client/templates/angular/src/main/webapp/app/admin/admin-routing.module.ts.ejs +1 -1
  13. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.model.ts.ejs +1 -1
  14. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.ts.ejs +17 -15
  15. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.model.ts.ejs +2 -2
  16. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.route.ts.ejs +4 -4
  17. package/generators/client/templates/angular/src/main/webapp/app/core/request/request-util.ts.ejs +4 -2
  18. package/generators/client/templates/angular/src/main/webapp/app/core/util/data-util.service.ts.ejs +1 -1
  19. package/generators/client/templates/angular/src/main/webapp/app/core/util/parse-links.service.ts.ejs +1 -1
  20. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +1 -1
  21. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.component.html.ejs +8 -6
  22. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.component.ts.ejs +6 -11
  23. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.model.spec.ts.ejs +227 -25
  24. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.model.ts.ejs +104 -43
  25. package/generators/client/templates/angular/src/main/webapp/content/scss/global.scss.ejs +8 -0
  26. package/generators/client/templates/angular/tsconfig.json.ejs +0 -1
  27. package/generators/client/templates/angular/tsconfig.spec.json.ejs +2 -3
  28. package/generators/client/templates/angular/webpack/webpack.microfrontend.js.ejs +0 -3
  29. package/generators/client/templates/common/package.json +4 -4
  30. package/generators/client/templates/common/src/main/webapp/swagger-ui/index.html.ejs +1 -1
  31. package/generators/client/templates/react/jest.conf.js.ejs +2 -2
  32. package/generators/client/templates/react/package.json +24 -24
  33. package/generators/client/templates/react/package.json.ejs +3 -7
  34. package/generators/client/templates/react/src/main/webapp/app/config/store.ts.ejs +0 -6
  35. package/generators/client/templates/react/src/main/webapp/app/index.tsx.ejs +4 -5
  36. package/generators/client/templates/react/src/main/webapp/app/modules/administration/administration.reducer.spec.ts.ejs +7 -7
  37. package/generators/client/templates/react/src/main/webapp/app/modules/administration/administration.reducer.ts.ejs +6 -6
  38. package/generators/client/templates/react/src/main/webapp/app/modules/administration/index.tsx.ejs +2 -2
  39. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/admin.tsx.ejs +1 -1
  40. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/authentication.spec.ts.ejs +17 -8
  41. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/authentication.ts.ejs +1 -1
  42. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/locale.spec.ts.ejs +176 -19
  43. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/locale.ts.ejs +46 -13
  44. package/generators/client/templates/react/webpack/webpack.microfrontend.js.jhi.react.ejs +1 -1
  45. package/generators/client/templates/vue/package.json +17 -17
  46. package/generators/client/templates/vue/package.json.ejs +3 -7
  47. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +2 -1
  48. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.vue.ejs +1 -1
  49. package/generators/client/templates/vue/src/main/webapp/app/main.ts.ejs +2 -2
  50. package/generators/client/templates/vue/src/main/webapp/app/router/admin.ts.ejs +2 -2
  51. package/generators/client/templates/vue/src/test/javascript/e2e/modules/administration/administration.spec.ts.ejs +1 -1
  52. package/generators/client/templates/vue/src/test/javascript/e2e/page-objects/administration-page.ts.ejs +1 -1
  53. package/generators/client/templates/vue/src/test/javascript/e2e/page-objects/navbar-page.ts.ejs +2 -2
  54. package/generators/client/templates/vue/src/test/javascript/jest.conf.js.ejs +5 -6
  55. package/generators/client/templates/vue/src/test/javascript/spec/app/account/account.service.spec.ts.ejs +4 -0
  56. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/alert/alert.service.spec.ts.ejs +106 -3
  57. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/config/axios-interceptor.spec.ts.ejs +12 -0
  58. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/config/formatter.spec.ts.ejs +6 -0
  59. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/sort/sorts.spec.ts.ejs +10 -0
  60. package/generators/client/templates/vue/webpack/webpack.common.js.ejs +1 -1
  61. package/generators/client/templates/vue/webpack/webpack.dev.js.ejs +2 -2
  62. package/generators/common/files.js +5 -4
  63. package/generators/common/templates/.husky/pre-commit.ejs +0 -0
  64. package/generators/common/templates/package.json +1 -1
  65. package/generators/common/templates/sonar-project.properties.ejs +19 -11
  66. package/generators/cypress/index.js +1 -1
  67. package/generators/docker-compose/templates/README-DOCKER-COMPOSE.md.ejs +3 -3
  68. package/generators/docker-compose/templates/docker-compose.yml.ejs +1 -1
  69. package/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +32 -14
  70. package/generators/entity/index.js +4 -3
  71. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.html.ejs +1 -1
  72. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.html.ejs +18 -6
  73. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.spec.ts.ejs +1 -1
  74. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.ts.ejs +23 -19
  75. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.spec.ts.ejs +3 -1
  76. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.ts.ejs +1 -1
  77. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-form.service.ts.ejs +1 -1
  78. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity.component.ts.ejs +2 -2
  79. package/generators/entity-server/templates/src/main/java/package/common/delete_template.ejs +7 -3
  80. package/generators/entity-server/templates/src/main/java/package/common/get_all_template.ejs +2 -2
  81. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.ejs +15 -5
  82. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.spring_data_persistable.ejs +8 -1
  83. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryInternalImpl_reactive.java.ejs +5 -0
  84. package/generators/entity-server/templates/src/main/java/package/service/EntityQueryService.java.ejs +4 -4
  85. package/generators/entity-server/templates/src/main/java/package/service/EntityService.java.ejs +6 -4
  86. package/generators/entity-server/templates/src/main/java/package/service/criteria/EntityCriteria.java.ejs +3 -26
  87. package/generators/entity-server/templates/src/main/java/package/service/dto/EntityDTO.java.ejs +1 -0
  88. package/generators/entity-server/templates/src/main/java/package/service/impl/EntityServiceImpl.java.ejs +1 -1
  89. package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +33 -28
  90. package/generators/generate-blueprint/constants.mjs +46 -6
  91. package/generators/generate-blueprint/esm.mjs +0 -0
  92. package/generators/generate-blueprint/files.mjs +7 -5
  93. package/generators/generate-blueprint/generator.mjs +73 -19
  94. package/generators/generate-blueprint/templates/cli/cli.mjs.ejs +0 -0
  95. package/generators/generate-blueprint/templates/generators/generator/generator.spec.mjs.ejs +1 -1
  96. package/generators/generate-blueprint/templates/generators/generator/templates/template-file.ejs +0 -0
  97. package/generators/generator-base-blueprint.js +23 -1
  98. package/generators/generator-base-entities.cjs +5 -1
  99. package/generators/generator-base.js +82 -15
  100. package/generators/generator-constants.js +17 -23
  101. package/generators/init/templates/.husky/pre-commit +0 -0
  102. package/generators/kubernetes/templates/deployment.yml.ejs +1 -1
  103. package/generators/kubernetes/templates/ingress.yml.ejs +1 -1
  104. package/generators/kubernetes/templates/istio/gateway.yml.ejs +1 -1
  105. package/generators/kubernetes/templates/kubectl-apply.sh.ejs +0 -0
  106. package/generators/kubernetes/templates/kustomize/kustomization.yml.ejs +1 -1
  107. package/generators/kubernetes/templates/service.yml.ejs +1 -1
  108. package/generators/kubernetes-knative/templates/istio/gateway.yml.ejs +1 -1
  109. package/generators/kubernetes-knative/templates/kubectl-apply.sh.ejs +0 -0
  110. package/generators/kubernetes-knative/templates/service.yml.ejs +3 -3
  111. package/generators/languages/templates/src/main/webapp/i18n/al/health.json.ejs +1 -1
  112. package/generators/languages/templates/src/main/webapp/i18n/ar-ly/health.json.ejs +1 -1
  113. package/generators/languages/templates/src/main/webapp/i18n/bg/health.json.ejs +1 -1
  114. package/generators/languages/templates/src/main/webapp/i18n/bn/health.json.ejs +1 -1
  115. package/generators/languages/templates/src/main/webapp/i18n/by/health.json.ejs +1 -1
  116. package/generators/languages/templates/src/main/webapp/i18n/ca/health.json.ejs +1 -1
  117. package/generators/languages/templates/src/main/webapp/i18n/cs/health.json.ejs +1 -1
  118. package/generators/languages/templates/src/main/webapp/i18n/da/health.json.ejs +1 -1
  119. package/generators/languages/templates/src/main/webapp/i18n/de/health.json.ejs +1 -1
  120. package/generators/languages/templates/src/main/webapp/i18n/el/activate.json.ejs +1 -1
  121. package/generators/languages/templates/src/main/webapp/i18n/el/health.json.ejs +1 -1
  122. package/generators/languages/templates/src/main/webapp/i18n/el/password.json +1 -1
  123. package/generators/languages/templates/src/main/webapp/i18n/el/register.json +3 -3
  124. package/generators/languages/templates/src/main/webapp/i18n/el/tracker.json +1 -1
  125. package/generators/languages/templates/src/main/webapp/i18n/el/user-management.json +9 -9
  126. package/generators/languages/templates/src/main/webapp/i18n/en/health.json.ejs +1 -1
  127. package/generators/languages/templates/src/main/webapp/i18n/es/health.json.ejs +1 -1
  128. package/generators/languages/templates/src/main/webapp/i18n/et/health.json.ejs +1 -1
  129. package/generators/languages/templates/src/main/webapp/i18n/fa/health.json.ejs +1 -1
  130. package/generators/languages/templates/src/main/webapp/i18n/fi/health.json.ejs +1 -1
  131. package/generators/languages/templates/src/main/webapp/i18n/fr/health.json.ejs +1 -1
  132. package/generators/languages/templates/src/main/webapp/i18n/gl/health.json.ejs +1 -1
  133. package/generators/languages/templates/src/main/webapp/i18n/hi/health.json.ejs +1 -1
  134. package/generators/languages/templates/src/main/webapp/i18n/hr/health.json.ejs +1 -1
  135. package/generators/languages/templates/src/main/webapp/i18n/hu/health.json.ejs +1 -1
  136. package/generators/languages/templates/src/main/webapp/i18n/hy/health.json.ejs +1 -1
  137. package/generators/languages/templates/src/main/webapp/i18n/in/health.json.ejs +1 -1
  138. package/generators/languages/templates/src/main/webapp/i18n/it/health.json.ejs +1 -1
  139. package/generators/languages/templates/src/main/webapp/i18n/ja/health.json.ejs +1 -1
  140. package/generators/languages/templates/src/main/webapp/i18n/ko/health.json.ejs +1 -1
  141. package/generators/languages/templates/src/main/webapp/i18n/mr/health.json.ejs +1 -1
  142. package/generators/languages/templates/src/main/webapp/i18n/my/health.json.ejs +1 -1
  143. package/generators/languages/templates/src/main/webapp/i18n/nl/health.json.ejs +1 -1
  144. package/generators/languages/templates/src/main/webapp/i18n/pa/health.json.ejs +1 -1
  145. package/generators/languages/templates/src/main/webapp/i18n/pl/health.json.ejs +1 -1
  146. package/generators/languages/templates/src/main/webapp/i18n/pt-br/health.json.ejs +1 -1
  147. package/generators/languages/templates/src/main/webapp/i18n/pt-pt/health.json.ejs +1 -1
  148. package/generators/languages/templates/src/main/webapp/i18n/ro/health.json.ejs +1 -1
  149. package/generators/languages/templates/src/main/webapp/i18n/ru/health.json.ejs +1 -1
  150. package/generators/languages/templates/src/main/webapp/i18n/si/health.json.ejs +1 -1
  151. package/generators/languages/templates/src/main/webapp/i18n/sk/health.json.ejs +1 -1
  152. package/generators/languages/templates/src/main/webapp/i18n/sr/health.json.ejs +1 -1
  153. package/generators/languages/templates/src/main/webapp/i18n/sv/health.json.ejs +1 -1
  154. package/generators/languages/templates/src/main/webapp/i18n/ta/health.json.ejs +1 -1
  155. package/generators/languages/templates/src/main/webapp/i18n/te/health.json.ejs +1 -1
  156. package/generators/languages/templates/src/main/webapp/i18n/th/health.json.ejs +1 -1
  157. package/generators/languages/templates/src/main/webapp/i18n/tr/health.json.ejs +1 -1
  158. package/generators/languages/templates/src/main/webapp/i18n/ua/health.json.ejs +1 -1
  159. package/generators/languages/templates/src/main/webapp/i18n/uz-Latn-uz/health.json.ejs +1 -1
  160. package/generators/languages/templates/src/main/webapp/i18n/vi/health.json.ejs +1 -1
  161. package/generators/languages/templates/src/main/webapp/i18n/zh-cn/health.json.ejs +1 -1
  162. package/generators/languages/templates/src/main/webapp/i18n/zh-tw/health.json.ejs +1 -1
  163. package/generators/maven/templates/mvnw +0 -0
  164. package/generators/openshift/templates/deployment.yml.ejs +2 -2
  165. package/generators/server/cleanup-elasticsearch.js +5 -0
  166. package/generators/server/files.js +17 -8
  167. package/generators/server/index.js +0 -2
  168. package/generators/server/templates/build.gradle.ejs +6 -14
  169. package/generators/server/templates/gradle/profile_dev.gradle.ejs +1 -1
  170. package/generators/server/templates/gradle/profile_prod.gradle.ejs +1 -1
  171. package/generators/server/templates/gradle.properties.ejs +6 -4
  172. package/generators/server/templates/gradlew +0 -0
  173. package/generators/server/templates/mvnw +0 -0
  174. package/generators/server/templates/npmw +0 -0
  175. package/generators/server/templates/npmw.cmd +31 -29
  176. package/generators/server/templates/package.json.ejs +2 -2
  177. package/generators/server/templates/pom.xml.ejs +12 -23
  178. package/generators/server/templates/sql/common/src/test/java/package/config/MsSqlTestContainer.java.ejs +2 -3
  179. package/generators/server/templates/src/main/docker/app.yml.ejs +7 -1
  180. package/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +32 -14
  181. package/generators/server/templates/src/main/docker/jhipster-control-center.yml.ejs +1 -1
  182. package/generators/server/templates/src/main/docker/prometheus/prometheus.yml.ejs +1 -1
  183. package/generators/server/templates/src/main/java/package/Application.java.ejs +11 -4
  184. package/generators/server/templates/src/main/java/package/config/CRLFLogConverter.java.ejs +57 -0
  185. package/generators/server/templates/src/main/java/package/config/EurekaWorkaroundConfiguration.java.ejs +49 -0
  186. package/generators/server/templates/src/main/java/package/config/LoggingConfiguration.java.ejs +4 -4
  187. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs +17 -18
  188. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration_reactive.java.ejs +13 -5
  189. package/generators/server/templates/src/main/java/package/domain/AbstractAuditingEntity.java.ejs +5 -6
  190. package/generators/server/templates/src/main/java/package/domain/User.java.ejs +1 -1
  191. package/generators/server/templates/src/main/java/package/repository/UserRepository.java.ejs +1 -1
  192. package/generators/server/templates/src/main/java/package/security/oauth2/CustomClaimConverter.java.ejs +13 -6
  193. package/generators/server/templates/src/main/java/package/service/dto/AdminUserDTO.java.ejs +3 -1
  194. package/generators/server/templates/src/main/java/package/service/dto/PasswordChangeDTO.java.ejs +5 -1
  195. package/generators/server/templates/src/main/java/package/service/dto/UserDTO.java.ejs +3 -1
  196. package/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs +15 -42
  197. package/generators/server/templates/src/main/java/package/web/rest/errors/BadRequestAlertException.java.ejs +1 -0
  198. package/generators/server/templates/src/main/java/package/web/rest/errors/EmailAlreadyUsedException.java.ejs +1 -0
  199. package/generators/server/templates/src/main/java/package/web/rest/errors/InvalidPasswordException.java.ejs +1 -0
  200. package/generators/server/templates/src/main/java/package/web/rest/errors/LoginAlreadyUsedException.java.ejs +1 -0
  201. package/generators/server/templates/src/main/resources/config/application-dev.yml.ejs +1 -1
  202. package/generators/server/templates/src/main/resources/config/application-prod.yml.ejs +3 -3
  203. package/generators/server/templates/src/main/resources/config/application.yml.ejs +4 -2
  204. package/generators/server/templates/src/main/resources/config/liquibase/master.xml.ejs +3 -8
  205. package/generators/server/templates/src/main/resources/logback-spring.xml.ejs +5 -0
  206. package/generators/server/templates/src/test/java/package/config/{ElasticsearchReactiveTestConfiguration.java.ejs → ElasticsearchTestConfiguration.java.ejs} +3 -3
  207. package/generators/server/templates/src/test/java/package/config/ElasticsearchTestContainer.java.ejs +1 -0
  208. package/generators/server/templates/src/test/java/package/config/JHipsterBlockHoundIntegration.java.ejs +3 -0
  209. package/generators/server/templates/src/test/java/package/config/TestContainersSpringContextCustomizerFactory.java.ejs +2 -2
  210. package/generators/sql-constants.js +5 -2
  211. package/generators/utils.js +43 -3
  212. package/generators/workspaces/index.js +2 -1
  213. package/jdl/exporters/jdl-exporter.js +6 -1
  214. package/jdl/jhipster/application-options.js +2 -1
  215. package/jdl/jhipster/binary-options.js +2 -2
  216. package/jdl/jhipster/default-application-options.js +11 -8
  217. package/jdl/jhipster/entity-options.js +1 -0
  218. package/jdl/jhipster/search-engine-types.js +1 -0
  219. package/lib/constants/priorities.cjs +16 -0
  220. package/lib/constants/priorities.mjs +1 -0
  221. package/lib/index.js +2 -0
  222. package/lib/support/base.cjs +2 -1
  223. package/package.json +7 -6
  224. package/utils/blueprint.js +10 -0
  225. package/utils/field.js +9 -9
  226. package/generators/client/templates/react/src/main/webapp/app/config/translation-middleware.ts.ejs +0 -58
  227. package/generators/server/templates/.npmrc.ejs +0 -1
@@ -0,0 +1,57 @@
1
+ package <%= packageName %>.config;
2
+
3
+ import ch.qos.logback.classic.spi.ILoggingEvent;
4
+ import ch.qos.logback.core.pattern.CompositeConverter;
5
+
6
+ import java.util.Collections;
7
+ import java.util.HashMap;
8
+ import java.util.Map;
9
+
10
+ import org.slf4j.Marker;
11
+ import org.slf4j.MarkerFactory;
12
+ import org.springframework.boot.ansi.AnsiColor;
13
+ import org.springframework.boot.ansi.AnsiElement;
14
+ import org.springframework.boot.ansi.AnsiOutput;
15
+ import org.springframework.boot.ansi.AnsiStyle;
16
+
17
+ public class CRLFLogConverter extends CompositeConverter<ILoggingEvent> {
18
+ public static final Marker CRLF_SAFE_MARKER = MarkerFactory.getMarker("CRLF_SAFE");
19
+
20
+ private static final String[] SAFE_LOGGERS = { "org.hibernate" };
21
+ private static final Map<String, AnsiElement> ELEMENTS;
22
+
23
+ static {
24
+ Map<String, AnsiElement> ansiElements = new HashMap<>();
25
+ ansiElements.put("faint", AnsiStyle.FAINT);
26
+ ansiElements.put("red", AnsiColor.RED);
27
+ ansiElements.put("green", AnsiColor.GREEN);
28
+ ansiElements.put("yellow", AnsiColor.YELLOW);
29
+ ansiElements.put("blue", AnsiColor.BLUE);
30
+ ansiElements.put("magenta", AnsiColor.MAGENTA);
31
+ ansiElements.put("cyan", AnsiColor.CYAN);
32
+ ELEMENTS = Collections.unmodifiableMap(ansiElements);
33
+ }
34
+
35
+ @Override
36
+ protected String transform(ILoggingEvent event, String in) {
37
+ AnsiElement element = ELEMENTS.get(getFirstOption());
38
+ if ((event.getMarker() != null && event.getMarker().contains(CRLF_SAFE_MARKER)) || isLoggerSafe(event)) {
39
+ return in;
40
+ }
41
+ String replacement = element == null ? "_" : toAnsiString("_", element);
42
+ return in.replaceAll("[\n\r\t]", replacement);
43
+ }
44
+
45
+ protected boolean isLoggerSafe(ILoggingEvent event) {
46
+ for (String safeLogger : SAFE_LOGGERS) {
47
+ if (event.getLoggerName().startsWith(safeLogger)) {
48
+ return true;
49
+ }
50
+ }
51
+ return false;
52
+ }
53
+
54
+ protected String toAnsiString(String in, AnsiElement element) {
55
+ return AnsiOutput.toString(element, in);
56
+ }
57
+ }
@@ -0,0 +1,49 @@
1
+ <%#
2
+ Copyright 2013-2022 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
+ // This is a workaround for
20
+ // https://github.com/jhipster/jhipster-registry/issues/537
21
+ // https://github.com/jhipster/generator-jhipster/issues/18533
22
+ // The original issue will be fixed with spring cloud 2021.0.4
23
+ // https://github.com/spring-cloud/spring-cloud-netflix/issues/3941
24
+ package <%= packageName %>.config;
25
+
26
+ import org.springframework.boot.actuate.health.HealthIndicator;
27
+ import org.springframework.boot.actuate.health.Health;
28
+ import org.springframework.boot.context.event.ApplicationReadyEvent;
29
+ import org.springframework.context.event.EventListener;
30
+ import org.springframework.stereotype.Component;
31
+
32
+ @Component
33
+ public class EurekaWorkaroundConfiguration implements HealthIndicator {
34
+
35
+ private boolean applicationIsUp = false;
36
+
37
+ @EventListener(ApplicationReadyEvent.class)
38
+ public void onStartup() {
39
+ this.applicationIsUp = true;
40
+ }
41
+
42
+ @Override
43
+ public Health health() {
44
+ if (!applicationIsUp) {
45
+ return Health.down().build();
46
+ }
47
+ return Health.up().build();
48
+ }
49
+ }
@@ -23,11 +23,11 @@ import com.fasterxml.jackson.core.JsonProcessingException;
23
23
  import com.fasterxml.jackson.databind.ObjectMapper;
24
24
  import tech.jhipster.config.JHipsterProperties;
25
25
  import org.slf4j.LoggerFactory;
26
- <%_ if (serviceDiscoveryConsul || (serviceDiscoveryType && applicationTypeGateway || applicationTypeMicroservice)) { _%>
26
+ <%_ if (serviceDiscoveryConsul || (serviceDiscoveryAny && applicationTypeGateway || applicationTypeMicroservice)) { _%>
27
27
  import org.springframework.beans.factory.ObjectProvider;
28
28
  <%_ } _%>
29
29
  import org.springframework.beans.factory.annotation.Value;
30
- <%_ if (serviceDiscoveryType && (applicationTypeGateway || applicationTypeMicroservice)) { _%>
30
+ <%_ if (serviceDiscoveryAny && (applicationTypeGateway || applicationTypeMicroservice)) { _%>
31
31
  import org.springframework.boot.info.BuildProperties;
32
32
  <%_ } _%>
33
33
  <%_ if (serviceDiscoveryConsul) { _%>
@@ -58,7 +58,7 @@ public class LoggingConfiguration {
58
58
  <%_ if (serviceDiscoveryConsul) { _%>
59
59
  ObjectProvider<ConsulRegistration> consulRegistration,
60
60
  <%_ } _%>
61
- <%_ if (serviceDiscoveryType && (applicationTypeMicroservice || applicationTypeGateway)) { _%>
61
+ <%_ if (serviceDiscoveryAny && (applicationTypeMicroservice || applicationTypeGateway)) { _%>
62
62
  ObjectProvider<BuildProperties> buildProperties,
63
63
  <%_ } _%>
64
64
  ObjectMapper mapper) throws JsonProcessingException {
@@ -68,7 +68,7 @@ public class LoggingConfiguration {
68
68
  Map<String, String> map = new HashMap<>();
69
69
  map.put("app_name", appName);
70
70
  map.put("app_port", serverPort);
71
- <%_ if (serviceDiscoveryType && (applicationTypeMicroservice || applicationTypeGateway)) { _%>
71
+ <%_ if (serviceDiscoveryAny && (applicationTypeMicroservice || applicationTypeGateway)) { _%>
72
72
  buildProperties.ifAvailable(it -> map.put("version", it.getVersion()));
73
73
  <%_ } _%>
74
74
  <%_ if (serviceDiscoveryConsul) { _%>
@@ -37,13 +37,6 @@ import org.springframework.http.HttpMethod;
37
37
  <%_ } _%>
38
38
  import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
39
39
  import org.springframework.security.config.annotation.web.builders.HttpSecurity;
40
- <%_ if (!applicationTypeMicroservice || !authenticationTypeOauth2) { _%>
41
- import org.springframework.security.config.annotation.web.builders.WebSecurity;
42
- <%_ } else { _%>
43
- <%_ if (devDatabaseTypeH2Any) { _%>
44
- import org.springframework.security.config.annotation.web.builders.WebSecurity;
45
- <%_ } _%>
46
- <%_ } _%>
47
40
  import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
48
41
  import org.springframework.security.web.SecurityFilterChain;
49
42
  <%_ if (authenticationTypeJwt || (authenticationTypeOauth2 && applicationTypeMicroservice)) { _%>
@@ -91,7 +84,9 @@ import org.springframework.security.oauth2.client.registration.ClientRegistratio
91
84
  import org.springframework.boot.web.client.RestTemplateBuilder;
92
85
  import <%= packageName %>.security.oauth2.CustomClaimConverter;
93
86
  <%_ } _%>
87
+ <%_ if(!skipClient) { _%>
94
88
  import org.springframework.security.web.header.writers.ReferrerPolicyHeaderWriter;
89
+ <%_ } _%>
95
90
  <%_ if (!applicationTypeMicroservice) { _%>
96
91
  import org.springframework.web.filter.CorsFilter;
97
92
  <%_ } _%>
@@ -165,6 +160,9 @@ public class SecurityConfiguration {
165
160
  // @formatter:off
166
161
  http
167
162
  .csrf()
163
+ <%_ if (devDatabaseTypeH2Any) { _%>
164
+ .ignoringAntMatchers("/h2-console/**")
165
+ <%_ } _%>
168
166
  <%_ if ((authenticationTypeOauth2 || authenticationTypeSession) && !applicationTypeMicroservice) { _%>
169
167
  .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
170
168
  .and()
@@ -201,22 +199,23 @@ public class SecurityConfiguration {
201
199
  .logoutSuccessHandler(ajaxLogoutSuccessHandler())
202
200
  .permitAll()
203
201
  <%_ } _%>
202
+ <%_ if (!skipClient) { _%>
204
203
  .and()
205
204
  .headers()
206
- .contentSecurityPolicy(jHipsterProperties.getSecurity().getContentSecurityPolicy())
207
- .and()
208
- .referrerPolicy(ReferrerPolicyHeaderWriter.ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN)
209
- .and()
210
- .permissionsPolicy().policy("camera=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), sync-xhr=()")
211
- .and()
212
- .frameOptions()
213
- .sameOrigin()
214
- .and()
205
+ .contentSecurityPolicy(jHipsterProperties.getSecurity().getContentSecurityPolicy())
206
+ .and()
207
+ .referrerPolicy(ReferrerPolicyHeaderWriter.ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN)
208
+ .and()
209
+ .permissionsPolicy().policy("camera=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), sync-xhr=()")
210
+ .and()
211
+ .frameOptions().sameOrigin()
212
+ <%_ } _%>
215
213
  <%_ if (authenticationTypeJwt || (authenticationTypeOauth2 && applicationTypeMicroservice)) { _%>
216
- .sessionManagement()
217
- .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
218
214
  .and()
215
+ .sessionManagement()
216
+ .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
219
217
  <%_ } _%>
218
+ .and()
220
219
  .authorizeRequests()
221
220
  <%_ if (!applicationTypeMicroservice) { _%>
222
221
  .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
@@ -134,6 +134,10 @@ import reactor.core.publisher.Mono;
134
134
  <%_ if (!applicationTypeMicroservice) { _%>
135
135
  import org.springframework.web.reactive.function.client.WebClient;
136
136
 
137
+ import com.github.benmanes.caffeine.cache.Cache;
138
+ import com.github.benmanes.caffeine.cache.Caffeine;
139
+
140
+ import java.time.Duration;
137
141
  import java.util.Arrays;
138
142
  import java.util.Map;
139
143
  <%_ } _%>
@@ -141,7 +145,6 @@ import java.util.Map;
141
145
  import java.util.HashSet;
142
146
  import java.util.Set;
143
147
  <%_ if (!applicationTypeMicroservice) { _%>
144
- import java.util.concurrent.ConcurrentHashMap;
145
148
  import java.util.function.Consumer;
146
149
  <%_ } _%>
147
150
  <%_ } _%>
@@ -170,8 +173,13 @@ public class SecurityConfiguration {
170
173
 
171
174
  private final ReactiveClientRegistrationRepository clientRegistrationRepository;
172
175
 
173
- // todo: optimize for scale https://github.com/jhipster/generator-jhipster/issues/18868
174
- private final Map<String, Mono<Jwt>> users = new ConcurrentHashMap<>();
176
+ // See https://github.com/jhipster/generator-jhipster/issues/18868
177
+ // We don't use a distributed cache or the user selected cache implementation here on purpose
178
+ private final Cache<String, Mono<Jwt>> users = Caffeine.newBuilder()
179
+ .maximumSize(10_000)
180
+ .expireAfterWrite(Duration.ofHours(1))
181
+ .recordStats()
182
+ .build();
175
183
 
176
184
  <%_ } _%>
177
185
  <%_ } _%>
@@ -268,7 +276,7 @@ public class SecurityConfiguration {
268
276
  <%_ } _%>
269
277
  .and()
270
278
  .headers()
271
- .contentSecurityPolicy(jHipsterProperties.getSecurity().getContentSecurityPolicy())
279
+ .contentSecurityPolicy(jHipsterProperties.getSecurity().getContentSecurityPolicy())
272
280
  .and()
273
281
  .referrerPolicy(ReferrerPolicyServerHttpHeadersWriter.ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN)
274
282
  .and()
@@ -425,7 +433,7 @@ public class SecurityConfiguration {
425
433
  return Mono.just(jwt);
426
434
  }
427
435
  // Retrieve user info from OAuth provider if not already loaded
428
- return users.computeIfAbsent(jwt.getSubject(), s -> {
436
+ return users.get(jwt.getSubject(), s -> {
429
437
  WebClient webClient = WebClient.create();
430
438
 
431
439
  return webClient
@@ -21,7 +21,7 @@ package <%= packageName %>.domain;
21
21
  <%_ if (databaseTypeCouchbase) { _%>
22
22
  import org.springframework.data.couchbase.core.mapping.Field;
23
23
  <%_ } _%>
24
- import com.fasterxml.jackson.annotation.JsonIgnore;
24
+ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
25
25
  <%_ if (!reactive) { _%>
26
26
  import org.springframework.data.annotation.CreatedBy;
27
27
  <%_ } _%>
@@ -58,10 +58,13 @@ import javax.persistence.MappedSuperclass;
58
58
  @MappedSuperclass
59
59
  @EntityListeners(AuditingEntityListener.class)
60
60
  <%_ } _%>
61
- public abstract class AbstractAuditingEntity implements Serializable {
61
+ @JsonIgnoreProperties(value = { "createdBy", "createdDate", "lastModifiedBy", "lastModifiedDate" }, allowGetters = true)
62
+ public abstract class AbstractAuditingEntity<T> implements Serializable {
62
63
 
63
64
  private static final long serialVersionUID = 1L;
64
65
 
66
+ public abstract T getId();
67
+
65
68
  <%_ if (!reactive) { _%>
66
69
  @CreatedBy
67
70
  <%_ } _%>
@@ -77,7 +80,6 @@ public abstract class AbstractAuditingEntity implements Serializable {
77
80
  <%_ if (databaseTypeNeo4j) { _%>
78
81
  @Property("created_by")
79
82
  <%_ } _%>
80
- @JsonIgnore
81
83
  private String createdBy;
82
84
 
83
85
  @CreatedDate
@@ -93,7 +95,6 @@ public abstract class AbstractAuditingEntity implements Serializable {
93
95
  <%_ if (databaseTypeNeo4j) { _%>
94
96
  @Property("created_date")
95
97
  <%_ } _%>
96
- @JsonIgnore
97
98
  private Instant createdDate = Instant.now();
98
99
 
99
100
  <%_ if (!reactive) { _%>
@@ -111,7 +112,6 @@ public abstract class AbstractAuditingEntity implements Serializable {
111
112
  <%_ if (databaseTypeNeo4j) { _%>
112
113
  @Property("last_modified_by")
113
114
  <%_ } _%>
114
- @JsonIgnore
115
115
  private String lastModifiedBy;
116
116
 
117
117
  @LastModifiedDate
@@ -127,7 +127,6 @@ public abstract class AbstractAuditingEntity implements Serializable {
127
127
  <%_ if (databaseTypeNeo4j) { _%>
128
128
  @Property("last_modified_date")
129
129
  <%_ } _%>
130
- @JsonIgnore
131
130
  private Instant lastModifiedDate = Instant.now();
132
131
 
133
132
  public String getCreatedBy() {
@@ -131,7 +131,7 @@ import static org.springframework.data.couchbase.core.mapping.id.GenerationStrat
131
131
  <%_ if (searchEngineElasticsearch) { _%>
132
132
  @org.springframework.data.elasticsearch.annotations.Document(indexName = "user")
133
133
  <%_ } _%>
134
- public class <%= asEntity('User') %><% if (databaseTypeSql || databaseTypeMongodb || databaseTypeNeo4j || databaseTypeCouchbase) { %> extends AbstractAuditingEntity<% } %> implements Serializable {
134
+ public class <%= asEntity('User') %><% if (databaseTypeSql || databaseTypeMongodb || databaseTypeNeo4j || databaseTypeCouchbase) { %> extends AbstractAuditingEntity<<%= user.primaryKey.type %>><% } %> implements Serializable {
135
135
 
136
136
  private static final long serialVersionUID = 1L;
137
137
 
@@ -315,7 +315,7 @@ public interface UserRepository extends R2dbcRepository<<%= asEntity('User') %>,
315
315
  Mono<Void> deleteAllUserAuthorities();
316
316
 
317
317
  @Query("DELETE FROM <%= jhiTablePrefix %>_user_authority WHERE user_id = :userId")
318
- Mono<Void> deleteUserAuthorities(Long userId);
318
+ Mono<Void> deleteUserAuthorities(<%= user.primaryKey.type %> userId);
319
319
 
320
320
  }
321
321
 
@@ -20,6 +20,8 @@ package <%= packageName %>.security.oauth2;
20
20
 
21
21
  import com.fasterxml.jackson.databind.JsonNode;
22
22
  import com.fasterxml.jackson.databind.node.ObjectNode;
23
+ import com.github.benmanes.caffeine.cache.Cache;
24
+ import com.github.benmanes.caffeine.cache.Caffeine;
23
25
  import <%= packageName %>.security.SecurityUtils;
24
26
  import org.springframework.core.convert.converter.Converter;
25
27
  import org.springframework.http.HttpEntity;
@@ -35,11 +37,11 @@ import org.springframework.web.context.request.RequestAttributes;
35
37
  import org.springframework.web.context.request.RequestContextHolder;
36
38
  import org.springframework.web.context.request.ServletRequestAttributes;
37
39
 
40
+ import java.time.Duration;
38
41
  import java.util.Arrays;
39
42
  import java.util.Collections;
40
43
  import java.util.List;
41
44
  import java.util.Map;
42
- import java.util.concurrent.ConcurrentHashMap;
43
45
  import java.util.stream.Collectors;
44
46
  import java.util.stream.StreamSupport;
45
47
 
@@ -55,8 +57,13 @@ public class CustomClaimConverter implements Converter<Map<String, Object>, Map<
55
57
 
56
58
  private final ClientRegistration registration;
57
59
 
58
- // todo: optimize for scale https://github.com/jhipster/generator-jhipster/issues/18868
59
- private final Map<String, ObjectNode> users = new ConcurrentHashMap<>();
60
+ // See https://github.com/jhipster/generator-jhipster/issues/18868
61
+ // We don't use a distributed cache or the user selected cache implementation here on purpose
62
+ private final Cache<String, ObjectNode> users = Caffeine.newBuilder()
63
+ .maximumSize(10_000)
64
+ .expireAfterWrite(Duration.ofHours(1))
65
+ .recordStats()
66
+ .build();
60
67
 
61
68
  public CustomClaimConverter(ClientRegistration registration, RestTemplate restTemplate) {
62
69
  this.registration = registration;
@@ -64,11 +71,11 @@ public class CustomClaimConverter implements Converter<Map<String, Object>, Map<
64
71
  }
65
72
 
66
73
  public Map<String, Object> convert(Map<String, Object> claims) {
74
+ Map<String, Object> convertedClaims = this.delegate.convert(claims);
67
75
  // Only look up user information if identity claims are missing
68
76
  if (claims.containsKey("given_name") && claims.containsKey("family_name")) {
69
- return claims;
77
+ return convertedClaims;
70
78
  }
71
- Map<String, Object> convertedClaims = this.delegate.convert(claims);
72
79
  RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
73
80
  if (attributes instanceof ServletRequestAttributes) {
74
81
  // Retrieve and set the token
@@ -77,7 +84,7 @@ public class CustomClaimConverter implements Converter<Map<String, Object>, Map<
77
84
  headers.set("Authorization", buildBearer(token));
78
85
 
79
86
  // Retrieve user info from OAuth provider if not already loaded
80
- ObjectNode user = users.computeIfAbsent(claims.get("sub").toString(), s -> {
87
+ ObjectNode user = users.get(claims.get("sub").toString(), s -> {
81
88
  ResponseEntity<ObjectNode> userInfo = restTemplate.exchange(registration.getProviderDetails().getUserInfoEndpoint().getUri(), HttpMethod.GET, new HttpEntity<String>(headers), ObjectNode.class);
82
89
  return userInfo.getBody();
83
90
  });
@@ -25,6 +25,7 @@ import <%= packageName %>.domain.Authority;<% } %>
25
25
  import <%= packageName %>.domain.<%= asEntity('User') %>;
26
26
  <%_ } _%>
27
27
 
28
+ import java.io.Serializable;
28
29
  import javax.validation.constraints.*;
29
30
  <%_ if (databaseTypeMongodb || databaseTypeNeo4j || databaseTypeCouchbase || databaseTypeSql) { _%>
30
31
  import java.time.Instant;
@@ -40,7 +41,8 @@ import java.util.stream.Collectors;
40
41
  /**
41
42
  * A DTO representing a user, with his authorities.
42
43
  */
43
- public class <%= asDto('AdminUser') %> {
44
+ public class <%= asDto('AdminUser') %> implements Serializable {
45
+ private static final long serialVersionUID = 1L;
44
46
 
45
47
  private <%= user.primaryKey.type %> id;
46
48
 
@@ -18,10 +18,14 @@
18
18
  -%>
19
19
  package <%= packageName %>.service.dto;
20
20
 
21
+ import java.io.Serializable;
22
+
21
23
  /**
22
24
  * A DTO representing a password change required data - current and new password.
23
25
  */
24
- public class PasswordChangeDTO {
26
+ public class PasswordChangeDTO implements Serializable {
27
+ private static final long serialVersionUID = 1L;
28
+
25
29
  private String currentPassword;
26
30
  private String newPassword;
27
31
 
@@ -22,6 +22,7 @@ package <%= packageName %>.service.dto;
22
22
  import <%= packageName %>.domain.<%= asEntity('User') %>;
23
23
  <%_ } _%>
24
24
 
25
+ import java.io.Serializable;
25
26
  <%_ if (user.primaryKey.hasUUID) { _%>
26
27
  import java.util.UUID;
27
28
  <%_ } _%>
@@ -29,7 +30,8 @@ import java.util.UUID;
29
30
  /**
30
31
  * A DTO representing a user, with only the public attributes.
31
32
  */
32
- public class <%= asDto('User') %> {
33
+ public class <%= asDto('User') %> implements Serializable {
34
+ private static final long serialVersionUID = 1L;
33
35
 
34
36
  private <%= user.primaryKey.type %> id;
35
37