From 6530680b8adb2299a730874988bd9a1470132123 Mon Sep 17 00:00:00 2001 From: Will Martin Date: Wed, 28 Jun 2023 14:57:42 -0400 Subject: [PATCH] [SM-810] remove token permission UI (#5681) * Remove permission field from access token dialog; remove unused i18n key * remove permissions column from access token table * fix SA name placehold in access token dialog * remove comment * pass SA view into dialog upon opening --- apps/web/src/locales/en/messages.json | 4 -- .../access/access-list.component.html | 2 - .../access/access-list.component.ts | 4 -- .../access/access-tokens.component.ts | 61 +++++++++++++------ .../access-token-create-dialog.component.html | 13 ---- .../access-token-create-dialog.component.ts | 22 ++----- .../service-account.component.ts | 11 ++-- 7 files changed, 53 insertions(+), 64 deletions(-) diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json index 6730b2a6f0..738338c34d 100644 --- a/apps/web/src/locales/en/messages.json +++ b/apps/web/src/locales/en/messages.json @@ -6195,10 +6195,6 @@ "message": "Access token created and copied to clipboard", "description": "Notification to inform the user that the access token has been created and copied to the clipboard." }, - "accessTokenPermissionsBetaNotification": { - "message": "Permissions management is unavailable for beta.", - "description": "Notification to inform the user that the feature for managing access token permissions is not available in the beta version." - }, "revokeAccessToken": { "message": "Revoke access token", "description": "Invalidates / cancels an access token and as such removes access to secrets for the client application." diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-list.component.html b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-list.component.html index 632e10c8c7..3d7e1b1073 100644 --- a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-list.component.html +++ b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-list.component.html @@ -32,7 +32,6 @@ {{ "name" | i18n }} - {{ "permissions" | i18n }} {{ "expires" | i18n }} {{ "lastEdited" | i18n }} @@ -57,7 +56,6 @@ /> {{ token.name }} - {{ permission(token) | i18n }} {{ token.expireAt === null ? ("never" | i18n) : (token.expireAt | date : "medium") }} diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-list.component.ts b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-list.component.ts index ce7ad6e86d..e24b0488b2 100644 --- a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-list.component.ts +++ b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-list.component.ts @@ -39,8 +39,4 @@ export class AccessListComponent { const selected = this.tokens.filter((s) => this.selection.selected.includes(s.id)); this.revokeAccessTokensEvent.emit(selected); } - - protected permission(token: AccessTokenView) { - return "canRead"; - } } diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-tokens.component.ts b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-tokens.component.ts index e7e3c17fca..2568a39836 100644 --- a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-tokens.component.ts +++ b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-tokens.component.ts @@ -1,6 +1,14 @@ -import { Component, OnInit } from "@angular/core"; +import { Component, OnDestroy, OnInit } from "@angular/core"; import { ActivatedRoute } from "@angular/router"; -import { combineLatestWith, firstValueFrom, Observable, startWith, switchMap } from "rxjs"; +import { + combineLatestWith, + firstValueFrom, + Observable, + startWith, + Subject, + switchMap, + takeUntil, +} from "rxjs"; import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ModalService } from "@bitwarden/angular/services/modal.service"; @@ -8,7 +16,9 @@ import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.servic import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { openUserVerificationPrompt } from "@bitwarden/web-vault/app/auth/shared/components/user-verification"; +import { ServiceAccountView } from "../../models/view/service-account.view"; import { AccessTokenView } from "../models/view/access-token.view"; +import { ServiceAccountService } from "../service-account.service"; import { AccessService } from "./access.service"; import { AccessTokenCreateDialogComponent } from "./dialogs/access-token-create-dialog.component"; @@ -17,11 +27,11 @@ import { AccessTokenCreateDialogComponent } from "./dialogs/access-token-create- selector: "sm-access-tokens", templateUrl: "./access-tokens.component.html", }) -export class AccessTokenComponent implements OnInit { +export class AccessTokenComponent implements OnInit, OnDestroy { accessTokens$: Observable; - private serviceAccountId: string; - private organizationId: string; + private destroy$ = new Subject(); + private serviceAccountView: ServiceAccountView; constructor( private route: ActivatedRoute, @@ -29,19 +39,39 @@ export class AccessTokenComponent implements OnInit { private dialogService: DialogServiceAbstraction, private modalService: ModalService, private platformUtilsService: PlatformUtilsService, - private i18nService: I18nService + private i18nService: I18nService, + private serviceAccountService: ServiceAccountService ) {} ngOnInit() { this.accessTokens$ = this.accessService.accessToken$.pipe( startWith(null), combineLatestWith(this.route.params), - switchMap(async ([_, params]) => { - this.organizationId = params.organizationId; - this.serviceAccountId = params.serviceAccountId; - return await this.getAccessTokens(); - }) + switchMap(async ([_, params]) => + this.accessService.getAccessTokens(params.organizationId, params.serviceAccountId) + ) ); + + this.serviceAccountService.serviceAccount$ + .pipe( + startWith(null), + combineLatestWith(this.route.params), + switchMap(([_, params]) => + this.serviceAccountService.getByServiceAccountId( + params.serviceAccountId, + params.organizationId + ) + ), + takeUntil(this.destroy$) + ) + .subscribe((serviceAccountView) => { + this.serviceAccountView = serviceAccountView; + }); + } + + ngOnDestroy(): void { + this.destroy$.next(); + this.destroy$.complete(); } protected async revoke(tokens: AccessTokenView[]) { @@ -59,7 +89,7 @@ export class AccessTokenComponent implements OnInit { } await this.accessService.revokeAccessTokens( - this.serviceAccountId, + this.serviceAccountView.id, tokens.map((t) => t.id) ); @@ -69,8 +99,7 @@ export class AccessTokenComponent implements OnInit { protected openNewAccessTokenDialog() { AccessTokenCreateDialogComponent.openNewAccessTokenDialog( this.dialogService, - this.serviceAccountId, - this.organizationId + this.serviceAccountView ); } @@ -89,8 +118,4 @@ export class AccessTokenComponent implements OnInit { return firstValueFrom(ref.closed); } - - private async getAccessTokens(): Promise { - return await this.accessService.getAccessTokens(this.organizationId, this.serviceAccountId); - } } diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/dialogs/access-token-create-dialog.component.html b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/dialogs/access-token-create-dialog.component.html index 7e020a5106..cdbd53086f 100644 --- a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/dialogs/access-token-create-dialog.component.html +++ b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/dialogs/access-token-create-dialog.component.html @@ -12,19 +12,6 @@ {{ "name" | i18n }} -
- - {{ "permissions" | i18n }} - - - - {{ "accessTokenPermissionsBetaNotification" | i18n }} - -
(AccessTokenCreateDialogComponent, { data: { - organizationId: organizationId, - serviceAccountView: serviceAccountView, + serviceAccountView, }, }); } diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/service-account.component.ts b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/service-account.component.ts index 98d316467d..2e6084e06e 100644 --- a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/service-account.component.ts +++ b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/service-account.component.ts @@ -15,6 +15,8 @@ import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { ServiceAccountView } from "../models/view/service-account.view"; + import { AccessTokenCreateDialogComponent } from "./access/dialogs/access-token-create-dialog.component"; import { ServiceAccountService } from "./service-account.service"; @@ -32,6 +34,7 @@ export class ServiceAccountComponent implements OnInit, OnDestroy { startWith(null) ); + private serviceAccountView: ServiceAccountView; protected serviceAccount$ = combineLatest([this.route.params, this.onChange$]).pipe( switchMap(([params, _]) => this.serviceAccountService.getByServiceAccountId( @@ -61,9 +64,8 @@ export class ServiceAccountComponent implements OnInit, OnDestroy { ) {} ngOnInit(): void { - this.route.params.pipe(takeUntil(this.destroy$)).subscribe((params) => { - this.serviceAccountId = params.serviceAccountId; - this.organizationId = params.organizationId; + this.serviceAccount$.pipe(takeUntil(this.destroy$)).subscribe((serviceAccountView) => { + this.serviceAccountView = serviceAccountView; }); } @@ -75,8 +77,7 @@ export class ServiceAccountComponent implements OnInit, OnDestroy { protected openNewAccessTokenDialog() { AccessTokenCreateDialogComponent.openNewAccessTokenDialog( this.dialogService, - this.serviceAccountId, - this.organizationId + this.serviceAccountView ); } }