Browse Source
* [PM-169][PM-142][PM-191] Add Environments to Web and Desktop (#5294) * [PM-1351] Add property to server-config.response. Change config to be able to fetch without being authed. * [PM-1351] fetch every hour. * [PM-1351] fetch on vault sync. * [PM-1351] browser desktop fetch configs on sync complete. * [PM-1351] Add methods to retrieve feature flags * [PM-1351] Add enum to use as key to get values feature flag values * [PM-1351] Remove debug code * [PM-1351] Get flags when unauthed. Add enums as params. Hourly always fetch. * [PM-1351] add check for authed user using auth service * [PM-169] Web: add drop down to select environment * [PM-169] Fix pop up menu margins. Add DisplayEuEnvironmentFlag. * [PM-169] Change menu name. * [PM-169] Add environment selector ts and html. Add declaration and import on login.module * [PM-169] Add environment selector to desktop. * [PM-169] Ignore lint error. * [PM-169] add takeUntil to subscribes * [PM-191] PR Fixes, code format * [PM-168] Add Environments to extension login/registration (#5434)pull/5481/head
28 changed files with 463 additions and 42 deletions
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
@ -1,5 +1,34 @@
@@ -1,5 +1,34 @@
|
||||
<router-outlet></router-outlet> |
||||
<div class="container my-5 text-muted text-center"> |
||||
<div class="tw-mb-1"> |
||||
<bit-menu #environmentOptions> |
||||
<a bitMenuItem href="https://vault.bitwarden.com" class="pr-4"> |
||||
<i |
||||
class="bwi bwi-fw bwi-sm bwi-check pb-1" |
||||
aria-hidden="true" |
||||
[style.visibility]="isEuServer ? 'hidden' : 'visible'" |
||||
></i> |
||||
<img src="../../images/us_flag.png" alt="" class="pb-1 mr-1" /> |
||||
{{ "us" | i18n }} |
||||
</a> |
||||
<a bitMenuItem href="https://vault.bitwarden.eu" class="pr-4" *ngIf="euServerFlagEnabled"> |
||||
<i |
||||
class="bwi bwi-fw bwi-sm bwi-check pb-1" |
||||
aria-hidden="true" |
||||
[style.visibility]="isEuServer ? 'visible' : 'hidden'" |
||||
></i> |
||||
<img src="../../images/eu_flag.png" alt="" class="pb-1 mr-1" /> |
||||
{{ "eu" | i18n }} |
||||
</a> |
||||
</bit-menu> |
||||
{{ "region" | i18n }}: |
||||
<a [routerLink]="[]" [bitMenuTriggerFor]="environmentOptions"> |
||||
<b>{{ isEuServer ? ("eu" | i18n) : ("us" | i18n) }}</b |
||||
><i class="bwi bwi-fw bwi-sm bwi-angle-down" aria-hidden="true"></i> |
||||
</a> |
||||
<br /> |
||||
</div> |
||||
|
||||
© {{ year }} Bitwarden Inc. <br /> |
||||
{{ "versionNumber" | i18n : version }} |
||||
</div> |
||||
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
@ -0,0 +1,86 @@
@@ -0,0 +1,86 @@
|
||||
<label class="environment-selector-btn"> |
||||
{{ "region" | i18n }}: |
||||
<a |
||||
(click)="toggle(null)" |
||||
cdkOverlayOrigin |
||||
#trigger="cdkOverlayOrigin" |
||||
aria-haspopup="menu" |
||||
aria-controls="cdk-overlay-container" |
||||
[ngSwitch]="selectedEnvironment" |
||||
> |
||||
<label *ngSwitchCase="ServerEnvironmentType.US" class="text-primary">{{ "us" | i18n }}</label> |
||||
<label *ngSwitchCase="ServerEnvironmentType.EU" class="text-primary">{{ "eu" | i18n }}</label> |
||||
<label *ngSwitchCase="ServerEnvironmentType.SelfHosted" class="text-primary">{{ |
||||
"selfHosted" | i18n |
||||
}}</label> |
||||
<i class="bwi bwi-fw bwi-sm bwi-angle-down" aria-hidden="true"></i> |
||||
</a> |
||||
</label> |
||||
|
||||
<ng-template |
||||
cdkConnectedOverlay |
||||
[cdkConnectedOverlayOrigin]="trigger" |
||||
(backdropClick)="close()" |
||||
(detach)="close()" |
||||
[cdkConnectedOverlayOpen]="isOpen" |
||||
[cdkConnectedOverlayPositions]="overlayPostition" |
||||
> |
||||
<div class="box-content"> |
||||
<div class="environment-selector-dialog" [@transformPanel]="'open'" role="dialog"> |
||||
<button |
||||
type="button" |
||||
class="environment-selector-dialog-item" |
||||
(click)="toggle(ServerEnvironmentType.US)" |
||||
> |
||||
<i |
||||
class="bwi bwi-fw bwi-sm bwi-check" |
||||
style="padding-bottom: 1px" |
||||
aria-hidden="true" |
||||
[style.visibility]=" |
||||
selectedEnvironment === ServerEnvironmentType.US ? 'visible' : 'hidden' |
||||
" |
||||
></i> |
||||
<img class="img-us" alt="" /> |
||||
<span>{{ "us" | i18n }}</span> |
||||
</button> |
||||
<br /> |
||||
<button |
||||
type="button" |
||||
class="environment-selector-dialog-item" |
||||
(click)="toggle(ServerEnvironmentType.EU)" |
||||
> |
||||
<i |
||||
class="bwi bwi-fw bwi-sm bwi-check" |
||||
style="padding-bottom: 1px" |
||||
aria-hidden="true" |
||||
[style.visibility]=" |
||||
selectedEnvironment === ServerEnvironmentType.EU ? 'visible' : 'hidden' |
||||
" |
||||
></i> |
||||
<img class="img-eu" alt="" /> |
||||
<span>{{ "eu" | i18n }}</span> |
||||
</button> |
||||
<br /> |
||||
<button |
||||
type="button" |
||||
class="environment-selector-dialog-item" |
||||
(click)="toggle(ServerEnvironmentType.SelfHosted)" |
||||
> |
||||
<i |
||||
class="bwi bwi-fw bwi-sm bwi-check" |
||||
style="padding-bottom: 1px" |
||||
aria-hidden="true" |
||||
[style.visibility]=" |
||||
selectedEnvironment === ServerEnvironmentType.SelfHosted ? 'visible' : 'hidden' |
||||
" |
||||
></i> |
||||
<i |
||||
class="bwi bwi-fw bwi-sm bwi-pencil-square" |
||||
style="padding-bottom: 1px" |
||||
aria-hidden="true" |
||||
></i> |
||||
<span>{{ "selfHosted" | i18n }}</span> |
||||
</button> |
||||
</div> |
||||
</div> |
||||
</ng-template> |
||||
@ -0,0 +1,103 @@
@@ -0,0 +1,103 @@
|
||||
import { animate, state, style, transition, trigger } from "@angular/animations"; |
||||
import { ConnectedPosition } from "@angular/cdk/overlay"; |
||||
import { Component, EventEmitter, OnDestroy, OnInit, Output } from "@angular/core"; |
||||
import { Router } from "@angular/router"; |
||||
import { Subject } from "rxjs"; |
||||
|
||||
import { ConfigServiceAbstraction } from "@bitwarden/common/abstractions/config/config.service.abstraction"; |
||||
import { EnvironmentService } from "@bitwarden/common/abstractions/environment.service"; |
||||
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; |
||||
|
||||
@Component({ |
||||
selector: "environment-selector", |
||||
templateUrl: "environment-selector.component.html", |
||||
animations: [ |
||||
trigger("transformPanel", [ |
||||
state( |
||||
"void", |
||||
style({ |
||||
opacity: 0, |
||||
}) |
||||
), |
||||
transition( |
||||
"void => open", |
||||
animate( |
||||
"100ms linear", |
||||
style({ |
||||
opacity: 1, |
||||
}) |
||||
) |
||||
), |
||||
transition("* => void", animate("100ms linear", style({ opacity: 0 }))), |
||||
]), |
||||
], |
||||
}) |
||||
export class EnvironmentSelectorComponent implements OnInit, OnDestroy { |
||||
@Output() onOpenSelfHostedSettings = new EventEmitter(); |
||||
isOpen = false; |
||||
showingModal = false; |
||||
selectedEnvironment: ServerEnvironment; |
||||
ServerEnvironmentType = ServerEnvironment; |
||||
euServerFlagEnabled: boolean; |
||||
overlayPostition: ConnectedPosition[] = [ |
||||
{ |
||||
originX: "start", |
||||
originY: "bottom", |
||||
overlayX: "start", |
||||
overlayY: "top", |
||||
}, |
||||
]; |
||||
protected componentDestroyed$: Subject<void> = new Subject(); |
||||
|
||||
constructor( |
||||
protected environmentService: EnvironmentService, |
||||
protected configService: ConfigServiceAbstraction, |
||||
protected router: Router |
||||
) {} |
||||
|
||||
async ngOnInit() { |
||||
this.euServerFlagEnabled = await this.configService.getFeatureFlagBool( |
||||
FeatureFlag.DisplayEuEnvironmentFlag |
||||
); |
||||
this.updateEnvironmentInfo(); |
||||
} |
||||
|
||||
ngOnDestroy(): void { |
||||
this.componentDestroyed$.next(); |
||||
this.componentDestroyed$.complete(); |
||||
} |
||||
|
||||
async toggle(option: ServerEnvironment) { |
||||
this.isOpen = !this.isOpen; |
||||
if (option === ServerEnvironment.EU) { |
||||
await this.environmentService.setUrls({ base: "https://vault.bitwarden.eu" }); |
||||
} else if (option === ServerEnvironment.US) { |
||||
await this.environmentService.setUrls({ base: "https://vault.bitwarden.com" }); |
||||
} else if (option === ServerEnvironment.SelfHosted) { |
||||
this.onOpenSelfHostedSettings.emit(); |
||||
} |
||||
this.updateEnvironmentInfo(); |
||||
} |
||||
|
||||
updateEnvironmentInfo() { |
||||
const webvaultUrl = this.environmentService.getWebVaultUrl(); |
||||
if (this.environmentService.isSelfHosted()) { |
||||
this.selectedEnvironment = ServerEnvironment.SelfHosted; |
||||
} else if (webvaultUrl != null && webvaultUrl.includes("bitwarden.eu")) { |
||||
this.selectedEnvironment = ServerEnvironment.EU; |
||||
} else { |
||||
this.selectedEnvironment = ServerEnvironment.US; |
||||
} |
||||
} |
||||
|
||||
close() { |
||||
this.isOpen = false; |
||||
this.updateEnvironmentInfo(); |
||||
} |
||||
} |
||||
|
||||
enum ServerEnvironment { |
||||
US = "US", |
||||
EU = "EU", |
||||
SelfHosted = "Self-hosted", |
||||
} |
||||
Loading…
Reference in new issue