diff --git a/bitwarden_license/src/app/app.component.ts b/bitwarden_license/src/app/app.component.ts index 33c6e828c8..224afce70c 100644 --- a/bitwarden_license/src/app/app.component.ts +++ b/bitwarden_license/src/app/app.component.ts @@ -1,6 +1,7 @@ import { Component } from '@angular/core'; import { AppComponent as BaseAppComponent } from 'src/app/app.component'; +import { DisablePersonalVaultExportPolicy } from './policies/disable-personal-vault-export.component'; import { MaximumVaultTimeoutPolicy } from './policies/maximum-vault-timeout.component'; @Component({ @@ -14,6 +15,7 @@ export class AppComponent extends BaseAppComponent { this.policyListService.addPolicies([ new MaximumVaultTimeoutPolicy(), + new DisablePersonalVaultExportPolicy(), ]); } diff --git a/bitwarden_license/src/app/app.module.ts b/bitwarden_license/src/app/app.module.ts index c69bc1b356..77cee0379a 100644 --- a/bitwarden_license/src/app/app.module.ts +++ b/bitwarden_license/src/app/app.module.ts @@ -9,6 +9,7 @@ import { RouterModule } from '@angular/router'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; +import { DisablePersonalVaultExportPolicyComponent } from './policies/disable-personal-vault-export.component'; import { MaximumVaultTimeoutPolicyComponent } from './policies/maximum-vault-timeout.component'; import { OssRoutingModule } from 'src/app/oss-routing.module'; @@ -33,6 +34,7 @@ import { ServicesModule } from 'src/app/services/services.module'; declarations: [ AppComponent, MaximumVaultTimeoutPolicyComponent, + DisablePersonalVaultExportPolicyComponent, ], bootstrap: [AppComponent], }) diff --git a/bitwarden_license/src/app/policies/disable-personal-vault-export.component.html b/bitwarden_license/src/app/policies/disable-personal-vault-export.component.html new file mode 100644 index 0000000000..f08f74c323 --- /dev/null +++ b/bitwarden_license/src/app/policies/disable-personal-vault-export.component.html @@ -0,0 +1,6 @@ +
+
+ + +
+
diff --git a/bitwarden_license/src/app/policies/disable-personal-vault-export.component.ts b/bitwarden_license/src/app/policies/disable-personal-vault-export.component.ts new file mode 100644 index 0000000000..b79bdfdb77 --- /dev/null +++ b/bitwarden_license/src/app/policies/disable-personal-vault-export.component.ts @@ -0,0 +1,24 @@ +import { Component } from '@angular/core'; +import { FormBuilder } from '@angular/forms'; + +import { I18nService } from 'jslib-common/abstractions/i18n.service'; + +import { PolicyType } from 'jslib-common/enums/policyType'; + +import { PolicyRequest } from 'jslib-common/models/request/policyRequest'; + +import { BasePolicy, BasePolicyComponent } from 'src/app/organizations/policies/base-policy.component'; + +export class DisablePersonalVaultExportPolicy extends BasePolicy { + name = 'disablePersonalVaultExport'; + description = 'disablePersonalVaultExportDesc'; + type = PolicyType.DisablePersonalVaultExport; + component = DisablePersonalVaultExportPolicyComponent; +} + +@Component({ + selector: 'policy-disable-personal-vault-export', + templateUrl: 'disable-personal-vault-export.component.html', +}) +export class DisablePersonalVaultExportPolicyComponent extends BasePolicyComponent { +} diff --git a/jslib b/jslib index 32774561f3..ee1ea922a9 160000 --- a/jslib +++ b/jslib @@ -1 +1 @@ -Subproject commit 32774561f37bdcf9abb80276c5d1958b7ec192de +Subproject commit ee1ea922a9d5a51ef8df2abf4b97fc035ed782be diff --git a/src/app/organizations/tools/export.component.ts b/src/app/organizations/tools/export.component.ts index 4fd0e7351c..e68eb5de2d 100644 --- a/src/app/organizations/tools/export.component.ts +++ b/src/app/organizations/tools/export.component.ts @@ -6,11 +6,10 @@ import { EventService } from 'jslib-common/abstractions/event.service'; import { ExportService } from 'jslib-common/abstractions/export.service'; import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; +import { PolicyService } from 'jslib-common/abstractions/policy.service'; import { ExportComponent as BaseExportComponent } from '../../tools/export.component'; -import { EventType } from 'jslib-common/enums/eventType'; - @Component({ selector: 'app-org-export', templateUrl: '../../tools/export.component.html', @@ -18,16 +17,21 @@ import { EventType } from 'jslib-common/enums/eventType'; export class ExportComponent extends BaseExportComponent { constructor(cryptoService: CryptoService, i18nService: I18nService, platformUtilsService: PlatformUtilsService, exportService: ExportService, - eventService: EventService, private route: ActivatedRoute) { - super(cryptoService, i18nService, platformUtilsService, exportService, eventService); + eventService: EventService, private route: ActivatedRoute, policyService: PolicyService) { + super(cryptoService, i18nService, platformUtilsService, exportService, eventService, policyService); } - ngOnInit() { + async ngOnInit() { + await super.ngOnInit(); this.route.parent.parent.params.subscribe(async params => { this.organizationId = params.organizationId; }); } + async checkExportDisabled() { + return; + } + getExportData() { return this.exportService.getOrganizationExport(this.organizationId, this.format); } diff --git a/src/app/tools/export.component.html b/src/app/tools/export.component.html index 23c9f84492..3b5212dfd1 100644 --- a/src/app/tools/export.component.html +++ b/src/app/tools/export.component.html @@ -2,11 +2,16 @@ + + + {{'personalVaultExportPolicyInEffect' | i18n}} + +

{{'exportMasterPassword' | i18n}}

- @@ -17,11 +22,11 @@
+ [(ngModel)]="masterPassword" required appInputVerbatim [disabled]="disabledByPolicy">
- diff --git a/src/app/tools/export.component.ts b/src/app/tools/export.component.ts index 6c35bff841..367ccfb439 100644 --- a/src/app/tools/export.component.ts +++ b/src/app/tools/export.component.ts @@ -7,6 +7,7 @@ import { I18nService } from 'jslib-common/abstractions/i18n.service'; import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service'; import { ExportComponent as BaseExportComponent } from 'jslib-angular/components/export.component'; +import { PolicyService } from 'jslib-common/abstractions/policy.service'; @Component({ selector: 'app-export', @@ -17,8 +18,8 @@ export class ExportComponent extends BaseExportComponent { constructor(cryptoService: CryptoService, i18nService: I18nService, platformUtilsService: PlatformUtilsService, exportService: ExportService, - eventService: EventService) { - super(cryptoService, i18nService, platformUtilsService, exportService, eventService, window); + eventService: EventService, policyService: PolicyService) { + super(cryptoService, i18nService, platformUtilsService, exportService, eventService, policyService, window); } protected saved() { diff --git a/src/locales/en/messages.json b/src/locales/en/messages.json index 55a09a22c7..1c4c1f903f 100644 --- a/src/locales/en/messages.json +++ b/src/locales/en/messages.json @@ -4235,5 +4235,17 @@ }, "vaultTimeoutToLarge": { "message": "Your vault timeout exceeds the restriction set by your organization." + }, + "disablePersonalVaultExport": { + "message": "Disable Personal Vault Export" + }, + "disablePersonalVaultExportDesc": { + "message": "Prohibits users from exporting their private vault data." + }, + "vaultExportDisabled": { + "message": "Vault Export Disabled" + }, + "personalVaultExportPolicyInEffect": { + "message": "One or more organization policies prevents you from exporting your personal vault." } }