mirror of
https://github.com/wukko/cobalt.git
synced 2025-02-02 08:26:22 +01:00
web/turnstile: refresh turnstile if it expires in background
also renamed `turnstileLoaded` to `turnstileSolved` for more clarity
This commit is contained in:
parent
e09e098b27
commit
b38cb77952
5 changed files with 31 additions and 17 deletions
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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: {
|
||||||
|
|
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue