mirror of
https://github.com/bitwarden/browser
synced 2025-12-19 17:53:39 +00:00
* Use account service to track accounts and active account * Remove state service active account Observables. * Add email verified to account service * Do not store account info on logged out accounts * Add account activity tracking to account service * Use last account activity from account service * migrate or replicate account service data * Add `AccountActivityService` that handles storing account last active data * Move active and next active user to account service * Remove authenticated accounts from state object * Fold account activity into account service * Fix builds * Fix desktop app switch * Fix logging out non active user * Expand helper to handle new authenticated accounts location * Prefer view observable to tons of async pipes * Fix `npm run test:types` * Correct user activity sorting test * Be more precise about log out messaging * Fix dev compare errors All stored values are serializable, the next step wasn't necessary and was erroring on some types that lack `toString`. * If the account in unlocked on load of lock component, navigate away from lock screen * Handle no users case for auth service statuses * Specify account to switch to * Filter active account out of inactive accounts * Prefer constructor init * Improve comparator * Use helper methods internally * Fixup component tests * Clarify name * Ensure accounts object has only valid userIds * Capitalize const values * Prefer descriptive, single-responsibility guards * Update libs/common/src/state-migrations/migrate.ts Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com> * Fix merge * Add user Id validation activity for undefined was being set, which was resulting in requests for the auth status of `"undefined"` (string) userId, due to key enumeration. These changes stop that at both locations, as well as account add for good measure. --------- Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
73 lines
2.6 KiB
TypeScript
73 lines
2.6 KiB
TypeScript
import { Component, Input } from "@angular/core";
|
|
import { ActivatedRoute } from "@angular/router";
|
|
import { map, Observable } from "rxjs";
|
|
|
|
import { User } from "@bitwarden/angular/pipes/user-name.pipe";
|
|
import { UnassignedItemsBannerService } from "@bitwarden/angular/services/unassigned-items-banner.service";
|
|
import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service";
|
|
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
|
|
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
|
|
import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum";
|
|
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
|
|
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
|
|
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
|
import { UserId } from "@bitwarden/common/types/guid";
|
|
|
|
@Component({
|
|
selector: "app-header",
|
|
templateUrl: "./web-header.component.html",
|
|
})
|
|
export class WebHeaderComponent {
|
|
/**
|
|
* Custom title that overrides the route data `titleId`
|
|
*/
|
|
@Input() title: string;
|
|
|
|
/**
|
|
* Icon to show before the title
|
|
*/
|
|
@Input() icon: string;
|
|
|
|
protected routeData$: Observable<{ titleId: string }>;
|
|
protected account$: Observable<User & { id: UserId }>;
|
|
protected canLock$: Observable<boolean>;
|
|
protected selfHosted: boolean;
|
|
protected hostname = location.hostname;
|
|
protected unassignedItemsBannerEnabled$ = this.configService.getFeatureFlag$(
|
|
FeatureFlag.UnassignedItemsBanner,
|
|
);
|
|
|
|
constructor(
|
|
private route: ActivatedRoute,
|
|
private platformUtilsService: PlatformUtilsService,
|
|
private vaultTimeoutSettingsService: VaultTimeoutSettingsService,
|
|
private messagingService: MessagingService,
|
|
protected unassignedItemsBannerService: UnassignedItemsBannerService,
|
|
private configService: ConfigService,
|
|
private accountService: AccountService,
|
|
) {
|
|
this.routeData$ = this.route.data.pipe(
|
|
map((params) => {
|
|
return {
|
|
titleId: params.titleId,
|
|
};
|
|
}),
|
|
);
|
|
|
|
this.selfHosted = this.platformUtilsService.isSelfHost();
|
|
|
|
this.account$ = this.accountService.activeAccount$;
|
|
this.canLock$ = this.vaultTimeoutSettingsService
|
|
.availableVaultTimeoutActions$()
|
|
.pipe(map((actions) => actions.includes(VaultTimeoutAction.Lock)));
|
|
}
|
|
|
|
protected lock() {
|
|
this.messagingService.send("lockVault");
|
|
}
|
|
|
|
protected logout() {
|
|
this.messagingService.send("logout");
|
|
}
|
|
}
|