diff --git a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/AnonymousUserRequestNewApiTokenRestController.java b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/AnonymousUserRequestNewApiTokenRestController.java index ad7697515..8a3d0d160 100644 --- a/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/AnonymousUserRequestNewApiTokenRestController.java +++ b/sechub-administration/src/main/java/com/mercedesbenz/sechub/domain/administration/user/AnonymousUserRequestNewApiTokenRestController.java @@ -14,7 +14,7 @@ import com.mercedesbenz.sechub.sharedkernel.usecases.user.UseCaseUserRequestsNewApiToken; /** - * Request new api token by a given onetimetoken. Can be done anonymous + * Request new api token by a given email address. Can be done anonymously * * @author Albert Tregnaghi * diff --git a/sechub-openapi-java/src/main/resources/openapi.yaml b/sechub-openapi-java/src/main/resources/openapi.yaml index 3e9917cf1..bb8f225c6 100644 --- a/sechub-openapi-java/src/main/resources/openapi.yaml +++ b/sechub-openapi-java/src/main/resources/openapi.yaml @@ -2684,25 +2684,6 @@ paths: ## User Self Service ## ####################### - /api/anonymous/apitoken/{oneTimeToken}: - get: - summary: User clicks link to get new api token - description: User clicks link to get new api token - operationId: anonymousGetNewApiTokenByOneTimeToken - parameters: - - name: oneTimeToken - description: A one time token the user has got by a previous mail from SecHub server - in: path - required: true - schema: - type: string - responses: - "200": - description: "Answer containing the new api token or error message if request could not be fulfilled" - security: [ ] - tags: - - User Self Service - /api/management/user: get: summary: User fetches his user details @@ -3230,6 +3211,25 @@ paths: tags: - Sign Up + /api/anonymous/apitoken/{oneTimeToken}: + get: + summary: User clicks link to get new api token + description: User clicks link to get new api token + operationId: anonymousGetNewApiTokenByOneTimeToken + parameters: + - name: oneTimeToken + description: A one time token the user has got by a previous mail from SecHub server + in: path + required: true + schema: + type: string + responses: + "200": + description: "Answer containing the new api token or error message if request could not be fulfilled" + security: [ ] + tags: + - Sign Up + /api/anonymous/refresh/apitoken/{emailAddress}: post: summary: User requests new API token diff --git a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/usecases/user/UseCaseUserClicksLinkToGetNewAPIToken.java b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/usecases/user/UseCaseUserClicksLinkToGetNewAPIToken.java index 4c6c6c00c..35abde0ee 100644 --- a/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/usecases/user/UseCaseUserClicksLinkToGetNewAPIToken.java +++ b/sechub-shared-kernel/src/main/java/com/mercedesbenz/sechub/sharedkernel/usecases/user/UseCaseUserClicksLinkToGetNewAPIToken.java @@ -17,7 +17,7 @@ @Retention(RetentionPolicy.RUNTIME) @UseCaseDefinition( id=UC_USER_CLICKS_LINK_TO_GET_NEW_API_TOKEN, - group=UseCaseGroup.USER_SELF_SERVICE, + group=UseCaseGroup.SIGN_UP, apiName="userClicksLinkToGetNewAPIToken", title="User clicks link to get new api token", description="user/clicks_link_to_get_new_api_token.adoc") diff --git a/sechub-web-ui/src/components.d.ts b/sechub-web-ui/src/components.d.ts index 14290748d..bde3887e7 100644 --- a/sechub-web-ui/src/components.d.ts +++ b/sechub-web-ui/src/components.d.ts @@ -1,4 +1,3 @@ -// SPDX-License-Identifier: MIT /* eslint-disable */ // @ts-nocheck // Generated by unplugin-vue-components @@ -19,5 +18,6 @@ declare module 'vue' { ScanCreate: typeof import('./components/ScanCreate.vue')['default'] ScanFileUpload: typeof import('./components/ScanFileUpload.vue')['default'] ScanTypeSelect: typeof import('./components/ScanTypeSelect.vue')['default'] + UserDetailInformation: typeof import('./components/UserDetailInformation.vue')['default'] } } diff --git a/sechub-web-ui/src/components/AppHeader.vue b/sechub-web-ui/src/components/AppHeader.vue index ab9798f51..55e5ccafa 100644 --- a/sechub-web-ui/src/components/AppHeader.vue +++ b/sechub-web-ui/src/components/AppHeader.vue @@ -44,7 +44,7 @@ --> diff --git a/sechub-web-ui/src/i18n/locales/en.json b/sechub-web-ui/src/i18n/locales/en.json index 972d25dcc..89b4f3fe2 100644 --- a/sechub-web-ui/src/i18n/locales/en.json +++ b/sechub-web-ui/src/i18n/locales/en.json @@ -16,6 +16,19 @@ "JOB_TABLE_DOWNLOAD_HTML_REPORT": "HTML Report", "JOB_TABLE_DOWNLOAD_JSON_REPORT": "JSON Report", "JOB_TABLE_DOWNLOAD_JOBUUID": "Job UUID", + "USER_TITLE": "User Profile", + "USER_ID": "User ID", + "USER_EMAIL": "Email", + "USER_SETTINGS": "Settings", + "USER_SETTINGS_CHANGE_PASSWORD": "Change Password (disabled)", + "USER_SETTINGS_REQUEST_NEW_API_TOKEN": "Request New API Token", + "USER_SETTINGS_REQUEST_NEW_API_TOKEN_DIALOG_TITLE": "Request Successful", + "USER_SETTINGS_REQUEST_NEW_API_TOKEN_DIALOG_TEXT": "Your new API token has been successfully created and sent to your configured email.", + "USER_SETTINGS_REQUEST_NEW_API_TOKEN_DIALOG_CLOSE": "Close", + "USER_SUPPORT_TITLE": "Support", + "USER_SUPPORT_WEBSITE": "SecHub Website", + "USER_SUPPORT_GITHUB": "SecHub GitHub Repository", + "USER_SUPPORT_EMAIL": "Support Email", "PROJECT_DETAILS_TITLE": "Project", "PROJECT_DETAILS_OWNER": "Owner", "PROJECT_DETAILS_MEMBERS": "Members", diff --git a/sechub-web-ui/src/pages/user/index.vue b/sechub-web-ui/src/pages/user/index.vue new file mode 100644 index 000000000..343907ab6 --- /dev/null +++ b/sechub-web-ui/src/pages/user/index.vue @@ -0,0 +1,4 @@ + + diff --git a/sechub-web-ui/src/services/defaultClient.ts b/sechub-web-ui/src/services/defaultClient.ts index ca5bb7b18..15dda6ee7 100644 --- a/sechub-web-ui/src/services/defaultClient.ts +++ b/sechub-web-ui/src/services/defaultClient.ts @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MIT import configurationApi from './configurationService' +import userSelfServiceApi from './userSelfServiceApi' +import signUpApi from './signUpApi' import projectApi from './productAdministrationService' import systemApi from './systemApiService' import otherApi from './otherService' @@ -8,6 +10,8 @@ import scanService from './executionService/ScanService' const defaultClient = { withProjectApi: projectApi, + withSignUpApi: signUpApi, + withUserSelfServiceApi: userSelfServiceApi, withSystemApi: systemApi, withConfigurationApi: configurationApi, withOtherApi: otherApi, diff --git a/sechub-web-ui/src/services/signUpApi.ts b/sechub-web-ui/src/services/signUpApi.ts new file mode 100644 index 000000000..74cc9daaa --- /dev/null +++ b/sechub-web-ui/src/services/signUpApi.ts @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT +import { SignUpApi } from '@/generated-sources/openapi' +import apiConfig from './configuration' + +const signUpApi = new SignUpApi(apiConfig) + +export default signUpApi diff --git a/sechub-web-ui/src/services/userSelfServiceApi.ts b/sechub-web-ui/src/services/userSelfServiceApi.ts new file mode 100644 index 000000000..786029eb0 --- /dev/null +++ b/sechub-web-ui/src/services/userSelfServiceApi.ts @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT +import { UserSelfServiceApi } from '@/generated-sources/openapi' +import apiConfig from './configuration' + +const userSelfServiceApi = new UserSelfServiceApi(apiConfig) + +export default userSelfServiceApi diff --git a/sechub-web-ui/src/styles/settings.scss b/sechub-web-ui/src/styles/settings.scss index 3e36a279b..2623a2231 100644 --- a/sechub-web-ui/src/styles/settings.scss +++ b/sechub-web-ui/src/styles/settings.scss @@ -8,3 +8,21 @@ // @use 'vuetify/settings' with ( // $color-pack: false // ); + +.v-list-item__spacer { + width: 0 !important; +} + +.v-list-item .v-list-item__prepend { + padding-top: 0 !important; +} + +.v-container v-locale--is-ltr { + padding-left: 0 !important; +} + +.v-list-item__content { + .v-locale--is-ltr { + margin-left: 0 !important; + } +} \ No newline at end of file diff --git a/sechub-web-ui/src/typed-router.d.ts b/sechub-web-ui/src/typed-router.d.ts index a75be2f18..8963b7f7b 100644 --- a/sechub-web-ui/src/typed-router.d.ts +++ b/sechub-web-ui/src/typed-router.d.ts @@ -1,4 +1,3 @@ -// SPDX-License-Identifier: MIT /* eslint-disable */ /* prettier-ignore */ // @ts-nocheck @@ -22,5 +21,6 @@ declare module 'vue-router/auto-routes' { '/': RouteRecordInfo<'/', '/', Record, Record>, '/[id]/': RouteRecordInfo<'/[id]/', '/:id', { id: ParamValue }, { id: ParamValue }>, '/[id]/scan': RouteRecordInfo<'/[id]/scan', '/:id/scan', { id: ParamValue }, { id: ParamValue }>, + '/user/': RouteRecordInfo<'/user/', '/user', Record, Record>, } }