mirror of
https://github.com/bitwarden/browser
synced 2025-12-06 00:13:28 +00:00
Refactor environment service to emit a single observable. This required significant changes to how the environment service behaves and tackles much of the tech debt planned for it.
56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
import { Directive, Input } from "@angular/core";
|
|
import { firstValueFrom } from "rxjs";
|
|
|
|
import { CaptchaIFrame } from "@bitwarden/common/auth/captcha-iframe";
|
|
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
|
|
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
|
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
|
import { Utils } from "@bitwarden/common/platform/misc/utils";
|
|
|
|
@Directive()
|
|
export abstract class CaptchaProtectedComponent {
|
|
@Input() captchaSiteKey: string = null;
|
|
captchaToken: string = null;
|
|
captcha: CaptchaIFrame;
|
|
|
|
constructor(
|
|
protected environmentService: EnvironmentService,
|
|
protected i18nService: I18nService,
|
|
protected platformUtilsService: PlatformUtilsService,
|
|
) {}
|
|
|
|
async setupCaptcha() {
|
|
const env = await firstValueFrom(this.environmentService.environment$);
|
|
const webVaultUrl = env.getWebVaultUrl();
|
|
|
|
this.captcha = new CaptchaIFrame(
|
|
window,
|
|
webVaultUrl,
|
|
this.i18nService,
|
|
(token: string) => {
|
|
this.captchaToken = token;
|
|
},
|
|
(error: string) => {
|
|
this.platformUtilsService.showToast("error", this.i18nService.t("errorOccurred"), error);
|
|
},
|
|
(info: string) => {
|
|
this.platformUtilsService.showToast("info", this.i18nService.t("info"), info);
|
|
},
|
|
);
|
|
}
|
|
|
|
showCaptcha() {
|
|
return !Utils.isNullOrWhitespace(this.captchaSiteKey);
|
|
}
|
|
|
|
protected handleCaptchaRequired(response: { captchaSiteKey: string }): boolean {
|
|
if (Utils.isNullOrWhitespace(response.captchaSiteKey)) {
|
|
return false;
|
|
}
|
|
|
|
this.captchaSiteKey = response.captchaSiteKey;
|
|
this.captcha.init(response.captchaSiteKey);
|
|
return true;
|
|
}
|
|
}
|