86 lines
1.6 KiB
TypeScript
86 lines
1.6 KiB
TypeScript
|
import { APIClient } from "./ApiClient";
|
||
|
|
||
|
const TokenStateKey = "auth-state";
|
||
|
|
||
|
export class AuthApi {
|
||
|
/**
|
||
|
* Check out whether user is signed in or not
|
||
|
*/
|
||
|
static get SignedIn(): boolean {
|
||
|
return localStorage.getItem(TokenStateKey) !== null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Mark user as authenticated
|
||
|
*/
|
||
|
static SetAuthenticated() {
|
||
|
localStorage.setItem(TokenStateKey, "");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Un-mark user as authenticated
|
||
|
*/
|
||
|
static UnsetAuthenticated() {
|
||
|
localStorage.removeItem(TokenStateKey);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Authenticate using an username and a password
|
||
|
*
|
||
|
* @param username The username to use
|
||
|
* @param password The password to use
|
||
|
*/
|
||
|
static async LoginWithPassword(
|
||
|
username: string,
|
||
|
password: string
|
||
|
): Promise<void> {
|
||
|
await APIClient.exec({
|
||
|
uri: "/auth/local",
|
||
|
method: "POST",
|
||
|
jsonData: {
|
||
|
username: username,
|
||
|
password: password,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
this.SetAuthenticated();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Start OpenID login
|
||
|
*/
|
||
|
static async StartOpenIDLogin(): Promise<{ url: string }> {
|
||
|
return (
|
||
|
await APIClient.exec({
|
||
|
uri: "/auth/start_oidc",
|
||
|
method: "GET",
|
||
|
})
|
||
|
).data;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Finish OpenID login
|
||
|
*/
|
||
|
static async FinishOpenIDLogin(code: string, state: string): Promise<void> {
|
||
|
await APIClient.exec({
|
||
|
uri: "/auth/finish_oidc",
|
||
|
method: "POST",
|
||
|
jsonData: { code: code, state: state },
|
||
|
});
|
||
|
|
||
|
this.SetAuthenticated();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sign out
|
||
|
*/
|
||
|
static async SignOut(): Promise<void> {
|
||
|
await APIClient.exec({
|
||
|
uri: "/auth/sign_out",
|
||
|
method: "GET",
|
||
|
});
|
||
|
|
||
|
this.UnsetAuthenticated();
|
||
|
}
|
||
|
}
|