forked from Mirrors/elk
fix: user acct not respecting domain (#2088)
This commit is contained in:
parent
f28c90498b
commit
29f6a73de1
2 changed files with 31 additions and 5 deletions
|
@ -43,7 +43,7 @@ export function fetchAccountById(id?: string | null): Promise<mastodon.v1.Accoun
|
||||||
const cached = cache.get(key)
|
const cached = cache.get(key)
|
||||||
if (cached)
|
if (cached)
|
||||||
return cached
|
return cached
|
||||||
const domain = currentInstance.value ? getInstanceDomain(currentInstance.value) : null
|
const domain = getInstanceDomainFromServer(server)
|
||||||
const promise = useMastoClient().v1.accounts.fetch(id)
|
const promise = useMastoClient().v1.accounts.fetch(id)
|
||||||
.then((r) => {
|
.then((r) => {
|
||||||
if (r.acct && !r.acct.includes('@') && domain)
|
if (r.acct && !r.acct.includes('@') && domain)
|
||||||
|
@ -59,12 +59,12 @@ export function fetchAccountById(id?: string | null): Promise<mastodon.v1.Accoun
|
||||||
export async function fetchAccountByHandle(acct: string): Promise<mastodon.v1.Account> {
|
export async function fetchAccountByHandle(acct: string): Promise<mastodon.v1.Account> {
|
||||||
const server = currentServer.value
|
const server = currentServer.value
|
||||||
const userId = currentUser.value?.account.id
|
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 key = `${server}:${userId}:account:${userAcct}`
|
||||||
const cached = cache.get(key)
|
const cached = cache.get(key)
|
||||||
if (cached)
|
if (cached)
|
||||||
return cached
|
return cached
|
||||||
const domain = currentInstance.value ? getInstanceDomain(currentInstance.value) : undefined
|
|
||||||
|
|
||||||
async function lookupAccount() {
|
async function lookupAccount() {
|
||||||
const client = useMastoClient()
|
const client = useMastoClient()
|
||||||
|
|
|
@ -209,8 +209,10 @@ export async function fetchAccountInfo(client: mastodon.Client, server: string)
|
||||||
fetchPrefs(),
|
fetchPrefs(),
|
||||||
])
|
])
|
||||||
|
|
||||||
if (!account.acct.includes('@'))
|
if (!account.acct.includes('@')) {
|
||||||
account.acct = `${account.acct}@${server}`
|
const webDomain = getInstanceDomainFromServer(server)
|
||||||
|
account.acct = `${account.acct}@${webDomain}`
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: lazy load preferences
|
// TODO: lazy load preferences
|
||||||
accountPreferencesMap.set(account.acct, preferences)
|
accountPreferencesMap.set(account.acct, preferences)
|
||||||
|
@ -219,6 +221,12 @@ export async function fetchAccountInfo(client: mastodon.Client, server: string)
|
||||||
return account
|
return account
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getInstanceDomainFromServer(server: string) {
|
||||||
|
const instance = getInstanceCache(server)
|
||||||
|
const webDomain = instance ? getInstanceDomain(instance) : server
|
||||||
|
return webDomain
|
||||||
|
}
|
||||||
|
|
||||||
export async function refreshAccountInfo() {
|
export async function refreshAccountInfo() {
|
||||||
const account = await fetchAccountInfo(useMastoClient(), currentServer.value)
|
const account = await fetchAccountInfo(useMastoClient(), currentServer.value)
|
||||||
currentUser.value!.account = account
|
currentUser.value!.account = account
|
||||||
|
@ -340,10 +348,28 @@ export function useUserLocalStorage<T extends object>(key: string, initial: () =
|
||||||
const scope = effectScope(true)
|
const scope = effectScope(true)
|
||||||
const value = scope.run(() => {
|
const value = scope.run(() => {
|
||||||
const all = useLocalStorage<Record<string, T>>(key, {}, { deep: true })
|
const all = useLocalStorage<Record<string, T>>(key, {}, { deep: true })
|
||||||
|
|
||||||
return computed(() => {
|
return computed(() => {
|
||||||
const id = currentUser.value?.account.id
|
const id = currentUser.value?.account.id
|
||||||
? currentUser.value.account.acct
|
? currentUser.value.account.acct
|
||||||
: '[anonymous]'
|
: '[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] || {})
|
all.value[id] = Object.assign(initial(), all.value[id] || {})
|
||||||
return all.value[id]
|
return all.value[id]
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue