102 lines
1.9 KiB
TypeScript
102 lines
1.9 KiB
TypeScript
import { APIClient } from "./ApiClient";
|
|
|
|
export interface AuthInfo {
|
|
id: string;
|
|
}
|
|
|
|
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();
|
|
}
|
|
|
|
/**
|
|
* Get auth information
|
|
*/
|
|
static async GetAuthInfo(): Promise<AuthInfo> {
|
|
return (
|
|
await APIClient.exec({
|
|
uri: "/auth/user",
|
|
method: "GET",
|
|
})
|
|
).data;
|
|
}
|
|
|
|
/**
|
|
* Sign out
|
|
*/
|
|
static async SignOut(): Promise<void> {
|
|
await APIClient.exec({
|
|
uri: "/auth/sign_out",
|
|
method: "GET",
|
|
});
|
|
|
|
this.UnsetAuthenticated();
|
|
}
|
|
}
|