diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index 02c4279727..a5cc4c20b5 100644 --- a/src/_locales/en/messages.json +++ b/src/_locales/en/messages.json @@ -1449,5 +1449,20 @@ }, "personalOwnershipPolicyInEffect": { "message": "An organization policy is affecting your ownership options." + }, + "excludedDomains": { + "message": "Excluded Domains" + }, + "excludedDomainsDesc": { + "message": "Bitwarden will not ask to save login details for these domains." + }, + "excludedDomainsInvalidDomain": { + "message": "$DOMAIN$ is not a valid domain", + "placeholders": { + "domain": { + "content": "$1", + "example": "googlecom" + } + } } } diff --git a/src/popup/app-routing.module.ts b/src/popup/app-routing.module.ts index 5c3ea8dbba..96090c98f3 100644 --- a/src/popup/app-routing.module.ts +++ b/src/popup/app-routing.module.ts @@ -23,6 +23,7 @@ import { SsoComponent } from './accounts/sso.component'; import { PasswordGeneratorHistoryComponent } from './generator/password-generator-history.component'; import { PasswordGeneratorComponent } from './generator/password-generator.component'; import { PrivateModeComponent } from './private-mode.component'; +import { ExcludedDomainsComponent } from './settings/excluded-domains.component'; import { ExportComponent } from './settings/export.component'; import { FolderAddEditComponent } from './settings/folder-add-edit.component'; import { FoldersComponent } from './settings/folders.component'; @@ -200,6 +201,12 @@ const routes: Routes = [ canActivate: [AuthGuardService], data: { state: 'sync' }, }, + { + path: 'excluded-domains', + component: ExcludedDomainsComponent, + canActivate: [AuthGuardService], + data: { state: 'excluded-domains' }, + }, { path: 'premium', component: PremiumComponent, diff --git a/src/popup/app.module.ts b/src/popup/app.module.ts index 125f7a713e..63e8c92c32 100644 --- a/src/popup/app.module.ts +++ b/src/popup/app.module.ts @@ -29,6 +29,7 @@ import { AppComponent } from './app.component'; import { PasswordGeneratorHistoryComponent } from './generator/password-generator-history.component'; import { PasswordGeneratorComponent } from './generator/password-generator.component'; import { PrivateModeComponent } from './private-mode.component'; +import { ExcludedDomainsComponent } from './settings/excluded-domains.component'; import { ExportComponent } from './settings/export.component'; import { FolderAddEditComponent } from './settings/folder-add-edit.component'; import { FoldersComponent } from './settings/folders.component'; @@ -181,6 +182,7 @@ registerLocaleData(localeZhTw, 'zh-TW'); ColorPasswordPipe, CurrentTabComponent, EnvironmentComponent, + ExcludedDomainsComponent, ExportComponent, FallbackSrcDirective, FolderAddEditComponent, diff --git a/src/popup/settings/excluded-domains.component.html b/src/popup/settings/excluded-domains.component.html new file mode 100644 index 0000000000..7a10449282 --- /dev/null +++ b/src/popup/settings/excluded-domains.component.html @@ -0,0 +1,53 @@ +
\ No newline at end of file diff --git a/src/popup/settings/excluded-domains.component.ts b/src/popup/settings/excluded-domains.component.ts new file mode 100644 index 0000000000..57bfa0bb02 --- /dev/null +++ b/src/popup/settings/excluded-domains.component.ts @@ -0,0 +1,112 @@ +import { + Component, + OnDestroy, + OnInit, + NgZone +} from '@angular/core'; +import { Router } from '@angular/router'; + +import { I18nService } from 'jslib/abstractions/i18n.service'; +import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service'; +import { StorageService } from 'jslib/abstractions/storage.service'; +import { ConstantsService } from 'jslib/services/constants.service'; +import { BroadcasterService } from 'jslib/angular/services/broadcaster.service'; + +import { BrowserApi } from '../../browser/browserApi'; +import { Utils } from 'jslib/misc/utils'; + +interface ExcludedDomain { + uri: string; + showCurrentUris: boolean; +} + +const BroadcasterSubscriptionId = 'excludedDomains'; + +@Component({ + selector: 'app-excluded-domains', + templateUrl: 'excluded-domains.component.html', +}) +export class ExcludedDomainsComponent implements OnInit, OnDestroy { + excludedDomains: ExcludedDomain[] = []; + currentUris: string[]; + loadCurrentUrisTimeout: number; + + constructor(private storageService: StorageService, + private i18nService: I18nService, private router: Router, + private broadcasterService: BroadcasterService, private ngZone: NgZone, + private platformUtilsService: PlatformUtilsService) { + } + + async ngOnInit() { + const savedDomains = await this.storageService.get