Moved auth funcs into its own place
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
import { goto } from '$app/navigation';
|
||||
import { resolve } from '$app/paths';
|
||||
import { get } from 'svelte/store';
|
||||
import {
|
||||
invidiousAuthStore,
|
||||
channelCacheStore,
|
||||
feedCacheStore,
|
||||
invidiousInstanceStore,
|
||||
playlistCacheStore,
|
||||
rawMasterKeyStore,
|
||||
searchCacheStore
|
||||
} from './store';
|
||||
import { Capacitor } from '@capacitor/core';
|
||||
import { isOwnBackend } from './shared';
|
||||
import { Browser } from '@capacitor/browser';
|
||||
import { clearFeedYTjs } from './api/youtubejs/subscriptions';
|
||||
import { _ } from './i18n';
|
||||
import { ensureNoTrailingSlash, isYTBackend } from './misc';
|
||||
|
||||
export function clearCaches() {
|
||||
feedCacheStore.set({});
|
||||
searchCacheStore.set({});
|
||||
playlistCacheStore.set({});
|
||||
channelCacheStore.set({});
|
||||
}
|
||||
|
||||
export function authProtected() {
|
||||
if (!get(invidiousAuthStore) && !isYTBackend()) {
|
||||
goto(resolve('/', {}), { replaceState: true });
|
||||
}
|
||||
}
|
||||
|
||||
export async function setInvidiousInstance(
|
||||
instanceUrl: string | undefined | null
|
||||
): Promise<boolean> {
|
||||
if (typeof instanceUrl !== 'string') {
|
||||
return false;
|
||||
}
|
||||
|
||||
let invalidInstance = false;
|
||||
|
||||
const instance = ensureNoTrailingSlash(instanceUrl);
|
||||
|
||||
try {
|
||||
new URL(instance);
|
||||
} catch {
|
||||
invalidInstance = true;
|
||||
}
|
||||
|
||||
if (invalidInstance) return false;
|
||||
|
||||
let resp;
|
||||
try {
|
||||
resp = await fetch(`${instance}/api/v1/channels/UCH-_hzb2ILSCo9ftVSnrCIQ`);
|
||||
} catch {
|
||||
invalidInstance = true;
|
||||
}
|
||||
|
||||
if (invalidInstance) return false;
|
||||
|
||||
if (resp && !resp.ok) {
|
||||
return false;
|
||||
}
|
||||
|
||||
invidiousInstanceStore.set(instance);
|
||||
invidiousAuthStore.set(null);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
export async function goToInvidiousLogin() {
|
||||
if (!get(invidiousInstanceStore)) return;
|
||||
const path = new URL(`${get(invidiousInstanceStore)}/authorize_token`);
|
||||
const searchParams = new URLSearchParams({
|
||||
scopes: ':feed,:subscriptions*,:playlists*,:history*,:notifications*'
|
||||
});
|
||||
if (Capacitor.getPlatform() === 'android') {
|
||||
searchParams.set('callback_url', 'materialious-auth://');
|
||||
path.search = searchParams.toString();
|
||||
await Browser.open({ url: path.toString() });
|
||||
} else {
|
||||
searchParams.set('callback_url', `${location.origin}${resolve('/invidious/auth', {})}`);
|
||||
path.search = searchParams.toString();
|
||||
document.location.href = path.toString();
|
||||
}
|
||||
}
|
||||
|
||||
export async function invidiousLogout() {
|
||||
invidiousAuthStore.set(null);
|
||||
goto(resolve('/', {}));
|
||||
}
|
||||
|
||||
export async function materialiousLogout() {
|
||||
if (isYTBackend()) {
|
||||
await clearFeedYTjs();
|
||||
}
|
||||
|
||||
if (isOwnBackend()?.internalAuth) {
|
||||
fetch('/api/user/logout', { method: 'DELETE' });
|
||||
rawMasterKeyStore.set(undefined);
|
||||
}
|
||||
|
||||
goto(resolve('/', {}));
|
||||
}
|
||||
@@ -9,15 +9,9 @@
|
||||
import type { RgbaColor, HsvaColor, Colord } from 'colord';
|
||||
import { _ } from '$lib/i18n';
|
||||
import { get } from 'svelte/store';
|
||||
import {
|
||||
isUnrestrictedPlatform,
|
||||
setInvidiousInstance,
|
||||
goToInvidiousLogin,
|
||||
invidiousLogout,
|
||||
timeout,
|
||||
shareURL
|
||||
} from '../../misc';
|
||||
import { getPages, type Pages } from '../../navPages';
|
||||
import { isUnrestrictedPlatform, timeout, shareURL } from '$lib/misc';
|
||||
import { getPages, type Pages } from '$lib/navPages';
|
||||
import { setInvidiousInstance, goToInvidiousLogin, invidiousLogout } from '$lib/auth';
|
||||
import ColorPicker from 'svelte-awesome-color-picker';
|
||||
import {
|
||||
invidiousAuthStore,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script lang="ts">
|
||||
import { _ } from '$lib/i18n';
|
||||
import { materialiousLogout } from '$lib/misc';
|
||||
import { materialiousLogout } from '$lib/auth';
|
||||
import { watchHistoryEnabledStore } from '$lib/store';
|
||||
|
||||
let clickCount = $state(0);
|
||||
|
||||
@@ -1,25 +1,11 @@
|
||||
import { goto } from '$app/navigation';
|
||||
import { resolve } from '$app/paths';
|
||||
import he from 'he';
|
||||
import { get } from 'svelte/store';
|
||||
import { env } from '$env/dynamic/public';
|
||||
import {
|
||||
invidiousAuthStore,
|
||||
backendInUseStore,
|
||||
channelCacheStore,
|
||||
feedCacheStore,
|
||||
invidiousInstanceStore,
|
||||
interfaceAndroidUseNativeShare,
|
||||
playlistCacheStore,
|
||||
rawMasterKeyStore,
|
||||
searchCacheStore
|
||||
} from './store';
|
||||
import { backendInUseStore, interfaceAndroidUseNativeShare } from './store';
|
||||
import { Capacitor } from '@capacitor/core';
|
||||
import { Share } from '@capacitor/share';
|
||||
import { Clipboard } from '@capacitor/clipboard';
|
||||
import { isOwnBackend } from './shared';
|
||||
import { Browser } from '@capacitor/browser';
|
||||
import { clearFeedYTjs } from './api/youtubejs/subscriptions';
|
||||
import { addToast } from './components/Toast.svelte';
|
||||
import { _ } from './i18n';
|
||||
|
||||
@@ -130,89 +116,3 @@ export function isUnrestrictedPlatform(): boolean {
|
||||
export function isYTBackend(): boolean {
|
||||
return get(backendInUseStore) === 'yt' && isUnrestrictedPlatform();
|
||||
}
|
||||
|
||||
export function clearCaches() {
|
||||
feedCacheStore.set({});
|
||||
searchCacheStore.set({});
|
||||
playlistCacheStore.set({});
|
||||
channelCacheStore.set({});
|
||||
}
|
||||
|
||||
export function authProtected() {
|
||||
if (!get(invidiousAuthStore) && !isYTBackend()) {
|
||||
goto(resolve('/', {}), { replaceState: true });
|
||||
}
|
||||
}
|
||||
|
||||
export async function setInvidiousInstance(
|
||||
instanceUrl: string | undefined | null
|
||||
): Promise<boolean> {
|
||||
if (typeof instanceUrl !== 'string') {
|
||||
return false;
|
||||
}
|
||||
|
||||
let invalidInstance = false;
|
||||
|
||||
const instance = ensureNoTrailingSlash(instanceUrl);
|
||||
|
||||
try {
|
||||
new URL(instance);
|
||||
} catch {
|
||||
invalidInstance = true;
|
||||
}
|
||||
|
||||
if (invalidInstance) return false;
|
||||
|
||||
let resp;
|
||||
try {
|
||||
resp = await fetch(`${instance}/api/v1/channels/UCH-_hzb2ILSCo9ftVSnrCIQ`);
|
||||
} catch {
|
||||
invalidInstance = true;
|
||||
}
|
||||
|
||||
if (invalidInstance) return false;
|
||||
|
||||
if (resp && !resp.ok) {
|
||||
return false;
|
||||
}
|
||||
|
||||
invidiousInstanceStore.set(instance);
|
||||
invidiousAuthStore.set(null);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
export async function goToInvidiousLogin() {
|
||||
if (!get(invidiousInstanceStore)) return;
|
||||
const path = new URL(`${get(invidiousInstanceStore)}/authorize_token`);
|
||||
const searchParams = new URLSearchParams({
|
||||
scopes: ':feed,:subscriptions*,:playlists*,:history*,:notifications*'
|
||||
});
|
||||
if (Capacitor.getPlatform() === 'android') {
|
||||
searchParams.set('callback_url', 'materialious-auth://');
|
||||
path.search = searchParams.toString();
|
||||
await Browser.open({ url: path.toString() });
|
||||
} else {
|
||||
searchParams.set('callback_url', `${location.origin}${resolve('/invidious/auth', {})}`);
|
||||
path.search = searchParams.toString();
|
||||
document.location.href = path.toString();
|
||||
}
|
||||
}
|
||||
|
||||
export async function invidiousLogout() {
|
||||
invidiousAuthStore.set(null);
|
||||
goto(resolve('/', {}));
|
||||
}
|
||||
|
||||
export async function materialiousLogout() {
|
||||
if (isYTBackend()) {
|
||||
await clearFeedYTjs();
|
||||
}
|
||||
|
||||
if (isOwnBackend()?.internalAuth) {
|
||||
fetch('/api/user/logout', { method: 'DELETE' });
|
||||
rawMasterKeyStore.set(undefined);
|
||||
}
|
||||
|
||||
goto(resolve('/', {}));
|
||||
}
|
||||
|
||||
@@ -28,13 +28,8 @@
|
||||
import ui from 'beercss';
|
||||
import { onMount } from 'svelte';
|
||||
import { _ } from '$lib/i18n';
|
||||
import {
|
||||
goToInvidiousLogin,
|
||||
invidiousLogout,
|
||||
isYTBackend,
|
||||
materialiousLogout,
|
||||
truncate
|
||||
} from '$lib/misc';
|
||||
import { isYTBackend, truncate } from '$lib/misc';
|
||||
import { goToInvidiousLogin, invidiousLogout, materialiousLogout } from '$lib/auth';
|
||||
import Author from '$lib/components/Author.svelte';
|
||||
import Toast from '$lib/components/Toast.svelte';
|
||||
import { isOwnBackend } from '$lib/shared';
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
import { resolve } from '$app/paths';
|
||||
import Question from '$lib/components/Question.svelte';
|
||||
import { _ } from '$lib/i18n';
|
||||
import { clearCaches, isUnrestrictedPlatform, setInvidiousInstance } from '$lib/misc';
|
||||
import { isUnrestrictedPlatform } from '$lib/misc';
|
||||
import { setInvidiousInstance, clearCaches } from '$lib/auth';
|
||||
import { isOwnBackend } from '$lib/shared';
|
||||
import { backendInUseStore, invidiousInstanceStore, playerYouTubeJsFallback } from '$lib/store';
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import { getFeed } from '$lib/api/index';
|
||||
import type { PlaylistPageVideo, Video, VideoBase } from '$lib/api/model';
|
||||
import { localDb } from '$lib/dexie';
|
||||
import { excludeDuplicateFeeds } from '$lib/feed';
|
||||
import { authProtected } from '$lib/misc';
|
||||
import { authProtected } from '$lib/auth';
|
||||
import { feedCacheStore, feedLoadingStore } from '$lib/store';
|
||||
import { error } from '@sveltejs/kit';
|
||||
import { get } from 'svelte/store';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { getSubscriptions } from '$lib/api';
|
||||
import { authProtected } from '$lib/misc';
|
||||
import { authProtected } from '$lib/auth';
|
||||
import { error } from '@sveltejs/kit';
|
||||
|
||||
export async function load() {
|
||||
|
||||
Reference in New Issue
Block a user