diff --git a/src/app/components/premium-badge.component.ts b/src/app/components/premium-badge.component.ts new file mode 100644 index 00000000..86a88d51 --- /dev/null +++ b/src/app/components/premium-badge.component.ts @@ -0,0 +1,19 @@ +import { Component } from "@angular/core"; + +import { MessagingService } from "jslib-common/abstractions/messaging.service"; + +@Component({ + selector: "app-premium-badge", + template: ` + + `, +}) +export class PremiumBadgeComponent { + constructor(private messagingService: MessagingService) {} + + premiumRequired() { + this.messagingService.send("premiumRequired"); + } +} diff --git a/src/app/layouts/navbar.component.html b/src/app/layouts/navbar.component.html index 13fc0846..c03c2bdf 100644 --- a/src/app/layouts/navbar.component.html +++ b/src/app/layouts/navbar.component.html @@ -24,6 +24,9 @@ + diff --git a/src/app/organizations/tools/exposed-passwords-report.component.ts b/src/app/organizations/tools/exposed-passwords-report.component.ts index 611d9cd1..1a860864 100644 --- a/src/app/organizations/tools/exposed-passwords-report.component.ts +++ b/src/app/organizations/tools/exposed-passwords-report.component.ts @@ -11,11 +11,11 @@ import { StateService } from "jslib-common/abstractions/state.service"; import { Cipher } from "jslib-common/models/domain/cipher"; import { CipherView } from "jslib-common/models/view/cipherView"; -import { ExposedPasswordsReportComponent as BaseExposedPasswordsReportComponent } from "../../tools/exposed-passwords-report.component"; +import { ExposedPasswordsReportComponent as BaseExposedPasswordsReportComponent } from "../../reports/exposed-passwords-report.component"; @Component({ selector: "app-exposed-passwords-report", - templateUrl: "../../tools/exposed-passwords-report.component.html", + templateUrl: "../../reports/exposed-passwords-report.component.html", }) export class ExposedPasswordsReportComponent extends BaseExposedPasswordsReportComponent { manageableCiphers: Cipher[]; diff --git a/src/app/organizations/tools/inactive-two-factor-report.component.ts b/src/app/organizations/tools/inactive-two-factor-report.component.ts index 3964468f..5aec67d5 100644 --- a/src/app/organizations/tools/inactive-two-factor-report.component.ts +++ b/src/app/organizations/tools/inactive-two-factor-report.component.ts @@ -10,11 +10,11 @@ import { PasswordRepromptService } from "jslib-common/abstractions/passwordRepro import { StateService } from "jslib-common/abstractions/state.service"; import { CipherView } from "jslib-common/models/view/cipherView"; -import { InactiveTwoFactorReportComponent as BaseInactiveTwoFactorReportComponent } from "../../tools/inactive-two-factor-report.component"; +import { InactiveTwoFactorReportComponent as BaseInactiveTwoFactorReportComponent } from "../../reports/inactive-two-factor-report.component"; @Component({ selector: "app-inactive-two-factor-report", - templateUrl: "../../tools/inactive-two-factor-report.component.html", + templateUrl: "../../reports/inactive-two-factor-report.component.html", }) export class InactiveTwoFactorReportComponent extends BaseInactiveTwoFactorReportComponent { constructor( diff --git a/src/app/organizations/tools/reused-passwords-report.component.ts b/src/app/organizations/tools/reused-passwords-report.component.ts index 6b9bc975..4aa8ab70 100644 --- a/src/app/organizations/tools/reused-passwords-report.component.ts +++ b/src/app/organizations/tools/reused-passwords-report.component.ts @@ -10,11 +10,11 @@ import { StateService } from "jslib-common/abstractions/state.service"; import { Cipher } from "jslib-common/models/domain/cipher"; import { CipherView } from "jslib-common/models/view/cipherView"; -import { ReusedPasswordsReportComponent as BaseReusedPasswordsReportComponent } from "../../tools/reused-passwords-report.component"; +import { ReusedPasswordsReportComponent as BaseReusedPasswordsReportComponent } from "../../reports/reused-passwords-report.component"; @Component({ selector: "app-reused-passwords-report", - templateUrl: "../../tools/reused-passwords-report.component.html", + templateUrl: "../../reports/reused-passwords-report.component.html", }) export class ReusedPasswordsReportComponent extends BaseReusedPasswordsReportComponent { manageableCiphers: Cipher[]; diff --git a/src/app/organizations/tools/unsecured-websites-report.component.ts b/src/app/organizations/tools/unsecured-websites-report.component.ts index 2b0b87f8..90911462 100644 --- a/src/app/organizations/tools/unsecured-websites-report.component.ts +++ b/src/app/organizations/tools/unsecured-websites-report.component.ts @@ -9,11 +9,11 @@ import { PasswordRepromptService } from "jslib-common/abstractions/passwordRepro import { StateService } from "jslib-common/abstractions/state.service"; import { CipherView } from "jslib-common/models/view/cipherView"; -import { UnsecuredWebsitesReportComponent as BaseUnsecuredWebsitesReportComponent } from "../../tools/unsecured-websites-report.component"; +import { UnsecuredWebsitesReportComponent as BaseUnsecuredWebsitesReportComponent } from "../../reports/unsecured-websites-report.component"; @Component({ selector: "app-unsecured-websites-report", - templateUrl: "../../tools/unsecured-websites-report.component.html", + templateUrl: "../../reports/unsecured-websites-report.component.html", }) export class UnsecuredWebsitesReportComponent extends BaseUnsecuredWebsitesReportComponent { constructor( diff --git a/src/app/organizations/tools/weak-passwords-report.component.ts b/src/app/organizations/tools/weak-passwords-report.component.ts index ca7a46b2..b79b73b0 100644 --- a/src/app/organizations/tools/weak-passwords-report.component.ts +++ b/src/app/organizations/tools/weak-passwords-report.component.ts @@ -11,11 +11,11 @@ import { StateService } from "jslib-common/abstractions/state.service"; import { Cipher } from "jslib-common/models/domain/cipher"; import { CipherView } from "jslib-common/models/view/cipherView"; -import { WeakPasswordsReportComponent as BaseWeakPasswordsReportComponent } from "../../tools/weak-passwords-report.component"; +import { WeakPasswordsReportComponent as BaseWeakPasswordsReportComponent } from "../../reports/weak-passwords-report.component"; @Component({ selector: "app-weak-passwords-report", - templateUrl: "../../tools/weak-passwords-report.component.html", + templateUrl: "../../reports/weak-passwords-report.component.html", }) export class WeakPasswordsReportComponent extends BaseWeakPasswordsReportComponent { manageableCiphers: Cipher[]; diff --git a/src/app/oss-routing.module.ts b/src/app/oss-routing.module.ts index df7c5e1c..6ae80470 100644 --- a/src/app/oss-routing.module.ts +++ b/src/app/oss-routing.module.ts @@ -64,16 +64,10 @@ import { SponsoredFamiliesComponent } from "./settings/sponsored-families.compon import { TwoFactorSetupComponent } from "./settings/two-factor-setup.component"; import { UserBillingComponent } from "./settings/user-billing.component"; import { UserSubscriptionComponent } from "./settings/user-subscription.component"; -import { BreachReportComponent } from "./tools/breach-report.component"; import { ExportComponent } from "./tools/export.component"; -import { ExposedPasswordsReportComponent } from "./tools/exposed-passwords-report.component"; import { ImportComponent } from "./tools/import.component"; -import { InactiveTwoFactorReportComponent } from "./tools/inactive-two-factor-report.component"; import { PasswordGeneratorComponent } from "./tools/password-generator.component"; -import { ReusedPasswordsReportComponent } from "./tools/reused-passwords-report.component"; import { ToolsComponent } from "./tools/tools.component"; -import { UnsecuredWebsitesReportComponent } from "./tools/unsecured-websites-report.component"; -import { WeakPasswordsReportComponent } from "./tools/weak-passwords-report.component"; import { VaultComponent } from "./vault/vault.component"; const routes: Routes = [ @@ -242,38 +236,12 @@ const routes: Routes = [ component: PasswordGeneratorComponent, data: { titleId: "generator" }, }, - { - path: "breach-report", - component: BreachReportComponent, - data: { titleId: "dataBreachReport" }, - }, - { - path: "reused-passwords-report", - component: ReusedPasswordsReportComponent, - data: { titleId: "reusedPasswordsReport" }, - }, - { - path: "unsecured-websites-report", - component: UnsecuredWebsitesReportComponent, - data: { titleId: "unsecuredWebsitesReport" }, - }, - { - path: "weak-passwords-report", - component: WeakPasswordsReportComponent, - data: { titleId: "weakPasswordsReport" }, - }, - { - path: "exposed-passwords-report", - component: ExposedPasswordsReportComponent, - data: { titleId: "exposedPasswordsReport" }, - }, - { - path: "inactive-two-factor-report", - component: InactiveTwoFactorReportComponent, - data: { titleId: "inactive2faReport" }, - }, ], }, + { + path: "reports", + loadChildren: async () => (await import("./reports/reports.module")).ReportsModule, + }, { path: "setup/families-for-enterprise", component: FamiliesForEnterpriseSetupComponent }, ], }, diff --git a/src/app/oss.module.ts b/src/app/oss.module.ts index 2bc8e55b..f5ea6a9b 100644 --- a/src/app/oss.module.ts +++ b/src/app/oss.module.ts @@ -53,6 +53,7 @@ import localeZhTw from "@angular/common/locales/zh-Hant"; import { NgModule } from "@angular/core"; import { FormsModule, ReactiveFormsModule } from "@angular/forms"; import { RouterModule } from "@angular/router"; +import { BadgeModule, ButtonModule } from "@bitwarden/components"; import { InfiniteScrollModule } from "ngx-infinite-scroll"; import { ToastrModule } from "ngx-toastr"; @@ -78,6 +79,7 @@ import { VerifyRecoverDeleteComponent } from "./accounts/verify-recover-delete.c import { NestedCheckboxComponent } from "./components/nested-checkbox.component"; import { PasswordRepromptComponent } from "./components/password-reprompt.component"; import { PasswordStrengthComponent } from "./components/password-strength.component"; +import { PremiumBadgeComponent } from "./components/premium-badge.component"; import { FooterComponent } from "./layouts/footer.component"; import { FrontendLayoutComponent } from "./layouts/frontend-layout.component"; import { NavbarComponent } from "./layouts/navbar.component"; @@ -135,6 +137,15 @@ import { CollectionsComponent as OrgCollectionsComponent } from "./organizations import { GroupingsComponent as OrgGroupingsComponent } from "./organizations/vault/groupings.component"; import { VaultComponent as OrgVaultComponent } from "./organizations/vault/vault.component"; import { ProvidersComponent } from "./providers/providers.component"; +import { BreachReportComponent } from "./reports/breach-report.component"; +import { ExposedPasswordsReportComponent } from "./reports/exposed-passwords-report.component"; +import { InactiveTwoFactorReportComponent } from "./reports/inactive-two-factor-report.component"; +import { ReportCardComponent } from "./reports/report-card.component"; +import { ReportListComponent } from "./reports/report-list.component"; +import { ReportsComponent } from "./reports/reports.component"; +import { ReusedPasswordsReportComponent } from "./reports/reused-passwords-report.component"; +import { UnsecuredWebsitesReportComponent } from "./reports/unsecured-websites-report.component"; +import { WeakPasswordsReportComponent } from "./reports/weak-passwords-report.component"; import { AccessComponent } from "./send/access.component"; import { AddEditComponent as SendAddEditComponent } from "./send/add-edit.component"; import { EffluxDatesComponent as SendEffluxDatesComponent } from "./send/efflux-dates.component"; @@ -184,17 +195,11 @@ import { UserBillingComponent } from "./settings/user-billing.component"; import { UserSubscriptionComponent } from "./settings/user-subscription.component"; import { VaultTimeoutInputComponent } from "./settings/vault-timeout-input.component"; import { VerifyEmailComponent } from "./settings/verify-email.component"; -import { BreachReportComponent } from "./tools/breach-report.component"; import { ExportComponent } from "./tools/export.component"; -import { ExposedPasswordsReportComponent } from "./tools/exposed-passwords-report.component"; import { ImportComponent } from "./tools/import.component"; -import { InactiveTwoFactorReportComponent } from "./tools/inactive-two-factor-report.component"; import { PasswordGeneratorHistoryComponent } from "./tools/password-generator-history.component"; import { PasswordGeneratorComponent } from "./tools/password-generator.component"; -import { ReusedPasswordsReportComponent } from "./tools/reused-passwords-report.component"; import { ToolsComponent } from "./tools/tools.component"; -import { UnsecuredWebsitesReportComponent } from "./tools/unsecured-websites-report.component"; -import { WeakPasswordsReportComponent } from "./tools/weak-passwords-report.component"; import { AddEditCustomFieldsComponent } from "./vault/add-edit-custom-fields.component"; import { AddEditComponent } from "./vault/add-edit.component"; import { AttachmentsComponent } from "./vault/attachments.component"; @@ -271,8 +276,11 @@ registerLocaleData(localeZhTw, "zh-TW"); ReactiveFormsModule, RouterModule, ToastrModule, + BadgeModule, + ButtonModule, ], declarations: [ + PremiumBadgeComponent, AcceptEmergencyComponent, AcceptOrganizationComponent, AccessComponent, @@ -384,6 +392,9 @@ registerLocaleData(localeZhTw, "zh-TW"); RecoverTwoFactorComponent, RegisterComponent, RemovePasswordComponent, + ReportCardComponent, + ReportListComponent, + ReportsComponent, RequireSsoPolicyComponent, ResetPasswordPolicyComponent, ReusedPasswordsReportComponent, diff --git a/src/app/tools/breach-report.component.html b/src/app/reports/breach-report.component.html similarity index 95% rename from src/app/tools/breach-report.component.html rename to src/app/reports/breach-report.component.html index edecda17..b6195bfd 100644 --- a/src/app/tools/breach-report.component.html +++ b/src/app/reports/breach-report.component.html @@ -17,7 +17,13 @@ {{ "breachCheckUsernameEmail" | i18n }} - diff --git a/src/app/tools/breach-report.component.ts b/src/app/reports/breach-report.component.ts similarity index 100% rename from src/app/tools/breach-report.component.ts rename to src/app/reports/breach-report.component.ts diff --git a/src/app/tools/cipher-report.component.ts b/src/app/reports/cipher-report.component.ts similarity index 100% rename from src/app/tools/cipher-report.component.ts rename to src/app/reports/cipher-report.component.ts diff --git a/src/app/tools/exposed-passwords-report.component.html b/src/app/reports/exposed-passwords-report.component.html similarity index 95% rename from src/app/tools/exposed-passwords-report.component.html rename to src/app/reports/exposed-passwords-report.component.html index 15368122..496cd108 100644 --- a/src/app/tools/exposed-passwords-report.component.html +++ b/src/app/reports/exposed-passwords-report.component.html @@ -2,7 +2,14 @@

{{ "exposedPasswordsReport" | i18n }}

{{ "exposedPasswordsReportDesc" | i18n }}

- diff --git a/src/app/tools/exposed-passwords-report.component.ts b/src/app/reports/exposed-passwords-report.component.ts similarity index 100% rename from src/app/tools/exposed-passwords-report.component.ts rename to src/app/reports/exposed-passwords-report.component.ts diff --git a/src/app/tools/inactive-two-factor-report.component.html b/src/app/reports/inactive-two-factor-report.component.html similarity index 100% rename from src/app/tools/inactive-two-factor-report.component.html rename to src/app/reports/inactive-two-factor-report.component.html diff --git a/src/app/tools/inactive-two-factor-report.component.ts b/src/app/reports/inactive-two-factor-report.component.ts similarity index 100% rename from src/app/tools/inactive-two-factor-report.component.ts rename to src/app/reports/inactive-two-factor-report.component.ts diff --git a/src/app/reports/report-card.component.html b/src/app/reports/report-card.component.html new file mode 100644 index 00000000..1816f11c --- /dev/null +++ b/src/app/reports/report-card.component.html @@ -0,0 +1,25 @@ + +
+
+
+
+
+

{{ report.title | i18n }}

+

{{ report.description | i18n }}

+
+ {{ "premium" | i18n }} +
+
diff --git a/src/app/reports/report-card.component.ts b/src/app/reports/report-card.component.ts new file mode 100644 index 00000000..d6a9470c --- /dev/null +++ b/src/app/reports/report-card.component.ts @@ -0,0 +1,166 @@ +import { Component, Input, OnInit } from "@angular/core"; +import { DomSanitizer } from "@angular/platform-browser"; + +import { MessagingService } from "jslib-common/abstractions/messaging.service"; +import { StateService } from "jslib-common/abstractions/state.service"; + +export enum ReportTypes { + "exposedPasswords" = "exposedPasswords", + "reusedPasswords" = "reusedPasswords", + "weakPasswords" = "weakPasswords", + "unsecuredWebsites" = "unsecuredWebsites", + "inactive2fa" = "inactive2fa", + "dataBreach" = "dataBreach", +} + +type ReportEntry = { + title: string; + description: string; + route: string; + icon: string; + requiresPremium: boolean; +}; + +const reports: Record = { + exposedPasswords: { + title: "exposedPasswordsReport", + description: "exposedPasswordsReportDesc", + route: "exposed-passwords-report", + icon: ` + + + + + + + + + + + + + `, + requiresPremium: true, + }, + reusedPasswords: { + title: "reusedPasswordsReport", + description: "reusedPasswordsReportDesc", + route: "reused-passwords-report", + icon: ` + + + + + + `, + requiresPremium: true, + }, + weakPasswords: { + title: "weakPasswordsReport", + description: "weakPasswordsReportDesc", + route: "weak-passwords-report", + icon: ` + + + + + + + `, + requiresPremium: true, + }, + unsecuredWebsites: { + title: "unsecuredWebsitesReport", + description: "unsecuredWebsitesReportDesc", + route: "unsecured-websites-report", + icon: ` + + + + + + + + + `, + requiresPremium: true, + }, + inactive2fa: { + title: "inactive2faReport", + description: "inactive2faReportDesc", + route: "inactive-two-factor-report", + icon: ` + + + + + + + `, + requiresPremium: true, + }, + dataBreach: { + title: "dataBreachReport", + description: "breachDesc", + route: "breach-report", + icon: ` + + + + + + + + + + + `, + requiresPremium: false, + }, +}; + +@Component({ + selector: "app-report-card", + templateUrl: "report-card.component.html", +}) +export class ReportCardComponent implements OnInit { + @Input() type: ReportTypes; + + report: ReportEntry; + + hasPremium: boolean; + + constructor( + private stateService: StateService, + private messagingService: MessagingService, + private sanitizer: DomSanitizer + ) {} + + async ngOnInit() { + this.report = reports[this.type]; + + this.hasPremium = await this.stateService.getCanAccessPremium(); + } + + get premium() { + return this.report.requiresPremium && !this.hasPremium; + } + + get route() { + if (this.premium) { + return null; + } + + return this.report.route; + } + + get icon() { + return this.sanitizer.bypassSecurityTrustHtml(this.report.icon); + } + + click() { + if (this.premium) { + this.messagingService.send("premiumRequired"); + } + } +} diff --git a/src/app/reports/report-list.component.html b/src/app/reports/report-list.component.html new file mode 100644 index 00000000..e3028731 --- /dev/null +++ b/src/app/reports/report-list.component.html @@ -0,0 +1,11 @@ + + +

{{ "reportsDesc" | i18n }}

+ +
+
+ +
+
diff --git a/src/app/reports/report-list.component.ts b/src/app/reports/report-list.component.ts new file mode 100644 index 00000000..48894984 --- /dev/null +++ b/src/app/reports/report-list.component.ts @@ -0,0 +1,18 @@ +import { Component } from "@angular/core"; + +import { ReportTypes } from "./report-card.component"; + +@Component({ + selector: "app-report-list", + templateUrl: "report-list.component.html", +}) +export class ReportListComponent { + reports = [ + ReportTypes.exposedPasswords, + ReportTypes.reusedPasswords, + ReportTypes.weakPasswords, + ReportTypes.unsecuredWebsites, + ReportTypes.inactive2fa, + ReportTypes.dataBreach, + ]; +} diff --git a/src/app/reports/reports.component.html b/src/app/reports/reports.component.html new file mode 100644 index 00000000..2978a9e6 --- /dev/null +++ b/src/app/reports/reports.component.html @@ -0,0 +1,12 @@ +
+ + + +
diff --git a/src/app/reports/reports.component.ts b/src/app/reports/reports.component.ts new file mode 100644 index 00000000..c0e67ac5 --- /dev/null +++ b/src/app/reports/reports.component.ts @@ -0,0 +1,25 @@ +import { Component, OnDestroy } from "@angular/core"; +import { NavigationEnd, Router } from "@angular/router"; +import { Subscription } from "rxjs"; +import { filter } from "rxjs/operators"; + +@Component({ + selector: "app-reports", + templateUrl: "reports.component.html", +}) +export class ReportsComponent implements OnDestroy { + homepage = true; + subscription: Subscription; + + constructor(router: Router) { + this.subscription = router.events + .pipe(filter((event) => event instanceof NavigationEnd)) + .subscribe((event) => { + this.homepage = (event as NavigationEnd).url == "/reports"; + }); + } + + ngOnDestroy(): void { + this.subscription?.unsubscribe(); + } +} diff --git a/src/app/reports/reports.module.ts b/src/app/reports/reports.module.ts new file mode 100644 index 00000000..e9abf765 --- /dev/null +++ b/src/app/reports/reports.module.ts @@ -0,0 +1,60 @@ +import { NgModule } from "@angular/core"; +import { RouterModule, Routes } from "@angular/router"; + +import { AuthGuardService } from "jslib-angular/services/auth-guard.service"; + +import { BreachReportComponent } from "./breach-report.component"; +import { ExposedPasswordsReportComponent } from "./exposed-passwords-report.component"; +import { InactiveTwoFactorReportComponent } from "./inactive-two-factor-report.component"; +import { ReportListComponent } from "./report-list.component"; +import { ReportsComponent } from "./reports.component"; +import { ReusedPasswordsReportComponent } from "./reused-passwords-report.component"; +import { UnsecuredWebsitesReportComponent } from "./unsecured-websites-report.component"; +import { WeakPasswordsReportComponent } from "./weak-passwords-report.component"; + +const routes: Routes = [ + { + path: "", + component: ReportsComponent, + canActivate: [AuthGuardService], + children: [ + { path: "", pathMatch: "full", component: ReportListComponent, data: { homepage: true } }, + { + path: "breach-report", + component: BreachReportComponent, + data: { titleId: "dataBreachReport" }, + }, + { + path: "reused-passwords-report", + component: ReusedPasswordsReportComponent, + data: { titleId: "reusedPasswordsReport" }, + }, + { + path: "unsecured-websites-report", + component: UnsecuredWebsitesReportComponent, + data: { titleId: "unsecuredWebsitesReport" }, + }, + { + path: "weak-passwords-report", + component: WeakPasswordsReportComponent, + data: { titleId: "weakPasswordsReport" }, + }, + { + path: "exposed-passwords-report", + component: ExposedPasswordsReportComponent, + data: { titleId: "exposedPasswordsReport" }, + }, + { + path: "inactive-two-factor-report", + component: InactiveTwoFactorReportComponent, + data: { titleId: "inactive2faReport" }, + }, + ], + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class ReportsModule {} diff --git a/src/app/tools/reused-passwords-report.component.html b/src/app/reports/reused-passwords-report.component.html similarity index 100% rename from src/app/tools/reused-passwords-report.component.html rename to src/app/reports/reused-passwords-report.component.html diff --git a/src/app/tools/reused-passwords-report.component.ts b/src/app/reports/reused-passwords-report.component.ts similarity index 100% rename from src/app/tools/reused-passwords-report.component.ts rename to src/app/reports/reused-passwords-report.component.ts diff --git a/src/app/tools/unsecured-websites-report.component.html b/src/app/reports/unsecured-websites-report.component.html similarity index 100% rename from src/app/tools/unsecured-websites-report.component.html rename to src/app/reports/unsecured-websites-report.component.html diff --git a/src/app/tools/unsecured-websites-report.component.ts b/src/app/reports/unsecured-websites-report.component.ts similarity index 100% rename from src/app/tools/unsecured-websites-report.component.ts rename to src/app/reports/unsecured-websites-report.component.ts diff --git a/src/app/tools/weak-passwords-report.component.html b/src/app/reports/weak-passwords-report.component.html similarity index 100% rename from src/app/tools/weak-passwords-report.component.html rename to src/app/reports/weak-passwords-report.component.html diff --git a/src/app/tools/weak-passwords-report.component.ts b/src/app/reports/weak-passwords-report.component.ts similarity index 100% rename from src/app/tools/weak-passwords-report.component.ts rename to src/app/reports/weak-passwords-report.component.ts diff --git a/src/app/settings/emergency-access-add-edit.component.html b/src/app/settings/emergency-access-add-edit.component.html index c48b489e..b66a7451 100644 --- a/src/app/settings/emergency-access-add-edit.component.html +++ b/src/app/settings/emergency-access-add-edit.component.html @@ -9,7 +9,7 @@ > -
-
- {{ "reports" | i18n }} - -
- -
diff --git a/src/app/vault/add-edit.component.html b/src/app/vault/add-edit.component.html index 14a8079b..37410ea5 100644 --- a/src/app/vault/add-edit.component.html +++ b/src/app/vault/add-edit.component.html @@ -187,15 +187,10 @@ title="{{ 'verificationCodeTotp' | i18n }}" class="ml-2" /> - - {{ "premium" | i18n }} - +