diff --git a/package.json b/package.json
index 4521828..a81e2f4 100644
--- a/package.json
+++ b/package.json
@@ -34,6 +34,7 @@
"vue": "^3.0.5",
"vue-router": "^4.0.6",
"vuedraggable": "^4.0.1",
+ "vuex": "^4.0.0",
"websocket": "^1.0.33"
},
"devDependencies": {
diff --git a/src/app/App.vue b/src/app/App.vue
index f24d015..b9faf7c 100644
--- a/src/app/App.vue
+++ b/src/app/App.vue
@@ -6,11 +6,12 @@
diff --git a/src/app/auth.ts b/src/app/auth.ts
deleted file mode 100644
index 67bf47c..0000000
--- a/src/app/auth.ts
+++ /dev/null
@@ -1,111 +0,0 @@
-import jwtDecode from "jwt-decode";
-import router from "./routes";
-
-export interface IUser {
- id: number,
- name: string,
- isAdmin: boolean
-}
-
-/**
- * The active JWT
- */
-let token: string | null;
-
-/**
- * The decoded user object
- */
-let user: IUser | null;
-
-/**
- * Check if the user is an admin
- */
-export function isAdmin() {
- return user && user.isAdmin;
-}
-
-/**
- * Check if the client is authenticated
- */
-export function isAuthenticated() {
- return Boolean(token);
-}
-
-/**
- * Get the logged in user (assumes authentication has been checked)
- */
-export function getUser() {
- return user;
-}
-
-/**
- * Load the token from local storage
- */
-export function loadToken() {
- try {
- token = localStorage.getItem("jwt");
- user = jwtDecode(token);
- } catch(e) {
- console.log("Failed to load token");
- token = null;
- user = null;
- return false;
- }
- console.log("Token loaded", token);
- return true;
-}
-
-/**
- * Delete the token from local storage
- */
-export function forgetToken() {
- token = null;
- user = null;
- localStorage.removeItem("jwt");
-}
-
-/**
- * Store a JWT token in local storage
- */
-export function storeToken(jwtToken: string) {
- try {
- user = jwtDecode(jwtToken);
- token = jwtToken;
- localStorage.setItem("jwt", jwtToken);
- } catch(e) {
- user = null;
- token = null;
- return false;
- }
- return true;
-}
-
-/**
- * Fetch request providing authentication and logout upon unauthorized requests
- */
- export async function authFetch(path: string, options: RequestInit = {}): Promise {
- console.log("Performing auth fetch");
- options.credentials = "include";
- options.headers = Object.assign(options.headers ?? {}, {
- "Authorization": `Bearer ${token}`
- });
- let response = await fetch(path, options);
- if (response.status === 401) {
- // forgetToken();
- console.log("Forgetting token...");
- router.push({ name: "Login" });
- throw Error("Unauthorized");
- }
- return response;
-}
-
-/**
- * @TODO Remove later
- */
-(window).forgetToken = forgetToken;
-(window).authFetch = authFetch;
-
-/**
- * Ensure the token is loaded upon startup
- */
-loadToken();
diff --git a/src/app/components/CheckBox.vue b/src/app/components/CheckBox.vue
index 304eb92..c917e62 100644
--- a/src/app/components/CheckBox.vue
+++ b/src/app/components/CheckBox.vue
@@ -1,6 +1,6 @@
@@ -10,6 +10,11 @@
import { defineComponent } from "vue";
export default defineComponent({
+ data() {
+ return {
+ isChecked: this.modelValue
+ }
+ },
props: {
disabled: {
type: Boolean,
@@ -18,6 +23,16 @@ export default defineComponent({
label: {
type: String,
required: true
+ },
+ modelValue: {
+ type: Boolean,
+ default: false
+ }
+ },
+ watch: {
+ isChecked(newState) {
+ this.$emit("update:modelValue", newState);
+ this.$emit("onChange", newState);
}
}
});
@@ -26,6 +41,7 @@ export default defineComponent({