generator-jhipster 7.4.1 → 7.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/generators/app/index.js +11 -1
  2. package/generators/cleanup.js +27 -171
  3. package/generators/client/files-angular.js +6 -1
  4. package/generators/client/files-vue.js +5 -1
  5. package/generators/client/index.js +2 -1
  6. package/generators/client/templates/angular/angular.json.ejs +5 -0
  7. package/generators/client/templates/angular/jest.conf.js.ejs +2 -0
  8. package/generators/client/templates/angular/package.json +24 -24
  9. package/generators/client/templates/angular/package.json.ejs +3 -1
  10. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.ts.ejs +4 -4
  11. package/generators/client/templates/angular/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.ts.ejs +1 -1
  12. package/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.ts.ejs +4 -4
  13. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs +4 -4
  14. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.spec.ts.ejs +10 -9
  15. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.ts.ejs +1 -1
  16. package/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.spec.ts.ejs +8 -6
  17. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.ts.ejs +4 -4
  18. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.spec.ts.ejs +4 -4
  19. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.ts.ejs +4 -4
  20. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.ts.ejs +8 -8
  21. package/generators/client/templates/angular/src/main/webapp/app/app-routing.module.ts.ejs +14 -3
  22. package/generators/client/templates/angular/src/main/webapp/app/app.module.ts.ejs +8 -29
  23. package/generators/client/templates/angular/src/main/webapp/app/config/datepicker-adapter.ts.ejs +1 -1
  24. package/generators/client/templates/angular/src/main/webapp/app/config/dayjs.ts.ejs +4 -4
  25. package/generators/client/templates/angular/src/main/webapp/app/core/auth/account.service.spec.ts.ejs +14 -9
  26. package/generators/client/templates/angular/src/main/webapp/app/core/tracker/tracker.service.ts.ejs +6 -6
  27. package/generators/client/templates/angular/src/main/webapp/app/core/util/parse-links.service.ts.ejs +1 -1
  28. package/generators/client/templates/angular/src/main/webapp/app/entities/entity-navbar-items.ts.ejs +29 -0
  29. package/generators/client/templates/angular/src/main/webapp/app/home/home.component.spec.ts.ejs +14 -4
  30. package/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.ts.ejs +1 -1
  31. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +20 -0
  32. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts.ejs +10 -4
  33. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.ts.ejs +41 -2
  34. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.spec.ts.ejs +3 -2
  35. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.ts.ejs +4 -4
  36. package/generators/client/templates/angular/src/main/webapp/app/shared/auth/has-any-authority.directive.spec.ts.ejs +4 -4
  37. package/generators/client/templates/angular/src/main/webapp/app/shared/date/duration.pipe.ts.ejs +1 -1
  38. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-date.pipe.spec.ts.ejs +1 -1
  39. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-date.pipe.ts.ejs +1 -1
  40. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-datetime.pipe.spec.ts.ejs +1 -1
  41. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-datetime.pipe.ts.ejs +1 -1
  42. package/generators/client/templates/angular/src/main/webapp/app/shared/language/translate.directive.ts.ejs +6 -6
  43. package/generators/client/templates/angular/src/main/webapp/app/shared/language/translation.module.ts.ejs +83 -0
  44. package/generators/client/templates/angular/src/main/webapp/declarations.d.ts.ejs +16 -2
  45. package/generators/client/templates/angular/tsconfig.json.ejs +2 -0
  46. package/generators/client/templates/angular/tsconfig.spec.json.ejs +0 -1
  47. package/generators/client/templates/angular/webpack/proxy.conf.js.ejs +0 -2
  48. package/generators/client/templates/angular/webpack/webpack.custom.js.ejs +0 -16
  49. package/generators/client/templates/angular/webpack/webpack.microfrontend.js.ejs +12 -5
  50. package/generators/client/templates/common/package.json +2 -2
  51. package/generators/client/templates/common/src/main/webapp/robots.txt.ejs +0 -1
  52. package/generators/client/templates/common/src/main/webapp/swagger-ui/index.html.ejs +86 -56
  53. package/generators/client/templates/react/package.json +27 -27
  54. package/generators/client/templates/react/package.json.ejs +2 -0
  55. package/generators/client/templates/react/src/main/webapp/app/config/axios-interceptor.spec.ts.ejs +3 -2
  56. package/generators/client/templates/react/src/main/webapp/app/shared/layout/header/header.scss.ejs +9 -0
  57. package/generators/client/templates/react/src/main/webapp/app/shared/layout/header/header.tsx.ejs +1 -1
  58. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/authentication.spec.ts.ejs +1 -1
  59. package/generators/client/templates/react/webpack/webpack.dev.js.ejs +0 -2
  60. package/generators/client/templates/vue/package.json +22 -22
  61. package/generators/client/templates/vue/package.json.ejs +3 -3
  62. package/generators/client/templates/vue/src/main/webapp/app/account/account.service.ts.ejs +19 -9
  63. package/generators/client/templates/vue/src/main/webapp/app/entities/entities.component.ts.ejs +6 -0
  64. package/generators/client/templates/vue/src/main/webapp/app/entities/user/{user.oauth2.service.ts.ejs → user.service.ts.ejs} +1 -1
  65. package/generators/client/templates/vue/src/main/webapp/app/main.ts.ejs +0 -8
  66. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/user-management/user-management-edit.component.spec.ts.ejs +4 -4
  67. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts.ejs +2 -2
  68. package/generators/client/templates/vue/webpack/webpack.common.js.ejs +0 -2
  69. package/generators/common/templates/README.md.jhi.ejs +1 -3
  70. package/generators/common/templates/package.json +3 -3
  71. package/generators/cypress/templates/cypress.json.ejs +9 -2
  72. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/login-page.spec.ts.ejs +3 -14
  73. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/password-page.spec.ts.ejs +33 -39
  74. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/register-page.spec.ts.ejs +52 -62
  75. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/reset-password-page.spec.ts.ejs +2 -10
  76. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/settings-page.spec.ts.ejs +25 -34
  77. package/generators/cypress/templates/src/test/javascript/cypress/integration/administration/administration.spec.ts.ejs +1 -22
  78. package/generators/cypress/templates/src/test/javascript/cypress/support/commands.ts.ejs +38 -6
  79. package/generators/cypress/templates/src/test/javascript/cypress/support/index.ts.ejs +1 -6
  80. package/generators/cypress/templates/src/test/javascript/cypress/support/navbar.ts.ejs +7 -7
  81. package/generators/cypress/templates/src/test/javascript/cypress/support/oauth2.ts.ejs +0 -9
  82. package/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +1 -1
  83. package/generators/entity/index.js +45 -3
  84. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/delete/entity-management-delete-dialog.component.spec.ts.ejs +1 -1
  85. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.html.ejs +1 -1
  86. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs +1 -35
  87. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.model.ts.ejs +1 -1
  88. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.html.ejs +4 -4
  89. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.spec.ts.ejs +8 -8
  90. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.ts.ejs +1 -1
  91. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/infinite-scroll-template.ejs +8 -8
  92. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/no-pagination-template.ejs +8 -8
  93. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/pagination-template.ejs +8 -8
  94. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/route/entity-management-routing-resolve.service.spec.ts.ejs +15 -6
  95. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.spec.ts.ejs +1 -1
  96. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.ts.ejs +1 -1
  97. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.spec.ts.ejs +12 -5
  98. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.ts.ejs +5 -5
  99. package/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs +1 -1
  100. package/generators/entity-client/templates/common/src/test/javascript/cypress/integration/entity/entity.spec.ts.ejs +14 -37
  101. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.reducer.ts.ejs +5 -4
  102. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity-update.component.ts.ejs +23 -19
  103. package/generators/entity-client/templates/vue/src/test/javascript/spec/app/entities/entity-update.component.spec.ts.ejs +4 -6
  104. package/generators/entity-server/files.js +10 -0
  105. package/generators/entity-server/templates/src/main/java/package/common/get_all_template.ejs +2 -2
  106. package/generators/entity-server/templates/src/main/java/package/common/search_template.ejs +1 -1
  107. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.ejs +5 -8
  108. package/generators/entity-server/templates/src/main/java/package/repository/search/EntitySearchRepository.java.ejs +18 -2
  109. package/generators/entity-server/templates/src/main/java/package/repository/search/SortToFieldSortBuilderConverter.java.ejs +24 -0
  110. package/generators/entity-server/templates/src/main/java/package/service/dto/EntityDTO.java.ejs +4 -6
  111. package/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs +2 -2
  112. package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +2 -2
  113. package/generators/generator-base-private.js +2 -1
  114. package/generators/generator-base.js +13 -3
  115. package/generators/generator-constants.js +7 -7
  116. package/generators/server/__snapshots__/generator.spec.mjs.snap +16 -15
  117. package/generators/server/cleanup.js +151 -0
  118. package/generators/server/files.js +16 -14
  119. package/generators/server/index.js +34 -23
  120. package/generators/server/templates/build.gradle.ejs +214 -188
  121. package/generators/server/templates/gradle.properties.ejs +8 -8
  122. package/generators/server/templates/npmw +7 -5
  123. package/generators/server/templates/npmw.cmd +12 -7
  124. package/generators/server/templates/pom.xml.ejs +419 -329
  125. package/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +2 -2
  126. package/generators/server/templates/src/main/java/package/config/LocaleConfiguration.java.ejs +3 -2
  127. package/generators/server/templates/src/main/java/package/config/OpenApiConfiguration.java.ejs +17 -54
  128. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs +5 -5
  129. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration_reactive.java.ejs +3 -5
  130. package/generators/server/templates/src/main/java/package/config/WebConfigurer.java.ejs +0 -2
  131. package/generators/server/templates/src/main/java/package/config/neo4j/Neo4jMigrations.java.ejs +19 -9
  132. package/generators/server/templates/src/main/java/package/repository/AuthorityRepository.java.ejs +2 -2
  133. package/generators/server/templates/src/main/java/package/repository/UserRepository.java.ejs +0 -2
  134. package/generators/server/templates/src/main/java/package/security/jwt/TokenProvider.java.ejs +6 -4
  135. package/generators/server/templates/src/main/java/package/security/oauth2/CustomClaimConverter.java.ejs +2 -2
  136. package/generators/server/templates/src/main/java/package/service/UserService.java.ejs +3 -3
  137. package/generators/server/templates/src/main/java/package/service/dto/UserDTO.java.ejs +6 -6
  138. package/generators/server/templates/src/main/java/package/web/filter/ModifyServersOpenApiFilter.java.ejs +3 -2
  139. package/generators/server/templates/src/main/java/package/web/filter/SpaWebFilter.java.ejs +1 -1
  140. package/generators/server/templates/src/main/java/package/web/rest/PublicUserResource.java.ejs +2 -2
  141. package/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs +2 -2
  142. package/generators/server/templates/src/main/resources/config/application.yml.ejs +17 -3
  143. package/generators/server/templates/src/main/resources/logback-spring.xml.ejs +1 -2
  144. package/generators/server/templates/src/test/java/package/cucumber/CucumberIT.java.ejs +2 -6
  145. package/generators/server/templates/src/test/java/package/cucumber/CucumberTestContextConfiguration.java.ejs +2 -3
  146. package/generators/server/templates/src/test/java/package/cucumber/stepdefs/UserStepDefs.java.ejs +41 -6
  147. package/generators/server/templates/src/test/java/package/management/SecurityMetersServiceTests.java.ejs +7 -7
  148. package/generators/server/templates/src/test/java/package/security/jwt/TokenProviderSecurityMetersTests.java.ejs +10 -10
  149. package/generators/server/templates/src/test/java/package/security/oauth2/AuthorizationHeaderUtilTest.java.ejs +1 -1
  150. package/generators/server/templates/src/test/java/package/service/MailServiceIT.java.ejs +1 -1
  151. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs +2 -3
  152. package/generators/server/templates/src/test/java/package/web/rest/ClientForwardControllerTest.java.ejs +9 -0
  153. package/generators/server/templates/src/test/resources/junit-platform.properties.ejs +2 -0
  154. package/generators/server/templates/src/test/resources/logback.xml.ejs +1 -1
  155. package/generators/server/templates/src/test/{features → resources/package/features}/gitkeep +0 -0
  156. package/generators/server/templates/src/test/{features → resources/package/features}/user/user.feature.ejs +0 -0
  157. package/generators/spring-controller/templates/src/test/java/package/web/rest/ResourceIT.java.ejs +1 -1
  158. package/package.json +9 -9
  159. package/utils/entity.js +1 -5
  160. package/generators/server/templates/src/main/java/package/config/apidocs/GatewaySwaggerResourcesProvider.java.ejs +0 -91
  161. package/generators/server/templates/src/test/java/package/config/apidocs/GatewaySwaggerResourcesProviderTest.java.ejs +0 -79
  162. package/generators/server/templates/src/test/resources/cucumber.properties.ejs +0 -1
@@ -7,39 +7,39 @@
7
7
  "bootstrap": "4.6.1",
8
8
  "bootstrap-vue": "2.21.2",
9
9
  "bootswatch": "5.1.3",
10
- "swagger-ui-dist": "4.1.2",
10
+ "swagger-ui-dist": "4.1.3",
11
11
  "vue": "2.6.14",
12
12
  "vue-class-component": "7.2.6",
13
13
  "vue-cookie": "1.1.4",
14
14
  "vue-infinite-loading": "2.4.5",
15
15
  "vue-router": "3.5.3",
16
- "vue-i18n": "8.26.7",
16
+ "vue-i18n": "8.26.8",
17
17
  "vue-property-decorator": "9.1.2",
18
- "vuelidate": "0.7.6",
18
+ "vuelidate": "0.7.7",
19
19
  "vuex": "3.6.2",
20
- "vue2-filters": "0.13.0"
20
+ "vue2-filters": "0.14.0"
21
21
  },
22
22
  "devDependencies": {
23
- "@types/jest": "27.0.3",
24
- "@types/node": "16.11.11",
23
+ "@types/jest": "27.4.0",
24
+ "@types/node": "16.11.17",
25
25
  "@types/sinon": "10.0.6",
26
26
  "@types/vuelidate": "0.7.15",
27
- "@typescript-eslint/eslint-plugin": "5.5.0",
28
- "@typescript-eslint/parser": "5.5.0",
27
+ "@typescript-eslint/eslint-plugin": "5.8.1",
28
+ "@typescript-eslint/parser": "5.8.1",
29
29
  "@vue/eslint-config-prettier": "6.0.0",
30
30
  "@vue/eslint-config-typescript": "9.1.0",
31
31
  "@vue/vue2-jest": "27.0.0-alpha.3",
32
32
  "@vue/test-utils": "1.3.0",
33
33
  "axios-mock-adapter": "1.20.0",
34
- "autoprefixer": "10.4.0",
34
+ "autoprefixer": "10.4.1",
35
35
  "browser-sync-webpack-plugin": "2.3.0",
36
- "copy-webpack-plugin": "10.0.0",
36
+ "copy-webpack-plugin": "10.2.0",
37
37
  "css-loader": "6.5.1",
38
- "css-minimizer-webpack-plugin": "3.2.0",
38
+ "css-minimizer-webpack-plugin": "3.3.1",
39
39
  "folder-hash": "4.0.1",
40
40
  "fork-ts-checker-webpack-plugin": "6.5.0",
41
41
  "html-webpack-plugin": "5.5.0",
42
- "jest": "27.4.3",
42
+ "jest": "27.4.5",
43
43
  "jest-junit": "13.0.0",
44
44
  "jest-serializer-vue": "2.0.2",
45
45
  "jest-sonar-reporter": "2.0.0",
@@ -51,22 +51,22 @@
51
51
  "postcss-loader": "6.2.1",
52
52
  "postcss-url": "10.1.3",
53
53
  "rimraf": "3.0.2",
54
- "sass": "1.44.0",
55
- "sass-loader": "12.3.0",
54
+ "sass": "1.45.2",
55
+ "sass-loader": "12.4.0",
56
56
  "sinon": "12.0.1",
57
- "terser-webpack-plugin": "5.2.5",
58
- "ts-jest": "27.0.7",
57
+ "terser-webpack-plugin": "5.3.0",
58
+ "ts-jest": "27.1.2",
59
59
  "ts-loader": "9.2.6",
60
- "eslint": "8.3.0",
60
+ "eslint": "8.5.0",
61
61
  "eslint-plugin-prettier": "3.4.1",
62
- "eslint-plugin-vue": "8.1.1",
63
- "typescript": "4.5.2",
64
- "webpack": "5.64.4",
62
+ "eslint-plugin-vue": "8.2.0",
63
+ "typescript": "4.5.4",
64
+ "webpack": "5.65.0",
65
65
  "webpack-bundle-analyzer": "4.5.0",
66
66
  "webpack-cli": "4.9.1",
67
- "webpack-dev-server": "4.6.0",
67
+ "webpack-dev-server": "4.7.2",
68
68
  "webpack-merge": "5.8.0",
69
- "workbox-webpack-plugin": "6.4.1",
69
+ "workbox-webpack-plugin": "6.4.2",
70
70
  "vue-jest": "3.0.7",
71
71
  "vue-loader": "15.9.8"
72
72
  }
@@ -183,9 +183,9 @@
183
183
  "test:watch": "<%= clientPackageManager %> run jest -- --watch",
184
184
  "watch": "concurrently npm:start<% if(!skipServer) { %> npm:backend:start<% } %>",
185
185
  "webapp:build": "<%= clientPackageManager %> run clean-www && <%= clientPackageManager %> run webapp:build:dev --",
186
- "webapp:build:dev": "<%= clientPackageManager %> run webpack -- --mode development --progress=profile --env stats=minimal",
187
- "webapp:build:prod": "<%= clientPackageManager %> run webpack -- --mode production --progress=profile --env stats=minimal",
188
- "webapp:dev": "<%= clientPackageManager %> run webpack-dev-server -- --mode development --progress=profile --env stats=normal",
186
+ "webapp:build:dev": "<%= clientPackageManager %> run webpack -- --mode development --env stats=minimal",
187
+ "webapp:build:prod": "<%= clientPackageManager %> run webpack -- --mode production --env stats=minimal",
188
+ "webapp:dev": "<%= clientPackageManager %> run webpack-dev-server -- --mode development --env stats=normal",
189
189
  "webapp:prod": "<%= clientPackageManager %> run clean-www && <%= clientPackageManager %> run webapp:build:prod --",
190
190
  "webapp:test": "<%= clientPackageManager %> run test --",
191
191
  "webpack-dev-server": "webpack serve --config webpack/webpack.common.js",
@@ -89,18 +89,17 @@ export default class AccountService {
89
89
  if (!this.authenticated || !this.userAuthorities) {
90
90
  const token = <%_ if (authenticationTypeJwt) { _%> localStorage.getItem('<%=jhiPrefixDashed %>-authenticationToken') || sessionStorage.getItem('<%=jhiPrefixDashed %>-authenticationToken'); <%_ } else { _%> this.cookie.get('JSESSIONID') || this.cookie.get('XSRF-TOKEN'); <%_ } _%>
91
91
  if (!this.store.getters.account && !this.store.getters.logon && token) {
92
- return this.retrieveAccount();
92
+ return this.retrieveAccount().then(resp => {
93
+ if (resp) {
94
+ return this.checkAuthorities(authorities);
95
+ }
96
+ return Promise.resolve(false);
97
+ });
93
98
  }
94
99
  return Promise.resolve(false);
95
100
  }
96
101
 
97
- for (const authority of authorities) {
98
- if (this.userAuthorities.includes(authority)) {
99
- return Promise.resolve(true);
100
- }
101
- }
102
-
103
- return Promise.resolve(false);
102
+ return this.checkAuthorities(authorities);
104
103
  }
105
104
 
106
105
  public get authenticated(): boolean {
@@ -108,6 +107,17 @@ export default class AccountService {
108
107
  }
109
108
 
110
109
  public get userAuthorities(): any {
111
- return this.store.getters.account.authorities;
110
+ return this.store.getters.account?.authorities;
111
+ }
112
+
113
+ private checkAuthorities(authorities: any): Promise<boolean> {
114
+ if (this.userAuthorities) {
115
+ for (const authority of authorities) {
116
+ if (this.userAuthorities.includes(authority)) {
117
+ return Promise.resolve(true);
118
+ }
119
+ }
120
+ }
121
+ return Promise.resolve(false);
112
122
  }
113
123
  }
@@ -1,5 +1,8 @@
1
1
  import { Component, Provide, Vue } from 'vue-property-decorator';
2
2
 
3
+ <%_ if (!skipUserManagement || authenticationTypeOauth2) { %>
4
+ import UserService from '@/entities/user/user.service';
5
+ <%_ } _%>
3
6
  <%_ for (entity of this.localEntities.filter(entity => !entity.embedded)) { _%>
4
7
  import <%= entity.entityAngularName %>Service from './<%= entity.entityFolderName %>/<%= entity.entityFileName %>.service';
5
8
  <%_ } _%>
@@ -7,6 +10,9 @@ import <%= entity.entityAngularName %>Service from './<%= entity.entityFolderNam
7
10
 
8
11
  @Component
9
12
  export default class Entities extends Vue {
13
+ <%_ if (!skipUserManagement || authenticationTypeOauth2) { %>
14
+ @Provide('userService') private userService = () => new UserService();
15
+ <%_ } _%>
10
16
  <%_ for (entity of this.localEntities.filter(entity => !entity.embedded)) { _%>
11
17
  @Provide('<%= entity.entityInstance %>Service') private <%= entity.entityInstance %>Service = () => new <%= entity.entityAngularName %>Service();
12
18
  <%_ } _%>
@@ -2,7 +2,7 @@ import axios from 'axios';
2
2
 
3
3
  const baseApiUrl = 'api/users';
4
4
 
5
- export default class UserOAuth2Service {
5
+ export default class UserService {
6
6
  public retrieve(): Promise<any> {
7
7
  return new Promise<any>((resolve, reject) => {
8
8
  axios
@@ -20,7 +20,6 @@ import ConfigurationService from '@/admin/configuration/configuration.service';
20
20
  <%_ if (!skipUserManagement) { _%>
21
21
  import ActivateService from './account/activate/activate.service';
22
22
  import RegisterService from './account/register/register.service';
23
- import UserManagementService from '@/admin/user-management/user-management.service';
24
23
  <%_ } _%>
25
24
  import LoginService from './account/login.service';
26
25
  import AccountService from './account/account.service';
@@ -37,9 +36,6 @@ import GatewayService from '@/admin/gateway/gateway.service';
37
36
  <%_ if (communicationSpringWebsocket) { _%>
38
37
  import TrackerService from './admin/tracker/tracker.service';
39
38
  <%_ } _%>
40
- <%_ if (!skipUserManagement || authenticationTypeOauth2) { %>
41
- import UserOAuth2Service from '@/entities/user/user.oauth2.service';
42
- <%_ } _%>
43
39
  /* tslint:disable */
44
40
 
45
41
  // jhipster-needle-add-entity-service-to-main-import - JHipster will import entities services here
@@ -106,7 +102,6 @@ new Vue({
106
102
  <%_ if (!skipUserManagement) { _%>
107
103
  activateService: () => new ActivateService(),
108
104
  registerService: () => new RegisterService(),
109
- userService: () => new UserManagementService(),
110
105
  <%_ } _%>
111
106
  <%_ if (applicationTypeGateway && serviceDiscoveryType) { %>
112
107
  gatewayService: () => new GatewayService(),
@@ -120,9 +115,6 @@ new Vue({
120
115
  <%_ if (communicationSpringWebsocket) { _%>
121
116
  trackerService: () => trackerService,
122
117
  <%_ } %>
123
- <%_ if (!skipUserManagement || authenticationTypeOauth2) { %>
124
- userOAuth2Service: () => new UserOAuth2Service(),
125
- <%_ } _%>
126
118
  <%_ if (enableTranslation) { _%>
127
119
  translationService: () => translationService,
128
120
  <%_ } _%>
@@ -87,8 +87,8 @@ describe('UserManagementEdit Component', () => {
87
87
  // GIVEN
88
88
  axiosStub.put.resolves({
89
89
  headers: {
90
- 'x-jhipsterapp-alert': '',
91
- 'x-jhipsterapp-params': '',
90
+ 'x-<%= frontendAppName.toLowerCase() %>-alert': '',
91
+ 'x-<%= frontendAppName.toLowerCase() %>-params': '',
92
92
  },
93
93
  });
94
94
  userManagementEdit.userAccount = { id: <%- tsKeyId %>, authorities: [] };
@@ -106,8 +106,8 @@ describe('UserManagementEdit Component', () => {
106
106
  // GIVEN
107
107
  axiosStub.post.resolves({
108
108
  headers: {
109
- 'x-jhipsterapp-alert': '',
110
- 'x-jhipsterapp-params': '',
109
+ 'x-<%= frontendAppName.toLowerCase() %>-alert': '',
110
+ 'x-<%= frontendAppName.toLowerCase() %>-params': '',
111
111
  },
112
112
  });
113
113
  userManagementEdit.userAccount = { authorities: [] };
@@ -98,8 +98,8 @@ describe('UserManagement Component', () => {
98
98
  // GIVEN
99
99
  axiosStub.delete.resolves({
100
100
  headers: {
101
- 'x-jhipsterapp-alert': '',
102
- 'x-jhipsterapp-params': '',
101
+ 'x-<%= frontendAppName.toLowerCase() %>-alert': '',
102
+ 'x-<%= frontendAppName.toLowerCase() %>-params': '',
103
103
  },
104
104
  });
105
105
 
@@ -63,8 +63,6 @@ module.exports = async (env, options) => {
63
63
  '/api',
64
64
  '/services',
65
65
  '/management',
66
- '/swagger-resources',
67
- '/v2/api-docs',
68
66
  '/v3/api-docs',
69
67
  '/h2-console',
70
68
  <%_ if (authenticationTypeOauth2) { _%>
@@ -61,10 +61,8 @@ JHipster configuration is stored in this file at `generator-jhipster` key. You m
61
61
  - `.yo-resolve` (optional) - Yeoman conflict resolver
62
62
  Allows to use a specific action when conflicts are found skipping prompts for files that matches a pattern. Each line should match `[pattern] [action]` with pattern been a [Minimatch](https://github.com/isaacs/minimatch#minimatch) pattern and action been one of skip (default if ommited) or force. Lines starting with `#` are considered comments and are ignored.
63
63
  - `.jhipster/*.json` - JHipster entity configuration files
64
- <%_ if (buildToolMaven) { _%>
65
64
  - `npmw` - wrapper to use locally installed npm.
66
- JHipster installs Node and npm locally using the build tool by default. This wrapper makes sure npm is installed locally and uses it avoiding some differences different versions can cause. By using `./npmw` instead of the traditional `npm` you can configure a Node-less environment to develop your application.
67
- <%_ } _%>
65
+ JHipster installs Node and npm locally using the build tool by default. This wrapper makes sure npm is installed locally and uses it avoiding some differences different versions can cause. By using `./npmw` instead of the traditional `npm` you can configure a Node-less environment to develop or test your application.
68
66
  - `/src/main/docker` - Docker configurations for the application and services that the application depends on
69
67
 
70
68
  ## Development
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "devDependencies": {
3
- "concurrently": "6.4.0",
3
+ "concurrently": "6.5.1",
4
4
  "husky": "7.0.4",
5
- "lint-staged": "12.1.2",
6
- "npm": "8.1.4",
5
+ "lint-staged": "12.1.4",
6
+ "npm": "8.3.0",
7
7
  "wait-on": "6.0.0"
8
8
  }
9
9
  }
@@ -31,9 +31,16 @@
31
31
  <%_ } _%>
32
32
  "viewportWidth": 1200,
33
33
  "viewportHeight": 720,
34
- "retries": 2<%_ if (authenticationTypeJwt) { _%>,
34
+ "retries": 2,
35
+ <%_ if (authenticationTypeJwt) { _%>
35
36
  "env": {
37
+ "authenticationUrl": "/api/authenticate",
36
38
  "jwtStorageName": "<%= jhiPrefixDashed %>-authenticationToken"
37
- }
39
+ },
40
+ <%_ } else if (authenticationTypeSession) { _%>
41
+ "env": {
42
+ "authenticationUrl": "/api/authentication"
43
+ },
38
44
  <%_ } _%>
45
+ "experimentalSessionSupport": true,
39
46
  }
@@ -25,17 +25,10 @@ import {
25
25
  } from '../../support/commands';
26
26
 
27
27
  describe('login modal', () => {
28
- const username = Cypress.env('E2E_USERNAME') ?? 'admin';
29
- const password = Cypress.env('E2E_PASSWORD') ?? 'admin';
28
+ const username = Cypress.env('E2E_USERNAME') ?? 'user';
29
+ const password = Cypress.env('E2E_PASSWORD') ?? 'user';
30
30
 
31
- before(() => {
32
- cy.window().then(win => {
33
- win.sessionStorage.clear();
34
- });
35
- <%_ if (authenticationTypeSession) { _%>
36
- cy.clearCookie('SESSION');
37
- <%_ } _%>
38
- cy.clearCookies();
31
+ beforeEach(() => {
39
32
  cy.visit('');
40
33
  cy.clickOnLoginItem();
41
34
  });
@@ -56,7 +49,6 @@ describe('login modal', () => {
56
49
  <%_ } _%>
57
50
  // login page should stay open when login fails
58
51
  cy.get(titleLoginSelector).should('be.visible');
59
- cy.get(passwordLoginSelector).clear();
60
52
  });
61
53
 
62
54
  it('requires password', () => {
@@ -69,7 +61,6 @@ describe('login modal', () => {
69
61
  // login page should stay open when login fails
70
62
  cy.get(titleLoginSelector).should('be.visible');
71
63
  <%_ } _%>
72
- cy.get(usernameLoginSelector).clear();
73
64
  });
74
65
 
75
66
  it('errors when password is incorrect', () => {
@@ -78,8 +69,6 @@ describe('login modal', () => {
78
69
  cy.get(submitLoginSelector).click();
79
70
  cy.wait('@authenticate').then(({ response }) => expect(response.statusCode).to.equal(401));
80
71
  cy.get(errorLoginSelector).should('be.visible');
81
- cy.get(usernameLoginSelector).clear();
82
- cy.get(passwordLoginSelector).clear();
83
72
  });
84
73
 
85
74
  it('go to login page when successfully logs in', () => {
@@ -26,77 +26,71 @@ import {
26
26
  } from '../../support/commands';
27
27
 
28
28
  describe('/account/password', () => {
29
- before(() => {
30
- cy.window().then((win) => {
31
- win.sessionStorage.clear()
32
- });
33
- <%_ if (authenticationTypeSession) { _%>
34
- cy.clearCookie('SESSION');
35
- <%_ } _%>
36
- cy.clearCookies();
37
- cy.visit('');
38
- cy.login('user', 'user');
39
- cy.clickOnPasswordItem();
29
+ const username = Cypress.env('E2E_USERNAME') ?? 'user';
30
+ const password = Cypress.env('E2E_PASSWORD') ?? 'user';
31
+
32
+ beforeEach(() => {
33
+ cy.login(username, password);
34
+ cy.visit('/account/password');
40
35
  });
41
36
 
42
37
  beforeEach(() => {
43
38
  cy.intercept('POST', '/api/account/change-password').as('passwordSave');
44
39
  });
45
40
 
41
+ it('should be accessible through menu', () => {
42
+ cy.visit('');
43
+ cy.clickOnPasswordItem();
44
+ cy.url().should('match', /\/account\/password$/);
45
+ });
46
+
46
47
  it("requires current password", () => {
47
48
  <%_ if (clientFrameworkReact) { _%>
48
- cy.get(submitPasswordSelector).click({ force: true });
49
+ cy.get(submitPasswordSelector).click();
49
50
  <%_ } _%>
50
51
  cy.get(currentPasswordSelector)
51
52
  .should('have.class', classInvalid)
52
- .type('wrong-current-password');
53
- <%_ if (clientFrameworkReact) { _%>
54
- cy.get(submitPasswordSelector).click({ force: true });
55
- <%_ } _%>
56
- cy.get(currentPasswordSelector).should('have.class', classValid);
57
- cy.get(currentPasswordSelector).clear();
53
+ .type('wrong-current-password')
54
+ .blur()
55
+ .should('have.class', classValid);
58
56
  });
59
57
 
60
58
  it("requires new password", () => {
61
- cy.get(newPasswordSelector)
62
- .should('have.class', classInvalid)
63
- .type('jhipster');
64
59
  <%_ if (clientFrameworkReact) { _%>
65
- cy.get(submitPasswordSelector).click({ force: true });
60
+ cy.get(submitPasswordSelector).click();
66
61
  <%_ } _%>
67
- cy.get(newPasswordSelector).should('have.class', classValid);
68
- cy.get(newPasswordSelector).clear();
62
+ cy.get(newPasswordSelector)
63
+ .should('have.class', classInvalid)
64
+ .type('jhipster')
65
+ .blur()
66
+ .should('have.class', classValid);
69
67
  });
70
68
 
71
69
  it("requires confirm new password", () => {
70
+ <%_ if (clientFrameworkReact) { _%>
71
+ cy.get(submitPasswordSelector).click();
72
+ <%_ } _%>
72
73
  cy.get(newPasswordSelector).type('jhipster');
73
74
  cy.get(confirmPasswordSelector)
74
75
  .should('have.class', classInvalid)
75
- .type('jhipster');
76
- <%_ if (clientFrameworkReact) { _%>
77
- cy.get(submitPasswordSelector).click({ force: true });
78
- <%_ } _%>
79
- cy.get(confirmPasswordSelector).should('have.class', classValid);
80
- cy.get(newPasswordSelector).clear();
81
- cy.get(confirmPasswordSelector).clear();
76
+ .type('jhipster')
77
+ .blur()
78
+ .should('have.class', classValid);
82
79
  });
83
80
 
84
81
  it("should fail to update password when using incorrect current password", () => {
85
82
  cy.get(currentPasswordSelector).type('wrong-current-password');
86
83
  cy.get(newPasswordSelector).type('jhipster');
87
84
  cy.get(confirmPasswordSelector).type('jhipster');
88
- cy.get(submitPasswordSelector).click({force: true});
85
+ cy.get(submitPasswordSelector).click();
89
86
  cy.wait('@passwordSave').then(({ response }) => expect(response.statusCode).to.equal(400));
90
- cy.get(currentPasswordSelector).clear();
91
- cy.get(newPasswordSelector).clear();
92
- cy.get(confirmPasswordSelector).clear();
93
87
  });
94
88
 
95
89
  it("should be able to update password", () => {
96
- cy.get(currentPasswordSelector).type('user');
97
- cy.get(newPasswordSelector).type('user');
98
- cy.get(confirmPasswordSelector).type('user');
99
- cy.get(submitPasswordSelector).click({force: true});
90
+ cy.get(currentPasswordSelector).type(password);
91
+ cy.get(newPasswordSelector).type(password);
92
+ cy.get(confirmPasswordSelector).type(password);
93
+ cy.get(submitPasswordSelector).click();
100
94
  cy.wait('@passwordSave').then(({ response }) => expect(response.statusCode).to.equal(200));
101
95
  });
102
96
  });
@@ -26,101 +26,95 @@ import {
26
26
  classValid,
27
27
  } from '../../support/commands';
28
28
 
29
- describe('/account/register', () => {
30
- before(() => {
31
- cy.window().then((win) => {
32
- win.sessionStorage.clear()
33
- });
34
- <%_ if (authenticationTypeSession) { _%>
35
- cy.clearCookie('SESSION');
36
- <%_ } _%>
37
- cy.clearCookies();
38
- cy.visit('');
39
- cy.clickOnRegisterItem();
29
+ <% const registerPage = clientFrameworkVue ? '/register' : '/account/register'; _%>
30
+ describe('<%= registerPage %>', () => {
31
+ beforeEach(() => {
32
+ cy.visit('<%= registerPage %>');
40
33
  });
41
34
 
42
35
  beforeEach(() => {
43
36
  cy.intercept('POST', '/api/register').as('registerSave');
44
37
  });
45
38
 
39
+ it('should be accessible through menu', () => {
40
+ cy.visit('');
41
+ cy.clickOnRegisterItem();
42
+ cy.url().should('match', /<%= registerPage.replaceAll('/', '\\/') %>$/);
43
+ });
44
+
46
45
  it('should load the register page', () => {
47
46
  cy.get(submitRegisterSelector).should('be.visible');
48
47
  });
49
48
 
50
49
  it('requires username', () => {
51
50
  <%_ if (clientFrameworkReact) { _%>
52
- cy.get(submitRegisterSelector).click({ force: true });
51
+ cy.get(submitRegisterSelector).click();
53
52
  <%_ } _%>
54
53
  cy.get(usernameRegisterSelector)
55
54
  .should('have.class', classInvalid)
56
- .type('test');
57
- <%_ if (clientFrameworkReact) { _%>
58
- cy.get(submitRegisterSelector).click({ force: true });
59
- <%_ } _%>
60
- cy.get(usernameRegisterSelector).should('have.class', classValid)
61
- .clear();
55
+ .type('test')
56
+ .blur()
57
+ .should('have.class', classValid);
62
58
  });
63
59
 
64
- it('requires email', () => {
65
- cy.get(emailRegisterSelector)
66
- .should('have.class', classInvalid)
67
- .type('testtest.fr');
60
+ it('should not accept invalid email', () => {
68
61
  <%_ if (clientFrameworkReact) { _%>
69
- cy.get(submitRegisterSelector).click({ force: true });
62
+ cy.get(submitRegisterSelector).click();
70
63
  <%_ } _%>
71
- cy.get(emailRegisterSelector).should('have.class', classInvalid)
72
- .clear();
64
+ cy.get(emailRegisterSelector)
65
+ .should('have.class', classInvalid)
66
+ .type('testtest.fr')
67
+ .blur()
68
+ .should('have.class', classInvalid);
73
69
  });
74
70
 
75
71
  it('requires email in correct format', () => {
76
- cy.get(emailRegisterSelector)
77
- .should('have.class', classInvalid)
78
- .type('test@test.fr');
79
72
  <%_ if (clientFrameworkReact) { _%>
80
- cy.get(submitRegisterSelector).click({ force: true });
73
+ cy.get(submitRegisterSelector).click();
81
74
  <%_ } _%>
82
- cy.get(emailRegisterSelector).should('have.class', classValid)
83
- .clear();
75
+ cy.get(emailRegisterSelector)
76
+ .should('have.class', classInvalid)
77
+ .type('test@test.fr')
78
+ .blur()
79
+ .should('have.class', classValid);
84
80
  });
85
81
 
86
82
  it('requires first password', () => {
87
- cy.get(firstPasswordRegisterSelector)
88
- .should('have.class', classInvalid)
89
- .type('test@test.fr');
90
83
  <%_ if (clientFrameworkReact) { _%>
91
- cy.get(submitRegisterSelector).click({ force: true });
84
+ cy.get(submitRegisterSelector).click();
92
85
  <%_ } _%>
93
- cy.get(firstPasswordRegisterSelector).should('have.class', classValid)
94
- .clear();
86
+ cy.get(firstPasswordRegisterSelector)
87
+ .should('have.class', classInvalid)
88
+ .type('test@test.fr')
89
+ .blur()
90
+ .should('have.class', classValid);
95
91
  });
96
92
 
97
93
  it('requires password and confirm password to be same', () => {
98
- cy.get(firstPasswordRegisterSelector)
99
- .should('have.class', classInvalid)
100
- .type('test');
101
94
  <%_ if (clientFrameworkReact) { _%>
102
- cy.get(submitRegisterSelector).click({ force: true });
95
+ cy.get(submitRegisterSelector).click();
103
96
  <%_ } _%>
104
- cy.get(firstPasswordRegisterSelector).should('have.class', classValid);
97
+ cy.get(firstPasswordRegisterSelector)
98
+ .should('have.class', classInvalid)
99
+ .type('test')
100
+ .blur()
101
+ .should('have.class', classValid);
105
102
  cy.get(secondPasswordRegisterSelector)
106
103
  .should('have.class', classInvalid)
107
- .type('test');
108
- <%_ if (clientFrameworkReact) { _%>
109
- cy.get(submitRegisterSelector).click({ force: true });
110
- <%_ } _%>
111
- cy.get(secondPasswordRegisterSelector).should('have.class', classValid);
112
- cy.get(firstPasswordRegisterSelector).clear();
113
- cy.get(secondPasswordRegisterSelector).clear();
104
+ .type('test')
105
+ .blur()
106
+ .should('have.class', classValid);
114
107
  });
115
108
 
116
109
  it('requires password and confirm password have not the same value', () => {
117
- cy.get(firstPasswordRegisterSelector)
118
- .should('have.class', classInvalid)
119
- .type('test');
120
110
  <%_ if (clientFrameworkReact) { _%>
121
- cy.get(submitRegisterSelector).click({ force: true });
111
+ cy.get(submitRegisterSelector).click();
122
112
  <%_ } _%>
123
- cy.get(firstPasswordRegisterSelector).should('have.class', classValid);
113
+ cy.get(firstPasswordRegisterSelector)
114
+ .should('have.class', classInvalid)
115
+ .type('test')
116
+ .blur()
117
+ .should('have.class', classValid);
124
118
  <%_ if (clientFrameworkAngular) { _%>
125
119
  cy.get(secondPasswordRegisterSelector)
126
120
  .should('have.class', classInvalid)
@@ -129,14 +123,10 @@ describe('/account/register', () => {
129
123
  <%_ } else { _%>
130
124
  cy.get(secondPasswordRegisterSelector)
131
125
  .should('have.class', classInvalid)
132
- .type('otherPassword');
133
- <%_ if (clientFrameworkReact) { _%>
134
- cy.get(submitRegisterSelector).click({ force: true });
135
- <%_ } _%>
136
- cy.get(secondPasswordRegisterSelector).should('have.class', classInvalid);
126
+ .type('otherPassword')
127
+ .blur()
128
+ .should('have.class', classInvalid);
137
129
  <%_ } _%>
138
- cy.get(firstPasswordRegisterSelector).clear();
139
- cy.get(secondPasswordRegisterSelector).clear();
140
130
  });
141
131
 
142
132
  it('register a valid user', () => {
@@ -146,7 +136,7 @@ describe('/account/register', () => {
146
136
  cy.get(emailRegisterSelector).type(randomEmail);
147
137
  cy.get(firstPasswordRegisterSelector).type('jondoe');
148
138
  cy.get(secondPasswordRegisterSelector).type('jondoe');
149
- cy.get(submitRegisterSelector).click({force: true});
139
+ cy.get(submitRegisterSelector).click();
150
140
  cy.wait('@registerSave').then(({ response }) => expect(response.statusCode).to.equal(201));
151
141
  });
152
142
  });