import { Directive, Input } from "@angular/core"; import { EnvironmentService } from "jslib-common/abstractions/environment.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { CaptchaIFrame } from "jslib-common/misc/captcha_iframe"; import { Utils } from "jslib-common/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 webVaultUrl = this.environmentService.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; } }