diff --git a/src/App.tsx b/src/App.tsx
index eb4d1ee..44f0ff8 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -8,18 +8,14 @@ import Home from "./pages/Home.tsx";
import Login from "./pages/Login.tsx";
import About from "./pages/About.tsx";
-import useLocalStorage from "./components/useLocalStorage.ts";
+import {
+ usernameStorageHandlerInit,
+ authTokenStorageHandlerInit,
+} from "./components/storageHandler.ts";
export default function App() {
- const [usernameValue, setUsernameValue, deleteUsernameValue] =
- useLocalStorage("username");
-
- if (localStorage.getItem("username") === null) {
- console.log("Username does not exist, creating!");
- } else {
- console.log("Username does exist!");
- console.log(usernameValue);
- }
+ const usernameStorageHandler = usernameStorageHandlerInit();
+ const authTokenStorageHandler = authTokenStorageHandlerInit();
return (
<>
diff --git a/src/components/storageHandler.ts b/src/components/storageHandler.ts
new file mode 100644
index 0000000..5e7ccb7
--- /dev/null
+++ b/src/components/storageHandler.ts
@@ -0,0 +1,31 @@
+import * as React from "react";
+import useLocalStorage from "./useLocalStorage.ts";
+
+/*
+React Hooks may not be a good fit for this role as these functions need to be recalled within every page to be accessible
+Could look at using global variables to avoid this (But it appears to be frowned upon? And react has trouble updating usestate hooks when it comes to globals it seems)
+Or could simply stop using react hooks for this role
+It appears to work for now so will leave be
+ */
+
+export const usernameStorageHandlerInit = () => {
+ const [usernameValue, setUsernameValue, deleteUsernameValue] =
+ useLocalStorage("username");
+
+ return {
+ usernameValue,
+ setUsernameValue,
+ deleteUsernameValue,
+ };
+};
+
+export const authTokenStorageHandlerInit = () => {
+ const [authTokenValue, setAuthTokenValue, deleteAuthTokenValue] =
+ useLocalStorage("authtoken");
+
+ return {
+ authTokenValue,
+ setAuthTokenValue,
+ deleteAuthTokenValue,
+ };
+};
diff --git a/src/components/useCookie.ts b/src/components/useCookie.ts
new file mode 100644
index 0000000..98dccbd
--- /dev/null
+++ b/src/components/useCookie.ts
@@ -0,0 +1,25 @@
+import { useState, useEffect } from "react";
+
+export default function useCookie(cookieName) {
+ const [cookieValue, setCookieValue] = useState("");
+
+ useEffect(() => {
+ const cookie = document.cookie
+ .split("; ")
+ .find((row) => row.startsWith(`${cookieName}=`));
+
+ setCookieValue(cookie ? cookie.split("=")[1] : "");
+ }, [cookieName]);
+
+ const setCookie = (value: string, daysTillExpiry: int) => {
+ const expirationDate = new Date();
+ expirationDate.setDate(expirationDate.getDate() + daysTillExpiry);
+ document.cookie = `${cookieName}=${value}; expires=${expirationDate.toUTCString()}; path=/`;
+ };
+
+ const deleteCookie = () => {
+ document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;
+ };
+
+ return [cookieValue, setCookie, deleteCookie];
+}
diff --git a/src/pages/Login.tsx b/src/pages/Login.tsx
index 9f1fbb6..32174f1 100644
--- a/src/pages/Login.tsx
+++ b/src/pages/Login.tsx
@@ -1,9 +1,16 @@
import * as React from "react";
+import {
+ usernameStorageHandlerInit,
+ authTokenStorageHandlerInit,
+} from "../components/storageHandler.ts";
export default function Login() {
- const [usernameValue, setUsernameValue] = React.useState("");
- function handleUsernameChange(eventData) {
- setUsernameValue(eventData.target.value);
+ const usernameStorageHandler = usernameStorageHandlerInit();
+ const authTokenStorageHandler = authTokenStorageHandlerInit();
+
+ const [usernameFormValue, setUsernameFormValue] = React.useState("");
+ function handleUsernameFormChange(eventData) {
+ setUsernameFormValue(eventData.target.value);
}
function onUsernameInputDefocus(formEvent) {
@@ -14,17 +21,29 @@ export default function Login() {
formEvent.preventDefault();
const formData = new FormData(formEvent.target);
+ const formDataObject = Object.fromEntries(formData);
- fetch("http://127.0.0.1:8000/api", {
+ const bodyRequest = {
+ username: formDataObject.username,
+ password: formDataObject.password,
+ rememberMe: formDataObject.rememberMe ? true : false,
+ };
+
+ fetch("http://127.0.0.1:8000/api/login", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
- body: JSON.stringify(Object.fromEntries(formData)),
+ body: JSON.stringify(bodyRequest),
})
.then((response) => response.json())
.then((responseParsed: Object) => {
console.log(responseParsed);
+ if (responseParsed.success) {
+ authTokenStorageHandler.setAuthTokenValue(responseParsed.authToken);
+ } else {
+ console.log("Login failure!");
+ }
});
}
@@ -38,11 +57,12 @@ export default function Login() {
+