fix type errors in auth.vue

This commit is contained in:
Hazelnoot 2025-04-01 15:21:42 -04:00
parent 126d2119a3
commit 3b9de1c4bb

View file

@ -63,24 +63,30 @@ const getUrlParams = () =>
const [k, v] = query.split('=');
result[k] = decodeURI(v);
return result;
}, {});
}, {} as Record<string, string>);
const state = ref<'waiting' | 'accepted' | 'fetch-session-error' | 'denied' | null>(null);
const session = ref<Misskey.entities.AuthSessionShowResponse | null>(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 {