|
|
import jwtDecode from "jwt-decode";
|
|
|
|
/**
|
|
* The active JWT
|
|
*/
|
|
let token: string | null;
|
|
|
|
/**
|
|
* The decoded user object
|
|
*/
|
|
let user: {
|
|
id: number,
|
|
name: string,
|
|
isAdmin: boolean
|
|
} | null;
|
|
|
|
/**
|
|
* Check if the user is an admin
|
|
*/
|
|
export function isAdmin() {
|
|
return user && user.isAdmin;
|
|
}
|
|
|
|
/**
|
|
* Check if the client is authenticated
|
|
*/
|
|
export function isAuthenticated() {
|
|
return Boolean(token);
|
|
}
|
|
|
|
/**
|
|
* Load the token from local storage
|
|
*/
|
|
export function loadToken() {
|
|
try {
|
|
token = localStorage.getItem("jwt");
|
|
user = jwtDecode(<string>token);
|
|
} catch(e) {
|
|
console.log("Failed to load token");
|
|
token = null;
|
|
user = null;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Delete the token from local storage
|
|
*/
|
|
export function forgetToken() {
|
|
token = null;
|
|
user = null;
|
|
localStorage.removeItem("jwt");
|
|
}
|
|
|
|
/**
|
|
* Store a JWT token in local storage
|
|
*/
|
|
export function storeToken(jwtToken: string) {
|
|
try {
|
|
user = jwtDecode(jwtToken);
|
|
token = jwtToken;
|
|
localStorage.setItem("jwt", jwtToken);
|
|
} catch(e) {
|
|
user = null;
|
|
token = null;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|