65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
import { http, logApi } from './http.js';
|
|
|
|
export const auth = {
|
|
// #region GET /api/auth/me — me
|
|
async me() {
|
|
try {
|
|
const data = await http('/api/auth/me');
|
|
return {
|
|
user: data.user ?? null,
|
|
googleClientId: data.googleClientId ?? null,
|
|
schemaVersion: data.schemaVersion ?? null,
|
|
vhost: Boolean(data.vhost),
|
|
vhostSettings: data.vhostSettings ?? null,
|
|
};
|
|
} catch (err) {
|
|
if (err.status === 401 || err.status === 403) {
|
|
return {
|
|
user: null,
|
|
googleClientId: err.data?.googleClientId ?? null,
|
|
schemaVersion: err.data?.schemaVersion ?? null,
|
|
vhost: Boolean(err.data?.vhost),
|
|
vhostSettings: err.data?.vhostSettings ?? null,
|
|
forbidden: err.status === 403,
|
|
message: err.message,
|
|
};
|
|
}
|
|
throw err;
|
|
}
|
|
},
|
|
// #endregion
|
|
|
|
// #region POST /api/auth/login — loginWithGoogle
|
|
async loginWithGoogle(idToken) {
|
|
logApi('loginWithGoogle', {
|
|
idTokenLength: idToken?.length ?? 0,
|
|
idTokenPrefix: idToken ? `${idToken.slice(0, 12)}…` : null,
|
|
});
|
|
const data = await http('/api/auth/login', {
|
|
method: 'POST',
|
|
body: { idToken },
|
|
});
|
|
// Confirm whether the session cookie actually works (not just login JSON).
|
|
const session = await auth.me();
|
|
logApi('session-after-login', {
|
|
loginUser: data.user?.email ?? data.user?.sub ?? data.user ?? null,
|
|
meUser: session.user?.email ?? session.user?.sub ?? session.user ?? null,
|
|
meForbidden: session.forbidden ?? false,
|
|
meMessage: session.message ?? null,
|
|
sessionOk: Boolean(session.user),
|
|
});
|
|
return { user: data.user, session };
|
|
},
|
|
// #endregion
|
|
|
|
// #region POST /api/auth/logout — logout
|
|
async logout() {
|
|
try {
|
|
await http('/api/auth/logout', { method: 'POST' });
|
|
} catch (err) {
|
|
if (err.status !== 401) throw err;
|
|
}
|
|
},
|
|
// #endregion
|
|
};
|