generator-jhipster 8.3.0 → 8.4.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 (194) hide show
  1. package/dist/generators/angular/generator.js +34 -0
  2. package/dist/generators/angular/resources/package.json +7 -7
  3. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.component.html.ejs +1 -1
  4. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs +1 -1
  5. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs +1 -1
  6. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.html.ejs +1 -1
  7. package/dist/generators/angular/templates/src/main/webapp/app/account/settings/settings.component.html.ejs +1 -1
  8. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/update/user-management-update.component.html.ejs +1 -1
  9. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-form.service.ts.ejs +10 -6
  10. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.html.ejs +1 -1
  11. package/dist/generators/angular/templates/src/main/webapp/app/home/home.component.html.ejs +6 -6
  12. package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.html.ejs +1 -1
  13. package/dist/generators/angular/templates/webpack/webpack.custom.js.ejs +1 -1
  14. package/dist/generators/app/generator.js +2 -20
  15. package/dist/generators/app/support/config.js +1 -3
  16. package/dist/generators/base-application/support/prepare-field.js +1 -1
  17. package/dist/generators/base-core/generator.js +5 -2
  18. package/dist/generators/base-entity-changes/generator.js +24 -0
  19. package/dist/generators/bootstrap-application-base/generator.js +42 -1
  20. package/dist/generators/bootstrap-application-server/generator.js +4 -7
  21. package/dist/generators/ci-cd/generator.js +0 -5
  22. package/dist/generators/client/generator.js +0 -22
  23. package/dist/generators/client/resources/package.json +6 -6
  24. package/dist/generators/client/templates/src/main/webapp/index.html.ejs +1 -1
  25. package/dist/generators/common/command.js +13 -0
  26. package/dist/generators/common/generator.js +12 -3
  27. package/dist/generators/common/resources/package.json +1 -1
  28. package/dist/generators/docker-compose/generator.js +1 -5
  29. package/dist/generators/export-jdl/generator.js +0 -5
  30. package/dist/generators/gatling/templates/buildSrc/src/main/groovy/jhipster.gatling-conventions.gradle.ejs +1 -1
  31. package/dist/generators/generate-blueprint/resources/package.json +1 -1
  32. package/dist/generators/generator-constants.js +1 -1
  33. package/dist/generators/heroku/generator.js +0 -5
  34. package/dist/generators/init/resources/.node-version +1 -1
  35. package/dist/generators/java/generators/domain/generator.js +16 -0
  36. package/dist/generators/jdl/generator.js +0 -4
  37. package/dist/generators/kubernetes/generator.js +0 -5
  38. package/dist/generators/kubernetes-helm/generator.js +0 -5
  39. package/dist/generators/kubernetes-knative/generator.js +0 -5
  40. package/dist/generators/languages/files.js +2 -2
  41. package/dist/generators/languages/generator.js +0 -6
  42. package/dist/generators/languages/templates/src/main/webapp/i18n/al/home.json.ejs +19 -0
  43. package/dist/generators/languages/templates/src/main/webapp/i18n/ar-ly/home.json.ejs +19 -0
  44. package/dist/generators/languages/templates/src/main/webapp/i18n/az-Latn-az/home.json.ejs +19 -0
  45. package/dist/generators/languages/templates/src/main/webapp/i18n/bg/home.json.ejs +19 -0
  46. package/dist/generators/languages/templates/src/main/webapp/i18n/bn/home.json.ejs +19 -0
  47. package/dist/generators/languages/templates/src/main/webapp/i18n/by/home.json.ejs +19 -0
  48. package/dist/generators/languages/templates/src/main/webapp/i18n/ca/home.json.ejs +19 -0
  49. package/dist/generators/languages/templates/src/main/webapp/i18n/cs/home.json.ejs +19 -0
  50. package/dist/generators/languages/templates/src/main/webapp/i18n/da/home.json.ejs +19 -0
  51. package/dist/generators/languages/templates/src/main/webapp/i18n/de/global.json.ejs +2 -2
  52. package/dist/generators/languages/templates/src/main/webapp/i18n/de/home.json.ejs +19 -0
  53. package/dist/generators/languages/templates/src/main/webapp/i18n/el/home.json.ejs +19 -0
  54. package/dist/generators/languages/templates/src/main/webapp/i18n/en/home.json.ejs +19 -0
  55. package/dist/generators/languages/templates/src/main/webapp/i18n/es/home.json.ejs +19 -0
  56. package/dist/generators/languages/templates/src/main/webapp/i18n/et/home.json.ejs +19 -0
  57. package/dist/generators/languages/templates/src/main/webapp/i18n/fa/home.json.ejs +19 -0
  58. package/dist/generators/languages/templates/src/main/webapp/i18n/fi/home.json.ejs +19 -0
  59. package/dist/generators/languages/templates/src/main/webapp/i18n/fr/home.json.ejs +19 -0
  60. package/dist/generators/languages/templates/src/main/webapp/i18n/gl/home.json.ejs +19 -0
  61. package/dist/generators/languages/templates/src/main/webapp/i18n/hi/home.json.ejs +19 -0
  62. package/dist/generators/languages/templates/src/main/webapp/i18n/hr/home.json.ejs +19 -0
  63. package/dist/generators/languages/templates/src/main/webapp/i18n/hu/home.json.ejs +19 -0
  64. package/dist/generators/languages/templates/src/main/webapp/i18n/hy/home.json.ejs +19 -0
  65. package/dist/generators/languages/templates/src/main/webapp/i18n/id/home.json.ejs +19 -0
  66. package/dist/generators/languages/templates/src/main/webapp/i18n/it/home.json.ejs +19 -0
  67. package/dist/generators/languages/templates/src/main/webapp/i18n/ja/home.json.ejs +19 -0
  68. package/dist/generators/languages/templates/src/main/webapp/i18n/ko/home.json.ejs +19 -0
  69. package/dist/generators/languages/templates/src/main/webapp/i18n/kr-Latn-kr/home.json.ejs +19 -0
  70. package/dist/generators/languages/templates/src/main/webapp/i18n/mr/home.json.ejs +19 -0
  71. package/dist/generators/languages/templates/src/main/webapp/i18n/my/home.json.ejs +19 -0
  72. package/dist/generators/languages/templates/src/main/webapp/i18n/nl/home.json.ejs +19 -0
  73. package/dist/generators/languages/templates/src/main/webapp/i18n/pa/{home.json → home.json.ejs} +2 -2
  74. package/dist/generators/languages/templates/src/main/webapp/i18n/pl/home.json.ejs +19 -0
  75. package/dist/generators/languages/templates/src/main/webapp/i18n/pt-br/home.json.ejs +19 -0
  76. package/dist/generators/languages/templates/src/main/webapp/i18n/pt-pt/home.json.ejs +19 -0
  77. package/dist/generators/languages/templates/src/main/webapp/i18n/ro/home.json.ejs +19 -0
  78. package/dist/generators/languages/templates/src/main/webapp/i18n/ru/home.json.ejs +19 -0
  79. package/dist/generators/languages/templates/src/main/webapp/i18n/si/{home.json → home.json.ejs} +6 -6
  80. package/dist/generators/languages/templates/src/main/webapp/i18n/sk/home.json.ejs +19 -0
  81. package/dist/generators/languages/templates/src/main/webapp/i18n/sr/home.json.ejs +19 -0
  82. package/dist/generators/languages/templates/src/main/webapp/i18n/sv/home.json.ejs +19 -0
  83. package/dist/generators/languages/templates/src/main/webapp/i18n/ta/home.json.ejs +19 -0
  84. package/dist/generators/languages/templates/src/main/webapp/i18n/te/{home.json → home.json.ejs} +1 -1
  85. package/dist/generators/languages/templates/src/main/webapp/i18n/th/home.json.ejs +19 -0
  86. package/dist/generators/languages/templates/src/main/webapp/i18n/tr/home.json.ejs +19 -0
  87. package/dist/generators/languages/templates/src/main/webapp/i18n/ua/home.json.ejs +19 -0
  88. package/dist/generators/languages/templates/src/main/webapp/i18n/uz-Cyrl-uz/home.json.ejs +19 -0
  89. package/dist/generators/languages/templates/src/main/webapp/i18n/uz-Latn-uz/home.json.ejs +19 -0
  90. package/dist/generators/languages/templates/src/main/webapp/i18n/vi/home.json.ejs +19 -0
  91. package/dist/generators/languages/templates/src/main/webapp/i18n/zh-cn/home.json.ejs +19 -0
  92. package/dist/generators/languages/templates/src/main/webapp/i18n/zh-tw/home.json.ejs +19 -0
  93. package/dist/generators/liquibase/generator.js +59 -12
  94. package/dist/generators/liquibase/support/prepare-field.js +16 -1
  95. package/dist/generators/liquibase/support/relationship.js +1 -0
  96. package/dist/generators/liquibase/templates/src/main/resources/config/liquibase/changelog/added_entity.xml.ejs +1 -1
  97. package/dist/generators/liquibase/templates/src/main/resources/config/liquibase/changelog/updated_entity.xml.ejs +3 -3
  98. package/dist/generators/liquibase/templates/src/main/resources/config/liquibase/changelog/updated_entity_constraints.xml.ejs +26 -1
  99. package/dist/generators/liquibase/templates/src/main/resources/config/liquibase/fake-data/table_entity.csv.ejs +3 -3
  100. package/dist/generators/react/resources/package.json +18 -18
  101. package/dist/generators/react/templates/src/main/webapp/app/modules/home/home.tsx.ejs +7 -7
  102. package/dist/generators/react/templates/webpack/webpack.microfrontend.js.jhi.react.ejs +0 -8
  103. package/dist/generators/server/generator.js +16 -51
  104. package/dist/generators/server/resources/Dockerfile +9 -9
  105. package/dist/generators/server/resources/gradle/libs.versions.toml +8 -8
  106. package/dist/generators/server/resources/pom.xml +7 -7
  107. package/dist/generators/server/support/prepare-field.js +7 -2
  108. package/dist/generators/server/support/prepare-relationship.js +7 -2
  109. package/dist/generators/server/templates/gradle/profile_dev.gradle.ejs +2 -2
  110. package/dist/generators/server/templates/gradle/profile_prod.gradle.ejs +2 -2
  111. package/dist/generators/server/templates/pom.xml.ejs +0 -4
  112. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_imperative.java.ejs +56 -6
  113. package/dist/generators/server/templates/src/main/resources/config/application.yml.ejs +1 -1
  114. package/dist/generators/server/templates/src/main/resources/config/bootstrap.yml.ejs +1 -1
  115. package/dist/generators/server/templates/src/main/resources/static/index_microservices.html.ejs +8 -8
  116. package/dist/generators/spring-boot/cleanup.js +3 -0
  117. package/dist/generators/spring-boot/command.js +10 -1
  118. package/dist/generators/spring-boot/files.js +0 -5
  119. package/dist/generators/spring-boot/generator.js +17 -0
  120. package/dist/generators/{server → spring-boot}/prompts.js +2 -2
  121. package/dist/generators/spring-boot/resources/spring-boot-dependencies.pom +111 -111
  122. package/dist/generators/spring-cache/resources/gradle/libs.versions.toml +2 -2
  123. package/dist/generators/spring-cache/templates/src/main/java/_package_/config/CacheConfiguration.java.ejs +4 -0
  124. package/dist/generators/{app/prompts.js → spring-data-relational/support/h2-reserved-keywords.js} +4 -15
  125. package/dist/generators/upgrade/generator.js +0 -4
  126. package/dist/generators/vue/resources/package.json +14 -14
  127. package/dist/generators/vue/templates/src/main/webapp/app/account/change-password/change-password.vue.ejs +1 -1
  128. package/dist/generators/vue/templates/src/main/webapp/app/account/login-form/login-form.vue.ejs +1 -1
  129. package/dist/generators/vue/templates/src/main/webapp/app/account/register/register.vue.ejs +1 -1
  130. package/dist/generators/vue/templates/src/main/webapp/app/account/reset-password/finish/reset-password-finish.vue.ejs +1 -1
  131. package/dist/generators/vue/templates/src/main/webapp/app/account/reset-password/init/reset-password-init.vue.ejs +1 -1
  132. package/dist/generators/vue/templates/src/main/webapp/app/account/settings/settings.vue.ejs +1 -1
  133. package/dist/generators/vue/templates/src/main/webapp/app/admin/user-management/user-management-edit.vue.ejs +1 -1
  134. package/dist/generators/vue/templates/src/main/webapp/app/core/home/home.vue.ejs +7 -7
  135. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.vue.ejs +1 -1
  136. package/dist/generators/vue/templates/vitest.config.mts.ejs +1 -1
  137. package/dist/generators/vue/templates/webpack/webpack.microfrontend.js.jhi.vue.ejs +0 -9
  138. package/dist/types/generators/base/api.d.ts +1 -1
  139. package/dist/types/generators/base-application/types.d.ts +15 -0
  140. package/dist/types/generators/base-entity-changes/types.d.ts +2 -0
  141. package/dist/types/generators/generator-constants.d.ts +1 -1
  142. package/dist/types/generators/spring-data-relational/support/h2-reserved-keywords.d.ts +20 -0
  143. package/package.json +10 -11
  144. package/dist/generators/languages/templates/src/main/webapp/i18n/al/home.json +0 -19
  145. package/dist/generators/languages/templates/src/main/webapp/i18n/ar-ly/home.json +0 -19
  146. package/dist/generators/languages/templates/src/main/webapp/i18n/az-Latn-az/home.json +0 -19
  147. package/dist/generators/languages/templates/src/main/webapp/i18n/bg/home.json +0 -19
  148. package/dist/generators/languages/templates/src/main/webapp/i18n/bn/home.json +0 -19
  149. package/dist/generators/languages/templates/src/main/webapp/i18n/by/home.json +0 -19
  150. package/dist/generators/languages/templates/src/main/webapp/i18n/ca/home.json +0 -19
  151. package/dist/generators/languages/templates/src/main/webapp/i18n/cs/home.json +0 -19
  152. package/dist/generators/languages/templates/src/main/webapp/i18n/da/home.json +0 -19
  153. package/dist/generators/languages/templates/src/main/webapp/i18n/de/home.json +0 -19
  154. package/dist/generators/languages/templates/src/main/webapp/i18n/el/home.json +0 -19
  155. package/dist/generators/languages/templates/src/main/webapp/i18n/en/home.json +0 -19
  156. package/dist/generators/languages/templates/src/main/webapp/i18n/es/home.json +0 -19
  157. package/dist/generators/languages/templates/src/main/webapp/i18n/et/home.json +0 -19
  158. package/dist/generators/languages/templates/src/main/webapp/i18n/fa/home.json +0 -19
  159. package/dist/generators/languages/templates/src/main/webapp/i18n/fi/home.json +0 -19
  160. package/dist/generators/languages/templates/src/main/webapp/i18n/fr/home.json +0 -19
  161. package/dist/generators/languages/templates/src/main/webapp/i18n/gl/home.json +0 -19
  162. package/dist/generators/languages/templates/src/main/webapp/i18n/hi/home.json +0 -19
  163. package/dist/generators/languages/templates/src/main/webapp/i18n/hr/home.json +0 -19
  164. package/dist/generators/languages/templates/src/main/webapp/i18n/hu/home.json +0 -19
  165. package/dist/generators/languages/templates/src/main/webapp/i18n/hy/home.json +0 -19
  166. package/dist/generators/languages/templates/src/main/webapp/i18n/id/home.json +0 -19
  167. package/dist/generators/languages/templates/src/main/webapp/i18n/it/home.json +0 -19
  168. package/dist/generators/languages/templates/src/main/webapp/i18n/ja/home.json +0 -19
  169. package/dist/generators/languages/templates/src/main/webapp/i18n/ko/home.json +0 -19
  170. package/dist/generators/languages/templates/src/main/webapp/i18n/kr-Latn-kr/home.json +0 -19
  171. package/dist/generators/languages/templates/src/main/webapp/i18n/mr/home.json +0 -19
  172. package/dist/generators/languages/templates/src/main/webapp/i18n/my/home.json +0 -19
  173. package/dist/generators/languages/templates/src/main/webapp/i18n/nl/home.json +0 -19
  174. package/dist/generators/languages/templates/src/main/webapp/i18n/pl/home.json +0 -19
  175. package/dist/generators/languages/templates/src/main/webapp/i18n/pt-br/home.json +0 -19
  176. package/dist/generators/languages/templates/src/main/webapp/i18n/pt-pt/home.json +0 -19
  177. package/dist/generators/languages/templates/src/main/webapp/i18n/ro/home.json +0 -19
  178. package/dist/generators/languages/templates/src/main/webapp/i18n/ru/home.json +0 -19
  179. package/dist/generators/languages/templates/src/main/webapp/i18n/sk/home.json +0 -19
  180. package/dist/generators/languages/templates/src/main/webapp/i18n/sr/home.json +0 -19
  181. package/dist/generators/languages/templates/src/main/webapp/i18n/sv/home.json +0 -19
  182. package/dist/generators/languages/templates/src/main/webapp/i18n/ta/home.json +0 -19
  183. package/dist/generators/languages/templates/src/main/webapp/i18n/th/home.json +0 -19
  184. package/dist/generators/languages/templates/src/main/webapp/i18n/tr/home.json +0 -19
  185. package/dist/generators/languages/templates/src/main/webapp/i18n/ua/home.json +0 -19
  186. package/dist/generators/languages/templates/src/main/webapp/i18n/uz-Cyrl-uz/global.json +0 -148
  187. package/dist/generators/languages/templates/src/main/webapp/i18n/uz-Cyrl-uz/home.json +0 -19
  188. package/dist/generators/languages/templates/src/main/webapp/i18n/uz-Latn-uz/home.json +0 -19
  189. package/dist/generators/languages/templates/src/main/webapp/i18n/vi/home.json +0 -19
  190. package/dist/generators/languages/templates/src/main/webapp/i18n/zh-cn/home.json +0 -19
  191. package/dist/generators/languages/templates/src/main/webapp/i18n/zh-tw/home.json +0 -19
  192. package/dist/generators/server/templates/src/main/java/_package_/config/LocaleConfiguration_imperative.java.ejs +0 -43
  193. package/dist/generators/server/templates/src/main/java/_package_/config/LocaleConfiguration_reactive.java.ejs +0 -184
  194. package/dist/generators/statistics.js +0 -223
@@ -21,17 +21,16 @@
21
21
  import { existsSync } from 'fs';
22
22
  import chalk from 'chalk';
23
23
  import { getDBTypeFromDBValue, buildJavaGet as javaGetCall, javaBeanCase as javaBeanClassNameFormat, buildJavaGetter as javaGetter, buildJavaSetter as javaSetter, getJavaValueGeneratorForType as getJavaValueForType, getPrimaryKeyValue as getPKValue, hibernateSnakeCase, } from './support/index.js';
24
- import { askForOptionalItems, askForServerSideOpts, askForServerTestOpts } from './prompts.js';
25
- import { GENERATOR_COMMON, GENERATOR_SERVER, GENERATOR_SPRING_BOOT } from '../generator-list.js';
24
+ import { GENERATOR_COMMON, GENERATOR_SPRING_BOOT } from '../generator-list.js';
26
25
  import BaseApplicationGenerator from '../base-application/index.js';
27
26
  import { packageJson } from '../../lib/index.js';
28
27
  import { SERVER_MAIN_SRC_DIR, SERVER_MAIN_RES_DIR, SERVER_TEST_SRC_DIR, SERVER_TEST_RES_DIR, CLIENT_WEBPACK_DIR, MAIN_DIR, LOGIN_REGEX, TEST_DIR, JAVA_VERSION, JAVA_COMPATIBLE_VERSIONS, JHIPSTER_DEPENDENCIES_VERSION, } from '../generator-constants.js';
29
- import statistics from '../statistics.js';
30
28
  import { applicationTypes, authenticationTypes, buildToolTypes, databaseTypes, fieldTypes, entityOptions, validations, reservedKeywords, searchEngineTypes, clientFrameworkTypes, } from '../../jdl/jhipster/index.js';
31
29
  import { stringifyApplicationData } from '../base-application/support/index.js';
32
30
  import { createBase64Secret, createSecret, createNeedleCallback, mutateData } from '../base/support/index.js';
33
31
  import { isReservedPaginationWords } from '../../jdl/jhipster/reserved-keywords.js';
34
32
  import { loadStoredAppOptions } from '../app/support/index.js';
33
+ import { isReservedH2Keyword } from '../spring-data-relational/support/h2-reserved-keywords.js';
35
34
  const dbTypes = fieldTypes;
36
35
  const { STRING: TYPE_STRING, INTEGER: TYPE_INTEGER, LONG: TYPE_LONG, BIG_DECIMAL: TYPE_BIG_DECIMAL, FLOAT: TYPE_FLOAT, DOUBLE: TYPE_DOUBLE, LOCAL_DATE: TYPE_LOCAL_DATE, ZONED_DATE_TIME: TYPE_ZONED_DATE_TIME, INSTANT: TYPE_INSTANT, DURATION: TYPE_DURATION, } = dbTypes.CommonDBTypes;
37
36
  const { SUPPORTED_VALIDATION_RULES } = validations;
@@ -82,9 +81,6 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator {
82
81
  return;
83
82
  await this.promptCurrentJHipsterCommand();
84
83
  },
85
- askForServerTestOpts,
86
- askForServerSideOpts,
87
- askForOptionalItems,
88
84
  });
89
85
  }
90
86
  get [BaseApplicationGenerator.PROMPTING]() {
@@ -92,6 +88,11 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator {
92
88
  }
93
89
  get configuring() {
94
90
  return this.asConfiguringTaskGroup({
91
+ configuring() {
92
+ if (process.env.JHI_WAR === '1') {
93
+ this.jhipsterConfig.defaultPackaging = 'war';
94
+ }
95
+ },
95
96
  configServerPort() {
96
97
  if (!this.jhipsterConfig.serverPort && this.jhipsterConfig.applicationIndex) {
97
98
  this.jhipsterConfig.serverPort = 8080 + this.jhipsterConfig.applicationIndex;
@@ -102,20 +103,9 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator {
102
103
  },
103
104
  syncUserWithIdp() {
104
105
  if (this.jhipsterConfig.syncUserWithIdp === undefined && this.jhipsterConfig.authenticationType === OAUTH2) {
105
- if (this.jhipsterConfig.databaseType === NO_DATABASE) {
106
- this.jhipsterConfig.syncUserWithIdp = false;
107
- }
108
- else if (this.isJhipsterVersionLessThan('8.1.1')) {
106
+ if (this.isJhipsterVersionLessThan('8.1.1')) {
109
107
  this.jhipsterConfig.syncUserWithIdp = true;
110
108
  }
111
- else if (this.jhipsterConfig.applicationType === GATEWAY) {
112
- // For compatibility with v8 microservices allow syncUserWithIdp by default.
113
- // Switch to false at v9.
114
- this.jhipsterConfig.syncUserWithIdp = true;
115
- }
116
- else {
117
- this.jhipsterConfig.syncUserWithIdp = this.getExistingEntities().some(entity => (entity.definition.relationships ?? []).some(relationship => relationship.otherEntityName.toLowerCase() === 'user'));
118
- }
119
109
  }
120
110
  else if (this.jhipsterConfig.syncUserWithIdp && this.jhipsterConfig.authenticationType !== OAUTH2) {
121
111
  throw new Error(`syncUserWithIdp is only supported with authenticationType ${OAUTH2}`);
@@ -143,17 +133,14 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator {
143
133
  }
144
134
  get loading() {
145
135
  return this.asLoadingTaskGroup({
136
+ async loadCommand({ application }) {
137
+ await this.loadCurrentJHipsterCommandConfig(application);
138
+ },
146
139
  loadEnvironmentVariables({ application }) {
147
140
  application.packageInfoJavadocs?.push({ packageName: `${application.packageName}.aop.logging`, documentation: 'Logging aspect.' }, { packageName: `${application.packageName}.management`, documentation: 'Application management.' }, { packageName: `${application.packageName}.repository.rowmapper`, documentation: 'Webflux database column mapper.' }, { packageName: `${application.packageName}.security`, documentation: 'Application security utilities.' }, { packageName: `${application.packageName}.service.dto`, documentation: 'Data transfer objects for rest mapping.' }, { packageName: `${application.packageName}.service.mapper`, documentation: 'Data transfer objects mappers.' }, { packageName: `${application.packageName}.web.filter`, documentation: 'Request chain filters.' }, { packageName: `${application.packageName}.web.rest.errors`, documentation: 'Rest layer error handling.' }, { packageName: `${application.packageName}.web.rest.vm`, documentation: 'Rest layer visual models.' });
148
- application.defaultPackaging = process.env.JHI_WAR === '1' ? 'war' : 'jar';
149
141
  if (application.defaultPackaging === 'war') {
150
142
  this.log.info(`Using ${application.defaultPackaging} as default packaging`);
151
143
  }
152
- const JHI_PROFILE = process.env.JHI_PROFILE;
153
- application.defaultEnvironment = (JHI_PROFILE || '').includes('dev') ? 'dev' : 'prod';
154
- if (JHI_PROFILE) {
155
- this.log.info(`Using ${application.defaultEnvironment} as default profile`);
156
- }
157
144
  },
158
145
  setupServerconsts({ application }) {
159
146
  // Make constants available in templates
@@ -296,9 +283,13 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator {
296
283
  configureEntityTable({ application, entityName, entityConfig }) {
297
284
  if ((application.applicationTypeGateway && entityConfig.microserviceName) || entityConfig.skipServer)
298
285
  return;
286
+ const { jhiTablePrefix, devDatabaseTypeH2Any } = application;
299
287
  const databaseType = entityConfig.prodDatabaseType ?? application.prodDatabaseType ?? entityConfig.databaseType ?? application.databaseType;
300
288
  const entityTableName = entityConfig.entityTableName ?? hibernateSnakeCase(entityName);
301
- const fixedEntityTableName = this._fixEntityTableName(entityTableName, databaseType, application.jhiTablePrefix);
289
+ const fixedEntityTableName = (isReservedTableName(entityTableName, databaseType) || (devDatabaseTypeH2Any && isReservedH2Keyword(entityTableName))) &&
290
+ jhiTablePrefix
291
+ ? `${jhiTablePrefix}_${entityTableName}`
292
+ : entityTableName;
302
293
  if (fixedEntityTableName !== entityTableName) {
303
294
  entityConfig.entityTableName = fixedEntityTableName;
304
295
  }
@@ -397,25 +388,6 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator {
397
388
  throw new Error(`Composite id is not supported. Defined in ${entitiesWithCompositeIds.map(entity => `${entity.name} (${entity.primaryKey.fields.map(field => field.fieldName)})`)}`);
398
389
  }
399
390
  },
400
- insight({ application }) {
401
- statistics.sendSubGenEvent('generator', GENERATOR_SERVER, {
402
- app: {
403
- authenticationType: application.authenticationType,
404
- cacheProvider: application.cacheProvider,
405
- enableHibernateCache: application.enableHibernateCache,
406
- websocket: application.websocket,
407
- databaseType: application.databaseType,
408
- devDatabaseType: application.devDatabaseType,
409
- prodDatabaseType: application.prodDatabaseType,
410
- searchEngine: application.searchEngine,
411
- messageBroker: application.messageBroker,
412
- serviceDiscoveryType: application.serviceDiscoveryType,
413
- buildTool: application.buildTool,
414
- enableSwaggerCodegen: application.enableSwaggerCodegen,
415
- enableGradleEnterprise: application.enableGradleEnterprise,
416
- },
417
- });
418
- },
419
391
  });
420
392
  }
421
393
  get [BaseApplicationGenerator.DEFAULT]() {
@@ -427,7 +399,6 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator {
427
399
  const packageJsonConfigStorage = this.packageJson.createStorage('config').createProxy();
428
400
  packageJsonConfigStorage.backend_port = application.gatewayServerPort || application.serverPort;
429
401
  packageJsonConfigStorage.packaging = application.defaultPackaging;
430
- packageJsonConfigStorage.default_environment = application.defaultEnvironment;
431
402
  },
432
403
  packageJsonBackendScripts({ application }) {
433
404
  const scriptsStorage = this.packageJson.createStorage('scripts');
@@ -631,12 +602,6 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator {
631
602
  throw new Error(`relationshipSide is missing in .jhipster/${entityName}.json for relationship ${stringifyApplicationData(relationship)}`);
632
603
  }
633
604
  }
634
- _fixEntityTableName(entityTableName, prodDatabaseType, jhiTablePrefix) {
635
- if (isReservedTableName(entityTableName, prodDatabaseType) && jhiTablePrefix) {
636
- entityTableName = `${jhiTablePrefix}_${entityTableName}`;
637
- }
638
- return entityTableName;
639
- }
640
605
  /**
641
606
  * @private
642
607
  * Return the method name which converts the filter to specification
@@ -13,7 +13,7 @@ LABEL ALIAS=consul-config-loader
13
13
  FROM postgres:16.2
14
14
  LABEL ALIAS=postgresql
15
15
 
16
- FROM quay.io/keycloak/keycloak:24.0.2
16
+ FROM quay.io/keycloak/keycloak:24.0.3
17
17
  LABEL ALIAS=keycloak
18
18
 
19
19
  FROM mysql:8.3.0
@@ -31,31 +31,31 @@ FROM cassandra:5.0
31
31
  FROM mcr.microsoft.com/mssql/server:2019-CU16-GDR1-ubuntu-20.04
32
32
  LABEL ALIAS=mssql
33
33
 
34
- FROM neo4j:5.18.1
34
+ FROM neo4j:5.19.0
35
35
 
36
- FROM hazelcast/management-center:5.3.3
36
+ FROM hazelcast/management-center:5.4.1
37
37
  LABEL ALIAS=hazelcast
38
38
 
39
39
  FROM memcached:1.6.26-alpine
40
40
 
41
41
  FROM redis:7.2.4
42
42
 
43
- FROM confluentinc/cp-kafka:7.6.0
43
+ FROM confluentinc/cp-kafka:7.6.1
44
44
  LABEL ALIAS=kafka
45
45
 
46
- FROM confluentinc/cp-zookeeper:7.6.0
46
+ FROM confluentinc/cp-zookeeper:7.6.1
47
47
  LABEL ALIAS=zookeeper
48
48
 
49
49
  FROM apachepulsar/pulsar:3.2.2
50
50
  LABEL ALIAS=pulsar
51
51
 
52
- FROM sonarqube:10.4.1-community
52
+ FROM sonarqube:10.5.0-community
53
53
  LABEL ALIAS=sonar
54
54
 
55
55
  FROM docker.io/bitnami/consul:1.18.1
56
56
  LABEL ALIAS=consul
57
57
 
58
- FROM prom/prometheus:v2.51.1
58
+ FROM prom/prometheus:v2.51.2
59
59
  LABEL ALIAS=prometheus
60
60
 
61
61
  FROM prom/alertmanager:v0.27.0
@@ -64,7 +64,7 @@ LABEL ALIAS=prometheus-alertmanager
64
64
  FROM quay.io/coreos/prometheus-operator:v0.42.1
65
65
  LABEL ALIAS=prometheus-operator
66
66
 
67
- FROM grafana/grafana:10.4.1
67
+ FROM grafana/grafana:10.4.2
68
68
  LABEL ALIAS=grafana
69
69
 
70
70
  FROM quay.io/coreos/grafana-watcher:v0.0.8
@@ -79,5 +79,5 @@ LABEL ALIAS=java-jre
79
79
  FROM swaggerapi/swagger-editor:latest
80
80
  LABEL ALIAS=swagger-editor
81
81
 
82
- FROM openzipkin/zipkin:3.1
82
+ FROM openzipkin/zipkin:3.3
83
83
  LABEL ALIAS=zipkin
@@ -6,10 +6,10 @@ springdoc = { module = 'org.springdoc:springdoc-openapi-starter-webmvc-api', ver
6
6
  feign-reactor-bom = { module = 'com.playtika.reactivefeign:feign-reactor-bom', version = '4.0.3' }
7
7
 
8
8
  # Cucumber
9
- testng = { module = 'org.testng:testng', version = '7.10.0' }
10
- cucumber-bom = { module = 'io.cucumber:cucumber-bom', version = '7.16.1' }
9
+ testng = { module = 'org.testng:testng', version = '7.10.2' }
10
+ cucumber-bom = { module = 'io.cucumber:cucumber-bom', version = '7.17.0' }
11
11
 
12
- mongock-bom = { module = 'io.mongock:mongock-bom', version = '5.4.1' }
12
+ mongock-bom = { module = 'io.mongock:mongock-bom', version = '5.4.2' }
13
13
 
14
14
  neo4j-migrations-spring-boot-starter = { module = 'eu.michael-simons.neo4j:neo4j-migrations-spring-boot-starter', version = '2.10.0' }
15
15
 
@@ -17,11 +17,11 @@ neo4j-migrations-spring-boot-starter = { module = 'eu.michael-simons.neo4j:neo4j
17
17
  lz4-java = { module = 'org.lz4:lz4-java', version = '1.8.0' }
18
18
 
19
19
  [plugins]
20
- gradle-git-properties = { id = 'com.gorylenko.gradle-git-properties', version = '2.4.1' }
20
+ gradle-git-properties = { id = 'com.gorylenko.gradle-git-properties', version = '2.4.2' }
21
21
 
22
22
  node-gradle = { id = 'com.github.node-gradle.node', version = '7.0.2' }
23
23
 
24
- gradle-liquibase = { id = 'org.liquibase.gradle', version = '2.2.1' }
24
+ gradle-liquibase = { id = 'org.liquibase.gradle', version = '2.2.2' }
25
25
 
26
26
  gradle-sonarqube = { id = 'org.sonarqube', version = '5.0.0.4638' }
27
27
 
@@ -29,8 +29,8 @@ spotless-gradle-plugin = { id = 'com.diffplug.spotless', version = '6.25.0' }
29
29
 
30
30
  gradle-modernizer-plugin = { id = 'com.github.andygoossens.gradle-modernizer-plugin', version = '1.9.2' }
31
31
 
32
- gradle-enterprise = { id = 'com.gradle.enterprise', version = '3.17' }
32
+ gradle-enterprise = { id = 'com.gradle.enterprise', version = '3.17.2' }
33
33
 
34
- common-custom-user-data-gradle-plugin = { id = 'com.gradle.common-custom-user-data-gradle-plugin', version = '2.0' }
34
+ common-custom-user-data-gradle-plugin = { id = 'com.gradle.common-custom-user-data-gradle-plugin', version = '2.0.1' }
35
35
 
36
- gatling-gradle = { id = 'io.gatling.gradle', version = '3.10.5.1' }
36
+ gatling-gradle = { id = 'io.gatling.gradle', version = '3.11.1' }
@@ -8,20 +8,20 @@
8
8
 
9
9
  <properties>
10
10
  <!-- Dependency versions -->
11
- <archunit-junit5.version>1.2.1</archunit-junit5.version>
12
- <blockhound-junit-platform.version>1.0.8.RELEASE</blockhound-junit-platform.version>
11
+ <archunit-junit5.version>1.3.0</archunit-junit5.version>
12
+ <blockhound-junit-platform.version>1.0.9.RELEASE</blockhound-junit-platform.version>
13
13
  <commons-beanutils.version>1.9.4</commons-beanutils.version>
14
- <gatling.version>3.10.5</gatling.version>
14
+ <gatling.version>3.11.1</gatling.version>
15
15
  <jackson-databind-nullable.version>0.2.6</jackson-databind-nullable.version>
16
16
  <mapstruct.version>1.5.5.Final</mapstruct.version>
17
17
  <micrometer-context-propagation.version>1.1.1</micrometer-context-propagation.version>
18
18
  <picocli.version>4.7.5</picocli.version>
19
19
 
20
20
  <!-- Plugin versions -->
21
- <checkstyle.version>10.15.0</checkstyle.version>
21
+ <checkstyle.version>10.16.0</checkstyle.version>
22
22
  <checksum-maven-plugin.version>1.11</checksum-maven-plugin.version>
23
23
  <frontend-maven-plugin.version>1.15.0</frontend-maven-plugin.version>
24
- <gatling-maven-plugin.version>4.8.2</gatling-maven-plugin.version>
24
+ <gatling-maven-plugin.version>4.9.0</gatling-maven-plugin.version>
25
25
  <git-commit-id-maven-plugin.version>8.0.2</git-commit-id-maven-plugin.version>
26
26
  <jib-maven-plugin.version>3.4.2</jib-maven-plugin.version>
27
27
  <lifecycle-mapping.version>1.0.0</lifecycle-mapping.version>
@@ -32,7 +32,7 @@
32
32
  <maven-compiler-plugin.version>3.13.0</maven-compiler-plugin.version>
33
33
  <maven-enforcer-plugin.version>3.4.1</maven-enforcer-plugin.version>
34
34
  <maven-failsafe-plugin.version>3.2.5</maven-failsafe-plugin.version>
35
- <maven-jar-plugin.version>3.3.0</maven-jar-plugin.version>
35
+ <maven-jar-plugin.version>3.4.1</maven-jar-plugin.version>
36
36
  <maven-javadoc-plugin.version>3.6.3</maven-javadoc-plugin.version>
37
37
  <maven-resources-plugin.version>3.3.1</maven-resources-plugin.version>
38
38
  <maven-site-plugin.version>3.12.1</maven-site-plugin.version>
@@ -40,7 +40,7 @@
40
40
  <maven-war-plugin.version>3.4.0</maven-war-plugin.version>
41
41
  <modernizer-maven-plugin.version>2.8.0</modernizer-maven-plugin.version>
42
42
  <nohttp-checkstyle.version>0.0.11</nohttp-checkstyle.version>
43
- <openapi-generator-maven-plugin.version>7.4.0</openapi-generator-maven-plugin.version>
43
+ <openapi-generator-maven-plugin.version>7.5.0</openapi-generator-maven-plugin.version>
44
44
  <properties-maven-plugin.version>1.2.1</properties-maven-plugin.version>
45
45
  <sonar-maven-plugin.version>3.11.0.3922</sonar-maven-plugin.version>
46
46
  <spotless-maven-plugin.version>2.43.0</spotless-maven-plugin.version>
@@ -22,6 +22,7 @@ import { databaseTypes, entityOptions, fieldTypes, reservedKeywords } from '../.
22
22
  import { getUXConstraintName } from './database.js';
23
23
  import { getJavaValueGeneratorForType } from './templates/field-values.js';
24
24
  import { formatDocAsApiDescription, formatDocAsJavaDoc } from '../../java/support/doc.js';
25
+ import { mutateData } from '../../base/support/config.js';
25
26
  const { isReservedTableName } = reservedKeywords;
26
27
  const { CommonDBTypes } = fieldTypes;
27
28
  const { MYSQL, SQL } = databaseTypes;
@@ -37,8 +38,12 @@ export default function prepareField(entityWithConfig, field, generator) {
37
38
  field.readonly = true;
38
39
  }
39
40
  if (field.documentation) {
40
- field.fieldJavadoc = formatDocAsJavaDoc(field.documentation, 4);
41
- field.fieldApiDescription = formatDocAsApiDescription(field.documentation);
41
+ mutateData(field, {
42
+ __override__: false,
43
+ fieldJavadoc: formatDocAsJavaDoc(field.documentation, 4),
44
+ fieldApiDescription: formatDocAsApiDescription(field.documentation),
45
+ propertyApiDescription: ({ fieldApiDescription }) => fieldApiDescription,
46
+ });
42
47
  }
43
48
  if (field.id && entityWithConfig.primaryKey) {
44
49
  if (field.autoGenerate === undefined) {
@@ -1,7 +1,12 @@
1
+ import { mutateData } from '../../base/support/config.js';
1
2
  import { formatDocAsApiDescription, formatDocAsJavaDoc } from '../../java/support/doc.js';
2
3
  export function prepareRelationship({ relationship }) {
3
4
  if (relationship.documentation) {
4
- relationship.relationshipJavadoc = formatDocAsJavaDoc(relationship.documentation, 4);
5
- relationship.relationshipApiDescription = formatDocAsApiDescription(relationship.documentation);
5
+ mutateData(relationship, {
6
+ __override__: false,
7
+ relationshipJavadoc: formatDocAsJavaDoc(relationship.documentation, 4),
8
+ relationshipApiDescription: formatDocAsApiDescription(relationship.documentation),
9
+ propertyApiDescription: ({ relationshipApiDescription }) => relationshipApiDescription,
10
+ });
6
11
  }
7
12
  }
@@ -167,14 +167,14 @@ processResources {
167
167
  }
168
168
  <%_ if (!serviceDiscoveryAny) { _%>
169
169
  filter {
170
- it.replace("#spring.profiles.active#", springProfiles)
170
+ it.replace("@spring.profiles.active@", springProfiles)
171
171
  }
172
172
  <%_ } _%>
173
173
  }
174
174
  <%_ if (serviceDiscoveryEureka || serviceDiscoveryConsul) { _%>
175
175
  filesMatching("**/bootstrap.yml") {
176
176
  filter {
177
- it.replace("#spring.profiles.active#", springProfiles)
177
+ it.replace("@spring.profiles.active@", springProfiles)
178
178
  }
179
179
  }
180
180
  <%_ } _%>
@@ -102,14 +102,14 @@ processResources {
102
102
  }
103
103
  <%_ if (!serviceDiscoveryAny) { _%>
104
104
  filter {
105
- it.replace("#spring.profiles.active#", springProfiles)
105
+ it.replace("@spring.profiles.active@", springProfiles)
106
106
  }
107
107
  <%_ } _%>
108
108
  }
109
109
  <%_ if (serviceDiscoveryEureka || serviceDiscoveryConsul) { _%>
110
110
  filesMatching("**/bootstrap.yml") {
111
111
  filter {
112
- it.replace("#spring.profiles.active#", springProfiles)
112
+ it.replace("@spring.profiles.active@", springProfiles)
113
113
  }
114
114
  }
115
115
  <%_ } _%>
@@ -501,10 +501,6 @@
501
501
  </goals>
502
502
  <configuration>
503
503
  <outputDirectory>${project.build.directory}/classes</outputDirectory>
504
- <useDefaultDelimiters>false</useDefaultDelimiters>
505
- <delimiters>
506
- <delimiter>#</delimiter>
507
- </delimiters>
508
504
  <resources>
509
505
  <resource>
510
506
  <directory><%= SERVER_MAIN_RES_DIR %></directory>
@@ -54,6 +54,10 @@ import tech.jhipster.web.filter.CookieCsrfFilter;
54
54
  <%_ if (!skipClient) { _%>
55
55
  import <%= packageName %>.web.filter.SpaWebFilter;
56
56
  <%_ } _%>
57
+ <%_ if (authenticationUsesCsrf && !applicationTypeMicroservice) { _%>
58
+ import jakarta.servlet.http.HttpServletRequest;
59
+ import jakarta.servlet.http.HttpServletResponse;
60
+ <%_ } _%>
57
61
  <%_ if (authenticationTypeJwt || (authenticationTypeOauth2 && applicationTypeMicroservice)) { _%>
58
62
  import org.springframework.security.config.http.SessionCreationPolicy;
59
63
  <%_ } _%>
@@ -84,6 +88,9 @@ import org.springframework.security.oauth2.core.oidc.user.OidcUserAuthority;
84
88
  <%_ } _%>
85
89
  import java.util.*;
86
90
  <%_ } _%>
91
+ <%_ if (authenticationUsesCsrf && !applicationTypeMicroservice) { _%>
92
+ import java.util.function.Supplier;
93
+ <%_ } _%>
87
94
  <%_ if (authenticationTypeSession) { _%>
88
95
  import org.springframework.http.HttpStatus;
89
96
  import org.springframework.security.web.authentication.HttpStatusEntryPoint;
@@ -94,8 +101,7 @@ import org.springframework.security.web.authentication.RememberMeServices;
94
101
  <%_ } _%>
95
102
  <%_ } _%>
96
103
  <%_ if (authenticationUsesCsrf && !applicationTypeMicroservice) { _%>
97
- import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
98
- import org.springframework.security.web.csrf.CsrfTokenRequestAttributeHandler;
104
+ import org.springframework.security.web.csrf.*;
99
105
  <%_ } _%>
100
106
  <%_ if (authenticationTypeOauth2) { _%>
101
107
  import <%= packageName %>.security.oauth2.JwtGrantedAuthorityConverter;
@@ -112,6 +118,9 @@ import <%= packageName %>.security.oauth2.CustomClaimConverter;
112
118
  <%_ if(!skipClient) { _%>
113
119
  import org.springframework.security.web.header.writers.ReferrerPolicyHeaderWriter;
114
120
  <%_ } _%>
121
+ <%_ if (authenticationUsesCsrf && !applicationTypeMicroservice) { _%>
122
+ import org.springframework.util.StringUtils;
123
+ <%_ } _%>
115
124
  import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher;
116
125
  import org.springframework.web.servlet.handler.HandlerMappingIntrospector;
117
126
 
@@ -126,7 +135,7 @@ public class SecurityConfiguration {
126
135
 
127
136
  private final Environment env;
128
137
  <%_ } _%>
129
-
138
+
130
139
  private final JHipsterProperties jHipsterProperties;
131
140
  <%_ if (authenticationTypeSession && generateUserManagement) { _%>
132
141
 
@@ -141,7 +150,7 @@ public class SecurityConfiguration {
141
150
  public SecurityConfiguration(<% if (devDatabaseTypeH2Any) { %>Environment env, <% } %><% if (authenticationTypeSession && generateUserManagement) { %>RememberMeServices rememberMeServices, <% } %> JHipsterProperties jHipsterProperties) {
142
151
  <%_ if (devDatabaseTypeH2Any) { _%>
143
152
  this.env = env;
144
- <%_ } _%>
153
+ <%_ } _%>
145
154
  <%_ if (authenticationTypeSession && generateUserManagement) { _%>
146
155
  this.rememberMeServices = rememberMeServices;
147
156
  <%_ } _%>
@@ -164,8 +173,7 @@ public class SecurityConfiguration {
164
173
  .csrf(csrf -> csrf
165
174
  <%_ if (authenticationUsesCsrf && !applicationTypeMicroservice) { _%>
166
175
  .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
167
- // See https://stackoverflow.com/q/74447118/65681
168
- .csrfTokenRequestHandler(new CsrfTokenRequestAttributeHandler()))
176
+ .csrfTokenRequestHandler(new SpaCsrfTokenRequestHandler()))
169
177
  <%_ } else { _%>
170
178
  .disable())
171
179
  <%_ } _%>
@@ -364,4 +372,46 @@ public class SecurityConfiguration {
364
372
  return jwtDecoder;
365
373
  }
366
374
  <%_ } _%>
375
+ <%_ if (authenticationUsesCsrf && !applicationTypeMicroservice) { _%>
376
+
377
+ /**
378
+ * Custom CSRF handler to provide BREACH protection.
379
+ *
380
+ * @see <a href="https://docs.spring.io/spring-security/reference/servlet/exploits/csrf.html#csrf-integration-javascript-spa">Spring Security Documentation - Integrating with CSRF Protection</a>
381
+ * @see <a href="https://github.com/jhipster/generator-jhipster/pull/25907">JHipster - use customized SpaCsrfTokenRequestHandler to handle CSRF token</a>
382
+ * @see <a href="https://stackoverflow.com/q/74447118/65681">CSRF protection not working with Spring Security 6</a>
383
+ */
384
+ static final class SpaCsrfTokenRequestHandler extends CsrfTokenRequestAttributeHandler {
385
+ private final CsrfTokenRequestHandler delegate = new XorCsrfTokenRequestAttributeHandler();
386
+
387
+ @Override
388
+ public void handle(HttpServletRequest request, HttpServletResponse response, Supplier<CsrfToken> csrfToken) {
389
+ /*
390
+ * Always use XorCsrfTokenRequestAttributeHandler to provide BREACH protection of
391
+ * the CsrfToken when it is rendered in the response body.
392
+ */
393
+ this.delegate.handle(request, response, csrfToken);
394
+ }
395
+
396
+ @Override
397
+ public String resolveCsrfTokenValue(HttpServletRequest request, CsrfToken csrfToken) {
398
+ /*
399
+ * If the request contains a request header, use CsrfTokenRequestAttributeHandler
400
+ * to resolve the CsrfToken. This applies when a single-page application includes
401
+ * the header value automatically, which was obtained via a cookie containing the
402
+ * raw CsrfToken.
403
+ */
404
+ if (StringUtils.hasText(request.getHeader(csrfToken.getHeaderName()))) {
405
+ return super.resolveCsrfTokenValue(request, csrfToken);
406
+ }
407
+ /*
408
+ * In all other cases (e.g. if the request contains a request parameter), use
409
+ * XorCsrfTokenRequestAttributeHandler to resolve the CsrfToken. This applies
410
+ * when a server-side rendered form includes the _csrf request parameter as a
411
+ * hidden input.
412
+ */
413
+ return this.delegate.resolveCsrfTokenValue(request, csrfToken);
414
+ }
415
+ }
416
+ <%_ } _%>
367
417
  }
@@ -245,7 +245,7 @@ spring:
245
245
  # The commented value for `active` can be replaced with valid Spring profiles to load.
246
246
  # Otherwise, it will be filled in by <%= buildTool %> when building the JAR file
247
247
  # Either way, it can be overridden by `--spring.profiles.active` value passed in the commandline or `-Dspring.profiles.active` set in `JAVA_OPTS`
248
- active: #spring.profiles.active#
248
+ active: '@spring.profiles.active@'
249
249
  group:
250
250
  dev:
251
251
  - dev
@@ -30,7 +30,7 @@ spring:
30
30
  # The commented value for `active` can be replaced with valid Spring profiles to load.
31
31
  # Otherwise, it will be filled in by <%= buildTool %> when building the JAR file
32
32
  # Either way, it can be overridden by `--spring.profiles.active` value passed in the commandline or `-Dspring.profiles.active` set in `JAVA_OPTS`
33
- active: #spring.profiles.active#
33
+ active: '@spring.profiles.active@'
34
34
  cloud:
35
35
  <%_ if (serviceDiscoveryConsul) { _%>
36
36
  consul:
@@ -72,9 +72,9 @@
72
72
  </head>
73
73
  <body>
74
74
  <div class="container">
75
- <h1>Welcome, Java Hipster!</h1>
75
+ <h1>Welcome, <%- hipsterName %>!</h1>
76
76
 
77
- <p>This application is a microservice, which has been generated using <a href="https://www.jhipster.tech/" rel="noopener noreferrer">JHipster</a>.</p>
77
+ <p>This application is a microservice, which has been generated using <a href="<%- hipsterDocumentationLink %>" rel="noopener noreferrer">JHipster</a>.</p>
78
78
 
79
79
  <ul>
80
80
  <%_ if (microfrontend) { %>
@@ -107,15 +107,15 @@
107
107
  </h2>
108
108
 
109
109
  <ul>
110
- <li><a href="https://www.jhipster.tech/" target="_blank" rel="noopener noreferrer">JHipster homepage</a></li>
111
- <li><a href="https://stackoverflow.com/tags/jhipster/info" target="_blank" rel="noopener noreferrer">JHipster on Stack Overflow</a></li>
112
- <li><a href="https://github.com/jhipster/generator-jhipster/issues?state=open" target="_blank" rel="noopener noreferrer">JHipster bug tracker</a></li>
113
- <li><a href="https://gitter.im/jhipster/generator-jhipster" target="_blank" rel="noopener noreferrer">JHipster public chat room</a></li>
114
- <li><a href="https://twitter.com/jhipster" target="_blank" rel="noopener noreferrer">follow @jhipster on Twitter</a></li>
110
+ <li><a href="<%- hipsterDocumentationLink %>" target="_blank" rel="noopener noreferrer">JHipster homepage</a></li>
111
+ <li><a href="<%- hipsterStackoverflowLink %>" target="_blank" rel="noopener noreferrer">JHipster on Stack Overflow</a></li>
112
+ <li><a href="<%- hipsterBugTrackerLink %>" target="_blank" rel="noopener noreferrer">JHipster bug tracker</a></li>
113
+ <li><a href="<%- hipsterChatLink %>" target="_blank" rel="noopener noreferrer">JHipster public chat room</a></li>
114
+ <li><a href="<%- hipsterTwitterLink %>" target="_blank" rel="noopener noreferrer">follow @jhipster on Twitter</a></li>
115
115
  </ul>
116
116
 
117
117
  <p>
118
- <span>If you like JHipster, don't forget to give us a star on</span> <a href="https://github.com/jhipster/generator-jhipster" target="_blank" rel="noopener noreferrer">GitHub</a>!
118
+ <span>If you like JHipster, don't forget to give us a star on</span> <a href="<%- hipsterProjectLink %>" target="_blank" rel="noopener noreferrer">GitHub</a>!
119
119
  </p>
120
120
 
121
121
  </div>
@@ -197,4 +197,7 @@ export default asWritingTask(function cleanupTask(taskParam) {
197
197
  this.removeFile('gradle/sonar.gradle');
198
198
  }
199
199
  }
200
+ if (this.isJhipsterVersionLessThan('8.4.0')) {
201
+ this.removeFile(`${application.javaPackageSrcDir}config/LocaleConfiguration.java`);
202
+ }
200
203
  });
@@ -35,7 +35,16 @@ const command = {
35
35
  message: 'Do you want to allow relationships with User entity?',
36
36
  when: ({ authenticationType }) => (authenticationType ?? gen.jhipsterConfigWithDefaults.authenticationType) === 'oauth2',
37
37
  }),
38
- default: false,
38
+ },
39
+ defaultPackaging: {
40
+ description: 'Default packaging for the application',
41
+ cli: {
42
+ type: String,
43
+ hide: true,
44
+ },
45
+ choices: ['jar', 'war'],
46
+ default: 'jar',
47
+ scope: 'storage',
39
48
  },
40
49
  },
41
50
  import: [GENERATOR_JAVA, GENERATOR_LIQUIBASE, GENERATOR_SPRING_DATA_RELATIONAL],
@@ -410,11 +410,6 @@ export const baseServerFiles = {
410
410
  renameTo: moveToJavaPackageSrcDir,
411
411
  templates: ['config/Constants.java'],
412
412
  },
413
- {
414
- path: `${SERVER_MAIN_SRC_DIR}_package_/`,
415
- renameTo: moveToJavaPackageSrcDir,
416
- templates: [data => `config/LocaleConfiguration_${data.imperativeOrReactive}.java`],
417
- },
418
413
  ],
419
414
  serverJavaDomain: [
420
415
  {
@@ -30,6 +30,7 @@ import { createNeedleCallback, mutateData } from '../base/support/index.js';
30
30
  import { APPLICATION_TYPE_MICROSERVICE, applicationTypes, cacheTypes, databaseTypes, fieldTypes, messageBrokerTypes, searchEngineTypes, testFrameworkTypes, websocketTypes, } from '../../jdl/index.js';
31
31
  import { writeFiles as writeEntityFiles } from './entity-files.js';
32
32
  import { getPomVersionProperties, parseMavenPom } from '../maven/support/index.js';
33
+ import { askForOptionalItems, askForServerSideOpts, askForServerTestOpts } from './prompts.js';
33
34
  const { CAFFEINE, EHCACHE, HAZELCAST, INFINISPAN, MEMCACHED, REDIS, NO: NO_CACHE } = cacheTypes;
34
35
  const { NO: NO_WEBSOCKET, SPRING_WEBSOCKET } = websocketTypes;
35
36
  const { CASSANDRA, COUCHBASE, MONGODB, NEO4J, SQL } = databaseTypes;
@@ -67,6 +68,9 @@ export default class SpringBootGenerator extends BaseApplicationGenerator {
67
68
  return;
68
69
  await this.promptCurrentJHipsterCommand();
69
70
  },
71
+ askForServerTestOpts,
72
+ askForServerSideOpts,
73
+ askForOptionalItems,
70
74
  });
71
75
  }
72
76
  get [BaseApplicationGenerator.PROMPTING]() {
@@ -163,6 +167,9 @@ export default class SpringBootGenerator extends BaseApplicationGenerator {
163
167
  }
164
168
  get preparing() {
165
169
  return this.asPreparingTaskGroup({
170
+ async loadCommand({ application }) {
171
+ await this.loadCurrentJHipsterCommandConfig(application);
172
+ },
166
173
  checksWebsocket({ application }) {
167
174
  const { websocket } = application;
168
175
  if (websocket && websocket !== NO_WEBSOCKET) {
@@ -284,6 +291,16 @@ public void set${javaBeanCase(propertyName)}(${propertyType} ${propertyName}) {
284
291
  }
285
292
  get preparingEachEntityRelationship() {
286
293
  return this.asPreparingEachEntityRelationshipTaskGroup({
294
+ checkUserRelationships({ entity, entityName, relationship }) {
295
+ if (!entity.dtoMapstruct && relationship.otherEntity.builtInUser) {
296
+ this.log.warn(`Entity ${entityName} doesn't use DTO. You should check for User data leakage through ${relationship.relationshipName} relationship.`);
297
+ }
298
+ },
299
+ checkDtoRelationships({ entity, entityName, relationship }) {
300
+ if (entity.dto !== relationship.otherEntity.dto) {
301
+ this.log.warn(`Relationship between entities with different DTO configurations can cause unexpected results. Check ${relationship.relationshipName} in the ${entityName} entity.`);
302
+ }
303
+ },
287
304
  prepareEntity({ relationship }) {
288
305
  if (relationship.otherEntity.embedded)
289
306
  return;