diff --git a/apps/desktop/src/app/accounts/accessibility-cookie.component.html b/apps/desktop/src/app/accounts/accessibility-cookie.component.html new file mode 100644 index 00000000000..fd52508eac3 --- /dev/null +++ b/apps/desktop/src/app/accounts/accessibility-cookie.component.html @@ -0,0 +1,33 @@ +
diff --git a/apps/desktop/src/app/accounts/accessibility-cookie.component.ts b/apps/desktop/src/app/accounts/accessibility-cookie.component.ts new file mode 100644 index 00000000000..968ed6702c9 --- /dev/null +++ b/apps/desktop/src/app/accounts/accessibility-cookie.component.ts @@ -0,0 +1,97 @@ +import { Component, NgZone } from "@angular/core"; +import { FormControl, FormGroup, Validators } from "@angular/forms"; +import { Router } from "@angular/router"; + +import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service"; +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 { Utils } from "jslib-common/misc/utils"; +import { getCookie } from "jslib-electron/utils"; + +const BroadcasterSubscriptionId = "AccessibilityCookieComponent"; + +@Component({ + selector: "app-accessibility-cookie", + templateUrl: "accessibility-cookie.component.html", +}) +export class AccessibilityCookieComponent { + listenForCookie = false; + hCaptchaWindow: Window; + + accessibilityForm = new FormGroup({ + link: new FormControl("", Validators.required), + }); + + constructor( + protected router: Router, + protected platformUtilsService: PlatformUtilsService, + protected environmentService: EnvironmentService, + protected i18nService: I18nService, + private broadcasterService: BroadcasterService, + protected ngZone: NgZone + ) {} + + async ngOnInit() { + this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => { + this.ngZone.run(() => { + switch (message.command) { + case "windowIsFocused": + if (this.listenForCookie) { + this.listenForCookie = false; + this.checkForCookie(); + } + break; + default: + } + }); + }); + } + + registerhCaptcha() { + this.platformUtilsService.launchUri("https://www.hcaptcha.com/accessibility"); + } + + async checkForCookie() { + this.hCaptchaWindow.close(); + const [cookie] = await getCookie("https://www.hcaptcha.com/", "hc_accessibility"); + if (cookie) { + this.onCookieSavedSuccess(); + } else { + this.onCookieSavedFailure(); + } + } + + onCookieSavedSuccess() { + this.platformUtilsService.showToast( + "success", + null, + this.i18nService.t("accessibilityCookieSaved") + ); + } + + onCookieSavedFailure() { + this.platformUtilsService.showToast( + "error", + null, + this.i18nService.t("noAccessibilityCookieSaved") + ); + } + + async submit() { + if (Utils.getDomain(this.accessibilityForm.value.link) !== "accounts.hcaptcha.com") { + this.platformUtilsService.showToast( + "error", + this.i18nService.t("errorOccurred"), + this.i18nService.t("invalidUrl") + ); + return; + } + this.listenForCookie = true; + this.hCaptchaWindow = window.open(this.accessibilityForm.value.link); + } + + ngOnDestroy() { + this.broadcasterService.unsubscribe(BroadcasterSubscriptionId); + } +} diff --git a/apps/desktop/src/app/accounts/login.component.html b/apps/desktop/src/app/accounts/login.component.html index 4ec1307f54b..1ce8f07e6bc 100644 --- a/apps/desktop/src/app/accounts/login.component.html +++ b/apps/desktop/src/app/accounts/login.component.html @@ -70,6 +70,10 @@