From cea68cad1741d650e4092c01addb16e7669b423e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enes=20Yak=C4=B1=C5=9Ft=C4=B1r?= Date: Sat, 3 Oct 2026 12:13:26 +0300 Subject: [PATCH] feat(auth): preserve and restore last visited page URL after YakNet SSO login (v1.0.12) --- client.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/client.js b/client.js index 188af7c..d5e61e3 100644 --- a/client.js +++ b/client.js @@ -1,5 +1,50 @@ async function register({ registerHook, peertubeHelpers }) { try { + function saveReturnUrlBeforeLogin() { + try { + var currentPath = window.location.pathname + window.location.search + window.location.hash; + if (currentPath && !window.location.pathname.includes('/login')) { + localStorage.setItem('yaktube_return_url', currentPath); + localStorage.setItem('yaktube_return_url_time', String(Date.now())); + sessionStorage.setItem('yaktube_return_url', currentPath); + sessionStorage.setItem('redirect-url-after-login', currentPath); + } + } catch (e) {} + } + + function checkPendingPostLoginRedirect() { + try { + if (window.location.pathname.includes('/login')) return; + var token = localStorage.getItem('access_token'); + if (!token) return; + var savedUrl = + localStorage.getItem('yaktube_return_url') || + sessionStorage.getItem('yaktube_return_url') || + sessionStorage.getItem('redirect-url-after-login'); + if (!savedUrl) return; + var savedTime = parseInt(localStorage.getItem('yaktube_return_url_time') || '0', 10); + localStorage.removeItem('yaktube_return_url'); + localStorage.removeItem('yaktube_return_url_time'); + sessionStorage.removeItem('yaktube_return_url'); + sessionStorage.removeItem('redirect-url-after-login'); + if (savedTime && Date.now() - savedTime > 15 * 60 * 1000) return; + var currentFull = window.location.pathname + window.location.search + window.location.hash; + if ( + typeof savedUrl === 'string' && + savedUrl.startsWith('/') && + !savedUrl.startsWith('//') && + !savedUrl.startsWith('/login') && + savedUrl !== currentFull + ) { + window.location.replace(savedUrl); + } + } catch (e) {} + } + + checkPendingPostLoginRedirect(); + window.addEventListener('popstate', checkPendingPostLoginRedirect); + setInterval(checkPendingPostLoginRedirect, 800); + fetch('/plugins/auth-yaknet/router/status') .then(function (r) { return r.json(); @@ -36,6 +81,7 @@ async function register({ registerHook, peertubeHelpers }) { ) { e.preventDefault(); e.stopPropagation(); + saveReturnUrlBeforeLogin(); window.location.href = '/plugins/auth-yaknet/router/auth'; } } diff --git a/package.json b/package.json index 8b3c90f..c5e4153 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "peertube-plugin-auth-yaknet", - "version": "1.0.11", + "version": "1.0.12", "description": "YakNet SSO & OAuth2 Single Sign-On Authentication Plugin for PeerTube", "main": "main.js", "library": "./main.js",