From 29f6a73de1960bfbc63b992cb811df1ba17a8d6c Mon Sep 17 00:00:00 2001 From: patak Date: Wed, 10 May 2023 14:19:50 +0200 Subject: [PATCH] fix: user acct not respecting domain (#2088) --- composables/cache.ts | 6 +++--- composables/users.ts | 30 ++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/composables/cache.ts b/composables/cache.ts index 806c23b8..b03cb2ae 100644 --- a/composables/cache.ts +++ b/composables/cache.ts @@ -43,7 +43,7 @@ export function fetchAccountById(id?: string | null): Promise { if (r.acct && !r.acct.includes('@') && domain) @@ -59,12 +59,12 @@ export function fetchAccountById(id?: string | null): Promise { const server = currentServer.value const userId = currentUser.value?.account.id - const userAcct = acct.endsWith(`@${server}`) ? acct.slice(0, -server.length - 1) : acct + const domain = getInstanceDomainFromServer(server) + const userAcct = (domain && acct.endsWith(`@${domain}`)) ? acct.slice(0, -domain.length - 1) : acct const key = `${server}:${userId}:account:${userAcct}` const cached = cache.get(key) if (cached) return cached - const domain = currentInstance.value ? getInstanceDomain(currentInstance.value) : undefined async function lookupAccount() { const client = useMastoClient() diff --git a/composables/users.ts b/composables/users.ts index 36db7d8b..5847f7f8 100644 --- a/composables/users.ts +++ b/composables/users.ts @@ -209,8 +209,10 @@ export async function fetchAccountInfo(client: mastodon.Client, server: string) fetchPrefs(), ]) - if (!account.acct.includes('@')) - account.acct = `${account.acct}@${server}` + if (!account.acct.includes('@')) { + const webDomain = getInstanceDomainFromServer(server) + account.acct = `${account.acct}@${webDomain}` + } // TODO: lazy load preferences accountPreferencesMap.set(account.acct, preferences) @@ -219,6 +221,12 @@ export async function fetchAccountInfo(client: mastodon.Client, server: string) return account } +export function getInstanceDomainFromServer(server: string) { + const instance = getInstanceCache(server) + const webDomain = instance ? getInstanceDomain(instance) : server + return webDomain +} + export async function refreshAccountInfo() { const account = await fetchAccountInfo(useMastoClient(), currentServer.value) currentUser.value!.account = account @@ -340,10 +348,28 @@ export function useUserLocalStorage(key: string, initial: () = const scope = effectScope(true) const value = scope.run(() => { const all = useLocalStorage>(key, {}, { deep: true }) + return computed(() => { const id = currentUser.value?.account.id ? currentUser.value.account.acct : '[anonymous]' + + // Backward compatibility, respect webDomain in acct + // In previous versions, acct was username@server instead of username@webDomain + // for example: elk@m.webtoo.ls instead of elk@webtoo.ls + if (!all.value[id]) { + const [username, webDomain] = id.split('@') + const server = currentServer.value + if (webDomain && server && server !== webDomain) { + const oldId = `${username}@${server}` + const outdatedSettings = all.value[oldId] + if (outdatedSettings) { + const newAllValue = { ...all.value, [id]: outdatedSettings } + delete newAllValue[oldId] + all.value = newAllValue + } + } + } all.value[id] = Object.assign(initial(), all.value[id] || {}) return all.value[id] })