web/turnstile: refresh turnstile if it expires in background

also renamed `turnstileLoaded` to `turnstileSolved` for more clarity
This commit is contained in:
wukko 2024-11-18 21:05:47 +06:00
parent e09e098b27
commit b38cb77952
No known key found for this signature in database
GPG key ID: 3E30B3F26C7B4AA2
5 changed files with 31 additions and 17 deletions

View file

@ -2,7 +2,9 @@
import { onMount } from "svelte"; import { onMount } from "svelte";
import { cachedInfo } from "$lib/api/server-info"; import { cachedInfo } from "$lib/api/server-info";
import { turnstileLoaded, turnstileCreated } from "$lib/state/turnstile"; import { turnstileSolved, turnstileCreated } from "$lib/state/turnstile";
import turnstile from "$lib/api/turnstile";
let turnstileElement: HTMLElement; let turnstileElement: HTMLElement;
let turnstileScript: HTMLElement; let turnstileScript: HTMLElement;
@ -21,7 +23,7 @@
return true; return true;
}, },
callback: () => { callback: () => {
$turnstileLoaded = true; $turnstileSolved = true;
} }
}); });
} }
@ -31,6 +33,10 @@
} else { } else {
turnstileScript.addEventListener("load", setup); turnstileScript.addEventListener("load", setup);
} }
window.addEventListener("focus", () => {
turnstile.refreshIfExpired();
});
}); });
</script> </script>

View file

@ -12,7 +12,7 @@
import dialogs from "$lib/state/dialogs"; import dialogs from "$lib/state/dialogs";
import { link } from "$lib/state/omnibox"; import { link } from "$lib/state/omnibox";
import { updateSetting } from "$lib/state/settings"; import { updateSetting } from "$lib/state/settings";
import { turnstileLoaded } from "$lib/state/turnstile"; import { turnstileSolved } from "$lib/state/turnstile";
import type { Optional } from "$lib/types/generic"; import type { Optional } from "$lib/types/generic";
import type { DownloadModeOption } from "$lib/types/settings"; import type { DownloadModeOption } from "$lib/types/settings";
@ -39,7 +39,8 @@
let isDisabled = false; let isDisabled = false;
let isLoading = false; let isLoading = false;
let isBotCheckOngoing = false; $: isBotCheckOngoing =
!!$cachedInfo?.info?.cobalt?.turnstileSitekey && !$turnstileSolved;
const validLink = (url: string) => { const validLink = (url: string) => {
try { try {
@ -61,16 +62,6 @@
goto("/", { replaceState: true }); goto("/", { replaceState: true });
} }
$: if ($cachedInfo?.info?.cobalt?.turnstileSitekey) {
if ($turnstileLoaded) {
isBotCheckOngoing = false;
} else {
isBotCheckOngoing = true;
}
} else {
isBotCheckOngoing = false;
}
const pasteClipboard = () => { const pasteClipboard = () => {
if ($dialogs.length > 0 || isDisabled || isLoading) { if ($dialogs.length > 0 || isDisabled || isLoading) {
return; return;

View file

@ -5,7 +5,7 @@ import lazySettingGetter from "$lib/settings/lazy-get";
import { getSession } from "$lib/api/session"; import { getSession } from "$lib/api/session";
import { currentApiURL } from "$lib/api/api-url"; import { currentApiURL } from "$lib/api/api-url";
import { turnstileLoaded } from "$lib/state/turnstile"; import { turnstileSolved } from "$lib/state/turnstile";
import { cachedInfo, getServerInfo } from "$lib/api/server-info"; import { cachedInfo, getServerInfo } from "$lib/api/server-info";
import type { Optional } from "$lib/types/generic"; import type { Optional } from "$lib/types/generic";
@ -49,7 +49,7 @@ const request = async (url: string) => {
} as CobaltErrorResponse; } as CobaltErrorResponse;
} }
if (getCachedInfo?.info?.cobalt?.turnstileSitekey && !get(turnstileLoaded)) { if (getCachedInfo?.info?.cobalt?.turnstileSitekey && !get(turnstileSolved)) {
return { return {
status: "error", status: "error",
error: { error: {

View file

@ -1,3 +1,5 @@
import { turnstileSolved } from "$lib/state/turnstile";
const getResponse = () => { const getResponse = () => {
const turnstileElement = document.getElementById("turnstile-widget"); const turnstileElement = document.getElementById("turnstile-widget");
@ -12,13 +14,28 @@ const update = () => {
const turnstileElement = document.getElementById("turnstile-widget"); const turnstileElement = document.getElementById("turnstile-widget");
if (turnstileElement) { if (turnstileElement) {
turnstileSolved.set(false);
return window?.turnstile?.reset(turnstileElement); return window?.turnstile?.reset(turnstileElement);
} }
return null; return null;
} }
const refreshIfExpired = () => {
const turnstileElement = document.getElementById("turnstile-widget");
if (turnstileElement) {
const isExpired = window?.turnstile?.isExpired(turnstileElement);
if (isExpired) {
console.log("expired, refreshing the turnstile widget rn");
return update();
}
console.log("turnstile not expired, nothing to do");
}
}
export default { export default {
getResponse, getResponse,
update, update,
refreshIfExpired,
} }

View file

@ -1,4 +1,4 @@
import { writable } from "svelte/store"; import { writable } from "svelte/store";
export const turnstileLoaded = writable(false); export const turnstileSolved = writable(false);
export const turnstileCreated = writable(false); export const turnstileCreated = writable(false);