e7cd3a4e6b
Signed-off-by: garionion <github@entr0py.de>
53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
import { LoginResponse, token } from "./types";
|
|
import { get, set } from "idb-keyval";
|
|
import { unref } from "vue";
|
|
|
|
const url = "http://192.168.178.5:8080/api";
|
|
let token: token;
|
|
let ready = false;
|
|
|
|
export async function init() {
|
|
if (ready) return;
|
|
|
|
await get("token").then((val: token) => {
|
|
if (val !== undefined) {
|
|
token = val;
|
|
}
|
|
});
|
|
ready = true;
|
|
}
|
|
|
|
export async function isLoggedIn(): Promise<boolean> {
|
|
await init();
|
|
return token !== undefined && token.expiration > Date.now();
|
|
}
|
|
|
|
export async function login(user: string, password: string): Promise<boolean> {
|
|
await init();
|
|
let response = await fetch(`${url}/auth`, {
|
|
method: "POST",
|
|
headers: {
|
|
Accept: "application/json",
|
|
"Content-Type": "application/json",
|
|
},
|
|
body: JSON.stringify({ username: user, password: password }),
|
|
});
|
|
const login: LoginResponse = await response.json();
|
|
|
|
if (response.ok) {
|
|
if (login.success) {
|
|
token = {
|
|
jwt: login.token,
|
|
expiration: Date.parse(login.expiration),
|
|
};
|
|
set("token", token).catch((error) => console.error(error));
|
|
return true;
|
|
} else {
|
|
return Promise.reject(new Error(login.message));
|
|
}
|
|
} else {
|
|
const error = new Error(login.message);
|
|
return Promise.reject(error);
|
|
}
|
|
}
|