radiator-web/src/api/index.ts
garionion e7cd3a4e6b
add api
Signed-off-by: garionion <github@entr0py.de>
2021-04-03 17:36:09 +02:00

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);
}
}