mirror of
https://codeberg.org/yeentown/barkey.git
synced 2025-07-07 12:36:57 +00:00
fix type errors in auth.vue
This commit is contained in:
parent
126d2119a3
commit
3b9de1c4bb
1 changed files with 15 additions and 8 deletions
|
@ -63,24 +63,30 @@ const getUrlParams = () =>
|
||||||
const [k, v] = query.split('=');
|
const [k, v] = query.split('=');
|
||||||
result[k] = decodeURI(v);
|
result[k] = decodeURI(v);
|
||||||
return result;
|
return result;
|
||||||
}, {});
|
}, {} as Record<string, string>);
|
||||||
|
|
||||||
const state = ref<'waiting' | 'accepted' | 'fetch-session-error' | 'denied' | null>(null);
|
const state = ref<'waiting' | 'accepted' | 'fetch-session-error' | 'denied' | null>(null);
|
||||||
const session = ref<Misskey.entities.AuthSessionShowResponse | null>(null);
|
const session = ref<Misskey.entities.AuthSessionShowResponse | null>(null);
|
||||||
|
|
||||||
function accepted() {
|
function accepted() {
|
||||||
state.value = 'accepted';
|
state.value = 'accepted';
|
||||||
const isMastodon = !!getUrlParams().mastodon;
|
const params = getUrlParams();
|
||||||
|
const isMastodon = !!params.mastodon;
|
||||||
if (session.value && session.value.app.callbackUrl && isMastodon) {
|
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)) {
|
if (!session.value.app.callbackUrl.includes('elk.zone') && !session.value.app.callbackUrl.split('\n').includes(redirectUri)) {
|
||||||
state.value = 'fetch-session-error';
|
state.value = 'fetch-session-error';
|
||||||
throw new Error('Callback URI doesn\'t match registered app');
|
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);
|
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);
|
callbackUrl.searchParams.append('code', session.value.token);
|
||||||
if (getUrlParams().state) callbackUrl.searchParams.append('state', getUrlParams().state);
|
if (params.state) {
|
||||||
location.href = callbackUrl.toString();
|
callbackUrl.searchParams.append('state', params.state);
|
||||||
|
}
|
||||||
|
window.location.href = callbackUrl.toString();
|
||||||
} else if (session.value && session.value.app.callbackUrl) {
|
} else if (session.value && session.value.app.callbackUrl) {
|
||||||
const url = new URL(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');
|
if (['javascript:', 'file:', 'data:', 'mailto:', 'tel:', 'vbscript:'].includes(url.protocol)) throw new Error('invalid url');
|
||||||
|
@ -96,14 +102,15 @@ onMounted(async () => {
|
||||||
if (!$i) return;
|
if (!$i) return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
session.value = await misskeyApi('auth/session/show', {
|
const sess = await misskeyApi('auth/session/show', {
|
||||||
token: props.token,
|
token: props.token,
|
||||||
});
|
});
|
||||||
|
session.value = sess;
|
||||||
|
|
||||||
// 既に連携していた場合
|
// 既に連携していた場合
|
||||||
if (session.value.app.isAuthorized) {
|
if (sess.app.isAuthorized) {
|
||||||
await misskeyApi('auth/accept', {
|
await misskeyApi('auth/accept', {
|
||||||
token: session.value.token,
|
token: sess.token,
|
||||||
});
|
});
|
||||||
accepted();
|
accepted();
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Reference in a new issue