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