mirror of
https://github.com/bitwarden/browser
synced 2025-12-19 09:43:23 +00:00
* [SG-163] Two step login flow web (#3648) * two step login flow * moved code from old branch and reafctored * fixed review comments * [SG-164] Two Step Login Flow - Browser (#3793) * Add new messages * Remove SSO button from home component * Change create account button to text * Add top padding to create account link * Add email input to HomeComponent * Add continue button to email input * Add form to home component * Retreive email from state service * Redirect to login after submit * Add error message for invalid email * Remove email input from login component * Remove loggingInTo from under MP input * Style the MP hint link * Add self hosted domain to email form * Made the mp hint link bold * Add the new login button * Style app-private-mode-warning in its component * Bitwarden -> Login text change * Remove the old login button * Cancel -> Close text change * Add avatar to login header * Login -> LoginWithMasterPassword text change * Add SSO button to login screen * Add not you button * Allow all clients to use the email query param on the login component * Introduct HomeGuard * Clear remembered email when clicking Not You * Make remember email opt-in * Use formGroup.patchValue instead of directly patching individual controls * [SG-165] Desktop login flow changes (#3814) * two step login flow * moved code from old branch and reafctored * fixed review comments * Make toggleValidateEmail in base class public * Add desktop login messages * Desktop login flow changes * Fix known device api error * Only submit if email has been validated * Clear remembered email when switching accounts * Fix merge issue * Add 'login with another device' button * Remove 'log in with another device' button for now * Pin login pag content to top instead of center justified * Leave email if 'Not you?' is clicked * Continue when enter is hit on email input Co-authored-by: gbubemismith <gsmithwalter@gmail.com> * [SG-750] and [SG-751] Web two step login bug fixes (#3843) * Continue when enter is hit on email input * Mark email input as touched on 'continue' so field is validated * disable login with device on self-hosted (#3895) * [SG-753] Keep email after hint component is launched in browser (#3883) * Keep email after hint component is launched in browser * Use query params instead of state for consistency * Send email and rememberEmail to home component on navigation (#3897) * removed avatar and close button from the password screen (#3901) * [SG-781] Remove extra login page and remove rememberEmail code (#3902) * Remove browser home guard * Always remember email for browser * Remove login landing page button * [SG-782] Add login service to streamline login form data persistence (#3911) * Add login service and abstraction * Inject login service into apps * Inject and use new service in login component * Use service in hint component to prefill email * Add method in LoginService to clear service values * Add LoginService to two-factor component to clear values * make login.service variables private Co-authored-by: Gbubemi Smith <gsmith@bitwarden.com> Co-authored-by: Addison Beck <addisonbeck1@gmail.com> Co-authored-by: Robyn MacCallum <robyntmaccallum@gmail.com> Co-authored-by: gbubemismith <gsmithwalter@gmail.com>
103 lines
3.3 KiB
HTML
103 lines
3.3 KiB
HTML
<button
|
|
class="account-switcher"
|
|
(click)="toggle()"
|
|
cdkOverlayOrigin
|
|
#trigger="cdkOverlayOrigin"
|
|
[hidden]="!showSwitcher"
|
|
aria-haspopup="menu"
|
|
aria-controls="cdk-overlay-container"
|
|
[attr.aria-expanded]="isOpen"
|
|
>
|
|
<ng-container *ngIf="activeAccount?.email != null; else noActiveAccount">
|
|
<app-avatar
|
|
[text]="activeAccount.name"
|
|
[id]="activeAccount.id"
|
|
size="25"
|
|
[circle]="true"
|
|
[fontSize]="14"
|
|
[dynamic]="true"
|
|
*ngIf="activeAccount.email != null"
|
|
aria-hidden="true"
|
|
></app-avatar>
|
|
<span>{{ activeAccount.email }}</span>
|
|
</ng-container>
|
|
<ng-template #noActiveAccount>
|
|
<span>{{ "switchAccount" | i18n }}</span>
|
|
</ng-template>
|
|
<i
|
|
class="bwi"
|
|
aria-hidden="true"
|
|
[ngClass]="{ 'bwi-angle-down': !isOpen, 'bwi-chevron-up': isOpen }"
|
|
></i>
|
|
</button>
|
|
|
|
<ng-template
|
|
cdkConnectedOverlay
|
|
[cdkConnectedOverlayOrigin]="trigger"
|
|
[cdkConnectedOverlayHasBackdrop]="true"
|
|
[cdkConnectedOverlayBackdropClass]="'cdk-overlay-transparent-backdrop'"
|
|
(backdropClick)="close()"
|
|
(detach)="close()"
|
|
[cdkConnectedOverlayOpen]="showSwitcher && isOpen"
|
|
[cdkConnectedOverlayPositions]="overlayPostition"
|
|
cdkConnectedOverlayMinWidth="250px"
|
|
>
|
|
<div
|
|
class="account-switcher-dropdown"
|
|
[@transformPanel]="'open'"
|
|
cdkTrapFocus
|
|
cdkTrapFocusAutoCapture
|
|
role="dialog"
|
|
aria-modal="true"
|
|
>
|
|
<div class="accounts" *ngIf="numberOfAccounts > 0">
|
|
<button
|
|
*ngFor="let a of accounts | keyvalue"
|
|
class="account"
|
|
(click)="switch(a.key)"
|
|
appA11yTitle="{{ 'loggedInAsOn' | i18n: a.value.profile.email:a.value.serverUrl }}"
|
|
attr.aria-label="{{ 'switchAccount' | i18n }}"
|
|
>
|
|
<app-avatar
|
|
[text]="a.value.profile.name ?? a.value.profile.email"
|
|
[id]="a.value.profile.userId"
|
|
size="25"
|
|
[circle]="true"
|
|
[fontSize]="14"
|
|
[dynamic]="true"
|
|
*ngIf="a.value.profile.email != null"
|
|
aria-hidden="true"
|
|
></app-avatar>
|
|
<div class="accountInfo">
|
|
<span class="email" aria-hidden="true">{{ a.value.profile.email }}</span>
|
|
<span class="server" aria-hidden="true" *ngIf="a.value.serverUrl != 'bitwarden.com'">{{
|
|
a.value.serverUrl
|
|
}}</span>
|
|
<span class="status" aria-hidden="true">{{
|
|
(a.value.profile.authenticationStatus === authStatus.Unlocked ? "unlocked" : "locked")
|
|
| i18n
|
|
}}</span>
|
|
</div>
|
|
<i
|
|
class="bwi bwi-2x text-muted"
|
|
[ngClass]="
|
|
a.value.profile.authenticationStatus == authStatus.Unlocked ? 'bwi-unlock' : 'bwi-lock'
|
|
"
|
|
aria-hidden="true"
|
|
></i>
|
|
</button>
|
|
</div>
|
|
<ng-container *ngIf="activeAccount?.email != null">
|
|
<div class="border" *ngIf="numberOfAccounts > 0"></div>
|
|
<ng-container *ngIf="numberOfAccounts < 4">
|
|
<button type="button" class="add" (click)="addAccount()">
|
|
<i class="bwi bwi-plus" aria-hidden="true"></i> {{ "addAccount" | i18n }}
|
|
</button>
|
|
</ng-container>
|
|
<ng-container *ngIf="numberOfAccounts == 4">
|
|
<span class="accountLimitReached">{{ "accountSwitcherLimitReached" | i18n }} </span>
|
|
</ng-container>
|
|
</ng-container>
|
|
</div>
|
|
</ng-template>
|