agola-web/src/util/auth.js
Simone Gotti 3f2c57394a *: Format with prettier
Use latest prettier as devDependency so tools will use (or can be
configured to use) the npm provided version.
The unique config change is to use single quotes instead of double
quotes.
2022-02-24 09:02:02 +01:00

129 lines
2.6 KiB
JavaScript

import store from '@/store';
const ID_TOKEN_KEY = 'id_token';
const USER_KEY = 'user';
const LOGIN_REDIRECT_KEY = 'login_redirect';
let API_URL = window.CONFIG.API_URL;
let API_BASE_PATH = window.CONFIG.API_BASE_PATH;
export function setLoggedUser(token, user) {
setIdToken(token);
setUser(user);
store.dispatch('setUser', user);
}
export function doLogout() {
unsetIdToken();
unsetUser();
store.dispatch('setUser', null);
}
export function apiurlwithtoken(path) {
let u = new URL(API_URL + API_BASE_PATH + path);
let idToken = getIdToken();
if (idToken) {
u.searchParams.append('access_token', idToken);
}
return u;
}
export function apiurl(path) {
return new URL(API_URL + API_BASE_PATH + path);
}
export function loginurl() {
return apiurl('/auth/login');
}
export function authorizeurl() {
return apiurl('/auth/authorize');
}
export function registerurl() {
return new apiurl('/auth/register');
}
export function oauth2callbackurl() {
return new apiurl('/auth/oauth2/callback');
}
export async function loginapi(init) {
if (init === undefined) {
init = {};
}
return await window.fetch(loginurl(), init);
}
export async function registerapi(init) {
if (init === undefined) {
init = {};
}
return await window.fetch(registerurl(), init);
}
export async function fetch(url, init, signal, token, tokenType = 'bearer') {
if (!init) {
init = {};
}
if (init.headers === undefined) {
init['headers'] = {};
}
if (signal) {
init['signal'] = signal;
}
let idToken = token || getIdToken();
if (idToken) {
init.headers['Authorization'] = tokenType + ' ' + idToken;
}
return await window.fetch(url, init);
}
export function setIdToken(idToken) {
localStorage.setItem(ID_TOKEN_KEY, idToken);
}
export function getIdToken() {
return localStorage.getItem(ID_TOKEN_KEY);
}
export function unsetIdToken() {
localStorage.removeItem(ID_TOKEN_KEY);
}
export function setUser(user) {
localStorage.setItem(USER_KEY, JSON.stringify(user));
}
export function getUser() {
let user = localStorage.getItem(USER_KEY);
if (user) {
return JSON.parse(user);
}
return null;
}
export function unsetUser() {
localStorage.removeItem(USER_KEY);
}
export function isLoggedIn() {
const idToken = getIdToken();
return !!idToken;
}
export function getLoginRedirect() {
return sessionStorage.getItem(LOGIN_REDIRECT_KEY);
}
export function setLoginRedirect(url) {
sessionStorage.setItem(LOGIN_REDIRECT_KEY, url);
}
export function unsetLoginRedirect() {
return sessionStorage.removeItem(LOGIN_REDIRECT_KEY);
}