From 3b9de1c4bb61aeb098b20d9609c64e4bc73a53ee Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Tue, 1 Apr 2025 15:21:42 -0400 Subject: [PATCH] fix type errors in auth.vue --- packages/frontend/src/pages/auth.vue | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/packages/frontend/src/pages/auth.vue b/packages/frontend/src/pages/auth.vue index 898fa7996e..5aa8dbcc5d 100644 --- a/packages/frontend/src/pages/auth.vue +++ b/packages/frontend/src/pages/auth.vue @@ -63,24 +63,30 @@ const getUrlParams = () => const [k, v] = query.split('='); result[k] = decodeURI(v); return result; - }, {}); + }, {} as Record); const state = ref<'waiting' | 'accepted' | 'fetch-session-error' | 'denied' | null>(null); const session = ref(null); function accepted() { state.value = 'accepted'; - const isMastodon = !!getUrlParams().mastodon; + const params = getUrlParams(); + const isMastodon = !!params.mastodon; if (session.value && session.value.app.callbackUrl && isMastodon) { - const redirectUri = decodeURIComponent(getUrlParams().redirect_uri); + if (!params.redirect_uri) { + throw new Error('Missing redirect_uri'); + } + const redirectUri = decodeURIComponent(params.redirect_uri); if (!session.value.app.callbackUrl.includes('elk.zone') && !session.value.app.callbackUrl.split('\n').includes(redirectUri)) { state.value = 'fetch-session-error'; throw new Error('Callback URI doesn\'t match registered app'); } const callbackUrl = session.value.app.callbackUrl.includes('elk.zone') ? new URL(session.value.app.callbackUrl) : new URL(redirectUri); callbackUrl.searchParams.append('code', session.value.token); - if (getUrlParams().state) callbackUrl.searchParams.append('state', getUrlParams().state); - location.href = callbackUrl.toString(); + if (params.state) { + callbackUrl.searchParams.append('state', params.state); + } + window.location.href = callbackUrl.toString(); } else if (session.value && session.value.app.callbackUrl) { const url = new URL(session.value.app.callbackUrl); if (['javascript:', 'file:', 'data:', 'mailto:', 'tel:', 'vbscript:'].includes(url.protocol)) throw new Error('invalid url'); @@ -96,14 +102,15 @@ onMounted(async () => { if (!$i) return; try { - session.value = await misskeyApi('auth/session/show', { + const sess = await misskeyApi('auth/session/show', { token: props.token, }); + session.value = sess; // 既に連携していた場合 - if (session.value.app.isAuthorized) { + if (sess.app.isAuthorized) { await misskeyApi('auth/accept', { - token: session.value.token, + token: sess.token, }); accepted(); } else {