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.
- package/dist/generators/angular/generator.js +34 -0
- package/dist/generators/angular/resources/package.json +7 -7
- package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.component.html.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.html.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/account/settings/settings.component.html.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/update/user-management-update.component.html.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-form.service.ts.ejs +10 -6
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.html.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/home/home.component.html.ejs +6 -6
- package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.html.ejs +1 -1
- package/dist/generators/angular/templates/webpack/webpack.custom.js.ejs +1 -1
- package/dist/generators/app/generator.js +2 -20
- package/dist/generators/app/support/config.js +1 -3
- package/dist/generators/base-application/support/prepare-field.js +1 -1
- package/dist/generators/base-core/generator.js +5 -2
- package/dist/generators/base-entity-changes/generator.js +24 -0
- package/dist/generators/bootstrap-application-base/generator.js +42 -1
- package/dist/generators/bootstrap-application-server/generator.js +4 -7
- package/dist/generators/ci-cd/generator.js +0 -5
- package/dist/generators/client/generator.js +0 -22
- package/dist/generators/client/resources/package.json +6 -6
- package/dist/generators/client/templates/src/main/webapp/index.html.ejs +1 -1
- package/dist/generators/common/command.js +13 -0
- package/dist/generators/common/generator.js +12 -3
- package/dist/generators/common/resources/package.json +1 -1
- package/dist/generators/docker-compose/generator.js +1 -5
- package/dist/generators/export-jdl/generator.js +0 -5
- package/dist/generators/gatling/templates/buildSrc/src/main/groovy/jhipster.gatling-conventions.gradle.ejs +1 -1
- package/dist/generators/generate-blueprint/resources/package.json +1 -1
- package/dist/generators/generator-constants.js +1 -1
- package/dist/generators/heroku/generator.js +0 -5
- package/dist/generators/init/resources/.node-version +1 -1
- package/dist/generators/java/generators/domain/generator.js +16 -0
- package/dist/generators/jdl/generator.js +0 -4
- package/dist/generators/kubernetes/generator.js +0 -5
- package/dist/generators/kubernetes-helm/generator.js +0 -5
- package/dist/generators/kubernetes-knative/generator.js +0 -5
- package/dist/generators/languages/files.js +2 -2
- package/dist/generators/languages/generator.js +0 -6
- package/dist/generators/languages/templates/src/main/webapp/i18n/al/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/ar-ly/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/az-Latn-az/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/bg/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/bn/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/by/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/ca/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/cs/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/da/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/de/global.json.ejs +2 -2
- package/dist/generators/languages/templates/src/main/webapp/i18n/de/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/el/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/en/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/es/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/et/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/fa/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/fi/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/fr/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/gl/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/hi/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/hr/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/hu/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/hy/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/id/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/it/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/ja/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/ko/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/kr-Latn-kr/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/mr/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/my/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/nl/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/pa/{home.json → home.json.ejs} +2 -2
- package/dist/generators/languages/templates/src/main/webapp/i18n/pl/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/pt-br/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/pt-pt/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/ro/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/ru/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/si/{home.json → home.json.ejs} +6 -6
- package/dist/generators/languages/templates/src/main/webapp/i18n/sk/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/sr/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/sv/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/ta/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/te/{home.json → home.json.ejs} +1 -1
- package/dist/generators/languages/templates/src/main/webapp/i18n/th/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/tr/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/ua/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/uz-Cyrl-uz/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/uz-Latn-uz/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/vi/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/zh-cn/home.json.ejs +19 -0
- package/dist/generators/languages/templates/src/main/webapp/i18n/zh-tw/home.json.ejs +19 -0
- package/dist/generators/liquibase/generator.js +59 -12
- package/dist/generators/liquibase/support/prepare-field.js +16 -1
- package/dist/generators/liquibase/support/relationship.js +1 -0
- package/dist/generators/liquibase/templates/src/main/resources/config/liquibase/changelog/added_entity.xml.ejs +1 -1
- package/dist/generators/liquibase/templates/src/main/resources/config/liquibase/changelog/updated_entity.xml.ejs +3 -3
- package/dist/generators/liquibase/templates/src/main/resources/config/liquibase/changelog/updated_entity_constraints.xml.ejs +26 -1
- package/dist/generators/liquibase/templates/src/main/resources/config/liquibase/fake-data/table_entity.csv.ejs +3 -3
- package/dist/generators/react/resources/package.json +18 -18
- package/dist/generators/react/templates/src/main/webapp/app/modules/home/home.tsx.ejs +7 -7
- package/dist/generators/react/templates/webpack/webpack.microfrontend.js.jhi.react.ejs +0 -8
- package/dist/generators/server/generator.js +16 -51
- package/dist/generators/server/resources/Dockerfile +9 -9
- package/dist/generators/server/resources/gradle/libs.versions.toml +8 -8
- package/dist/generators/server/resources/pom.xml +7 -7
- package/dist/generators/server/support/prepare-field.js +7 -2
- package/dist/generators/server/support/prepare-relationship.js +7 -2
- package/dist/generators/server/templates/gradle/profile_dev.gradle.ejs +2 -2
- package/dist/generators/server/templates/gradle/profile_prod.gradle.ejs +2 -2
- package/dist/generators/server/templates/pom.xml.ejs +0 -4
- package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_imperative.java.ejs +56 -6
- package/dist/generators/server/templates/src/main/resources/config/application.yml.ejs +1 -1
- package/dist/generators/server/templates/src/main/resources/config/bootstrap.yml.ejs +1 -1
- package/dist/generators/server/templates/src/main/resources/static/index_microservices.html.ejs +8 -8
- package/dist/generators/spring-boot/cleanup.js +3 -0
- package/dist/generators/spring-boot/command.js +10 -1
- package/dist/generators/spring-boot/files.js +0 -5
- package/dist/generators/spring-boot/generator.js +17 -0
- package/dist/generators/{server → spring-boot}/prompts.js +2 -2
- package/dist/generators/spring-boot/resources/spring-boot-dependencies.pom +111 -111
- package/dist/generators/spring-cache/resources/gradle/libs.versions.toml +2 -2
- package/dist/generators/spring-cache/templates/src/main/java/_package_/config/CacheConfiguration.java.ejs +4 -0
- package/dist/generators/{app/prompts.js → spring-data-relational/support/h2-reserved-keywords.js} +4 -15
- package/dist/generators/upgrade/generator.js +0 -4
- package/dist/generators/vue/resources/package.json +14 -14
- package/dist/generators/vue/templates/src/main/webapp/app/account/change-password/change-password.vue.ejs +1 -1
- package/dist/generators/vue/templates/src/main/webapp/app/account/login-form/login-form.vue.ejs +1 -1
- package/dist/generators/vue/templates/src/main/webapp/app/account/register/register.vue.ejs +1 -1
- package/dist/generators/vue/templates/src/main/webapp/app/account/reset-password/finish/reset-password-finish.vue.ejs +1 -1
- package/dist/generators/vue/templates/src/main/webapp/app/account/reset-password/init/reset-password-init.vue.ejs +1 -1
- package/dist/generators/vue/templates/src/main/webapp/app/account/settings/settings.vue.ejs +1 -1
- package/dist/generators/vue/templates/src/main/webapp/app/admin/user-management/user-management-edit.vue.ejs +1 -1
- package/dist/generators/vue/templates/src/main/webapp/app/core/home/home.vue.ejs +7 -7
- package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.vue.ejs +1 -1
- package/dist/generators/vue/templates/vitest.config.mts.ejs +1 -1
- package/dist/generators/vue/templates/webpack/webpack.microfrontend.js.jhi.vue.ejs +0 -9
- package/dist/types/generators/base/api.d.ts +1 -1
- package/dist/types/generators/base-application/types.d.ts +15 -0
- package/dist/types/generators/base-entity-changes/types.d.ts +2 -0
- package/dist/types/generators/generator-constants.d.ts +1 -1
- package/dist/types/generators/spring-data-relational/support/h2-reserved-keywords.d.ts +20 -0
- package/package.json +10 -11
- package/dist/generators/languages/templates/src/main/webapp/i18n/al/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/ar-ly/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/az-Latn-az/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/bg/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/bn/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/by/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/ca/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/cs/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/da/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/de/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/el/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/en/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/es/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/et/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/fa/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/fi/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/fr/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/gl/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/hi/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/hr/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/hu/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/hy/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/id/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/it/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/ja/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/ko/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/kr-Latn-kr/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/mr/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/my/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/nl/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/pl/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/pt-br/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/pt-pt/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/ro/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/ru/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/sk/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/sr/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/sv/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/ta/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/th/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/tr/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/ua/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/uz-Cyrl-uz/global.json +0 -148
- package/dist/generators/languages/templates/src/main/webapp/i18n/uz-Cyrl-uz/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/uz-Latn-uz/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/vi/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/zh-cn/home.json +0 -19
- package/dist/generators/languages/templates/src/main/webapp/i18n/zh-tw/home.json +0 -19
- package/dist/generators/server/templates/src/main/java/_package_/config/LocaleConfiguration_imperative.java.ejs +0 -43
- package/dist/generators/server/templates/src/main/java/_package_/config/LocaleConfiguration_reactive.java.ejs +0 -184
- 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 {
|
|
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.
|
|
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 =
|
|
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.
|
|
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.
|
|
34
|
+
FROM neo4j:5.19.0
|
|
35
35
|
|
|
36
|
-
FROM hazelcast/management-center:5.
|
|
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.
|
|
43
|
+
FROM confluentinc/cp-kafka:7.6.1
|
|
44
44
|
LABEL ALIAS=kafka
|
|
45
45
|
|
|
46
|
-
FROM confluentinc/cp-zookeeper:7.6.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
10
|
-
cucumber-bom = { module = 'io.cucumber:cucumber-bom', version = '7.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
12
|
-
<blockhound-junit-platform.version>1.0.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
41
|
-
|
|
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
|
-
|
|
5
|
-
|
|
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("
|
|
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("
|
|
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("
|
|
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("
|
|
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
|
|
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
|
-
|
|
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:
|
|
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:
|
|
33
|
+
active: '@spring.profiles.active@'
|
|
34
34
|
cloud:
|
|
35
35
|
<%_ if (serviceDiscoveryConsul) { _%>
|
|
36
36
|
consul:
|
package/dist/generators/server/templates/src/main/resources/static/index_microservices.html.ejs
CHANGED
|
@@ -72,9 +72,9 @@
|
|
|
72
72
|
</head>
|
|
73
73
|
<body>
|
|
74
74
|
<div class="container">
|
|
75
|
-
<h1>Welcome,
|
|
75
|
+
<h1>Welcome, <%- hipsterName %>!</h1>
|
|
76
76
|
|
|
77
|
-
<p>This application is a microservice, which has been generated using <a href="
|
|
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="
|
|
111
|
-
<li><a href="
|
|
112
|
-
<li><a href="
|
|
113
|
-
<li><a href="
|
|
114
|
-
<li><a href="
|
|
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="
|
|
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
|
-
|
|
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;
|