From 3102f457a583b56e21a4953af5c576e9a86c8025 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Mon, 8 Jan 2024 13:28:46 -0800 Subject: feat(dump): decode hoh's --- src/lib/AniList/user.ts | 5 +++-- src/lib/Tools/DumpProfile.svelte | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 3 deletions(-) (limited to 'src/lib') diff --git a/src/lib/AniList/user.ts b/src/lib/AniList/user.ts index 93799480..acfb2913 100644 --- a/src/lib/AniList/user.ts +++ b/src/lib/AniList/user.ts @@ -40,6 +40,7 @@ export interface FullUser { createdAt: number; updatedAt: string; }[]; + about: string; } export const user = async (username: string): Promise => @@ -67,7 +68,7 @@ export const user = async (username: string): Promise => ).json() )['data']['User']; -export const dumpUser = async (username: string): Promise => +export const dumpUser = async (username: string): Promise => ( await ( await fetch('https://graphql.anilist.co', { @@ -78,7 +79,7 @@ export const dumpUser = async (username: string): Promise => }, body: JSON.stringify({ query: `{ User(name: "${username}") { - id name + id name about avatar { large medium } bannerImage bans siteUrl donatorTier donatorBadge moderatorRoles createdAt updatedAt diff --git a/src/lib/Tools/DumpProfile.svelte b/src/lib/Tools/DumpProfile.svelte index f01814e6..1f0eba7e 100644 --- a/src/lib/Tools/DumpProfile.svelte +++ b/src/lib/Tools/DumpProfile.svelte @@ -2,8 +2,27 @@ import { dumpUser } from '$lib/AniList/user'; import RateLimited from '$lib/Error/RateLimited.svelte'; import InputTemplate from './InputTemplate.svelte'; + import LZString from 'lz-string'; let submission = ''; + + // Credit: @hoh + const decodeJSON = (about: string): JSON | null => { + const match = (about || '').match(/^\[\]\(json([A-Za-z0-9+/=]+)\)/); + + if (match) + try { + return JSON.parse(atob(match[1])); + } catch { + try { + return JSON.parse(LZString.decompressFromBase64(match[1])); + } catch { + return null; + } + } + + return null; + }; @@ -11,8 +30,22 @@ {#await dumpUser(submission)} Loading user ... 50% {:then dump} -
{JSON.stringify(dump, null, 2)}
+ {@const decoded = decodeJSON(dump.about)} + +
{JSON.stringify(dump, null, 2)}
+ + {#if decoded && (dump.about || '').includes('[](json')} +

+ +

{JSON.stringify(decoded, null, 2).replaceAll(/\\n/g, '\n')}
+ {/if} {:catch} {/await} + + -- cgit v1.2.3