2023-06-14 00:00:51 +12:00
|
|
|
import Dexie from "dexie";
|
2023-05-25 07:36:01 +12:00
|
|
|
|
2023-06-10 06:32:34 +12:00
|
|
|
/**
|
|
|
|
* Manages the logged-in user's session and access token.
|
|
|
|
* The session replica is stored in IndexedDB so that the service worker can access it.
|
|
|
|
*/
|
2022-12-03 09:37:48 +13:00
|
|
|
class Session {
|
2023-06-14 00:00:51 +12:00
|
|
|
constructor() {
|
|
|
|
const db = new Dexie("session-replica");
|
|
|
|
db.version(1).stores({
|
|
|
|
kv: "&key",
|
|
|
|
});
|
|
|
|
this.db = db;
|
2023-05-25 07:36:01 +12:00
|
|
|
}
|
|
|
|
|
2023-06-14 00:00:51 +12:00
|
|
|
async store(username, token) {
|
|
|
|
await this.db.kv.bulkPut([
|
|
|
|
{ key: "user", value: username },
|
|
|
|
{ key: "token", value: token },
|
|
|
|
]);
|
2022-12-03 09:37:48 +13:00
|
|
|
localStorage.setItem("user", username);
|
|
|
|
localStorage.setItem("token", token);
|
|
|
|
}
|
|
|
|
|
2023-06-14 00:00:51 +12:00
|
|
|
async resetAndRedirect(url) {
|
|
|
|
await this.db.delete();
|
2022-12-03 09:37:48 +13:00
|
|
|
localStorage.removeItem("user");
|
|
|
|
localStorage.removeItem("token");
|
2023-06-14 00:00:51 +12:00
|
|
|
window.location.href = url;
|
2022-12-03 09:37:48 +13:00
|
|
|
}
|
|
|
|
|
2023-06-14 00:00:51 +12:00
|
|
|
async usernameAsync() {
|
|
|
|
return (await this.db.kv.get({ key: "user" }))?.value;
|
2022-12-26 16:29:55 +13:00
|
|
|
}
|
|
|
|
|
2022-12-08 14:44:20 +13:00
|
|
|
exists() {
|
|
|
|
return this.username() && this.token();
|
|
|
|
}
|
|
|
|
|
2022-12-03 09:37:48 +13:00
|
|
|
username() {
|
|
|
|
return localStorage.getItem("user");
|
|
|
|
}
|
|
|
|
|
|
|
|
token() {
|
|
|
|
return localStorage.getItem("token");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-06-14 00:00:51 +12:00
|
|
|
const session = new Session();
|
2022-12-03 09:37:48 +13:00
|
|
|
export default session;
|