forked from blisstown/campfire
52 lines
1.8 KiB
Svelte
52 lines
1.8 KiB
Svelte
<script>
|
|
import * as api from '$lib/api.js';
|
|
import { server } from '$lib/client/server.js';
|
|
import { app } from '$lib/client/app.js';
|
|
import { parseAccount } from '$lib/account.js';
|
|
import { get } from 'svelte/store';
|
|
import { goto } from '$app/navigation';
|
|
import { error } from '@sveltejs/kit';
|
|
import { unread_notif_count, last_read_notif_id } from '$lib/notifications.js';
|
|
import { account } from '$lib/stores/account.js';
|
|
import Lang from '$lib/lang';
|
|
|
|
export let data;
|
|
|
|
const lang = Lang();
|
|
|
|
let auth_code = data.code;
|
|
|
|
if (!auth_code || !get(server) || !get(app)) {
|
|
error(400, { message: lang.string('error.bad_request') });
|
|
} else {
|
|
api.getToken(get(server).host, get(app).id, get(app).secret, auth_code).then(token => {
|
|
if (!token) {
|
|
error(400, { message: lang.string('error.invalid_auth_code') });
|
|
}
|
|
|
|
app.update(app => {
|
|
app.token = token;
|
|
return app;
|
|
});
|
|
|
|
api.verifyCredentials(get(server).host, get(app).token).then(data => {
|
|
if (!data) return goto("/");
|
|
|
|
account.set(parseAccount(data));
|
|
console.log(lang.string('logs.logged_in', get(account).fqn));
|
|
|
|
// spin up async task to fetch notifications
|
|
return api.getNotifications(
|
|
get(server).host,
|
|
get(app).token,
|
|
get(last_read_notif_id)
|
|
).then(notif_data => {
|
|
unread_notif_count.set(0);
|
|
if (notif_data.constructor === Array && notif_data.length > 0)
|
|
last_read_notif_id.set(notif_data[0].id);
|
|
goto("/");
|
|
});
|
|
});
|
|
});
|
|
}
|
|
</script>
|