From e6b165083878da12854e0ffb5bfcad8de4ab28f3 Mon Sep 17 00:00:00 2001
From: manuconcepbrito <manu041196@gmail.com>
Date: Sat, 23 Oct 2021 15:20:45 +0200
Subject: [PATCH] fix Router issues

---
 wahlfang_web/package.json                     | 11 +++++-
 wahlfang_web/src/App.js                       | 10 +++---
 wahlfang_web/src/api/index.js                 |  2 ++
 wahlfang_web/src/api/management.js            |  2 +-
 .../src/components/BasicDatePicker.js         |  1 -
 wahlfang_web/src/components/Header.js         |  2 +-
 .../src/components/HeaderManagement.js        | 34 +++++++++++++++++++
 wahlfang_web/src/pages/ManagementApp.js       | 13 +++----
 wahlfang_web/src/pages/VoteApp.js             | 12 +++----
 wahlfang_web/src/pages/management/Login.js    |  2 +-
 wahlfang_web/src/pages/vote/Login.js          |  1 +
 11 files changed, 67 insertions(+), 23 deletions(-)
 create mode 100644 wahlfang_web/src/components/HeaderManagement.js

diff --git a/wahlfang_web/package.json b/wahlfang_web/package.json
index 97acfec..03ae39d 100644
--- a/wahlfang_web/package.json
+++ b/wahlfang_web/package.json
@@ -3,11 +3,19 @@
   "version": "0.1.0",
   "private": true,
   "dependencies": {
+    "@emotion/react": "^11.5.0",
+    "@emotion/styled": "^11.3.0",
+    "@material-ui/core": "^4.12.3",
+    "@material-ui/pickers": "^3.3.10",
+    "@mui/lab": "^5.0.0-alpha.51",
+    "@mui/material": "^5.0.4",
     "@testing-library/jest-dom": "^5.11.4",
     "@testing-library/react": "^11.1.0",
     "@testing-library/user-event": "^12.1.10",
     "bootstrap": "^5.1.1",
+    "date-fns": "^2.25.0",
     "formik": "^2.2.9",
+    "material-ui": "^0.20.2",
     "moment": "^2.29.1",
     "react": "^17.0.2",
     "react-bootstrap": "^2.0.0-rc.1",
@@ -17,7 +25,8 @@
     "react-router-dom": "^5.2.0",
     "react-scripts": "4.0.3",
     "recoil": "^0.3.1",
-    "web-vitals": "^1.0.1"
+    "web-vitals": "^1.0.1",
+    "yup": "^0.32.11"
   },
   "scripts": {
     "start": "react-scripts start",
diff --git a/wahlfang_web/src/App.js b/wahlfang_web/src/App.js
index a16e146..f90d0a7 100644
--- a/wahlfang_web/src/App.js
+++ b/wahlfang_web/src/App.js
@@ -34,11 +34,11 @@ function App() {
                         {/*        <VoteApp/>*/}
                         {/*    </Suspense>*/}
                         {/*</Route>*/}
-                        {/*<Route exact path="/">*/}
-                        {/*    <Suspense fallback={<Loading/>}>*/}
-                        {/*        <Help/>*/}
-                        {/*    </Suspense>*/}
-                        {/*</Route>*/}
+                        <Route path={["/", "/vote"]}>
+                            <Suspense fallback={<Loading/>}>
+                                <VoteApp/>
+                            </Suspense>
+                        </Route>
                         {/*<Route>404</Route>*/}
                     </Switch>
                 </Router>
diff --git a/wahlfang_web/src/api/index.js b/wahlfang_web/src/api/index.js
index 926ac6c..e7b16c1 100644
--- a/wahlfang_web/src/api/index.js
+++ b/wahlfang_web/src/api/index.js
@@ -40,12 +40,14 @@ export async function makeAuthenticatedVoterRequest(url = '', type = '', data =
 
 
 export const getJWTPayload = (token) => {
+    console.log(token)
     const decoded = token.split('.')[1];
     return JSON.parse(atob(decoded));
 }
 
 export const isTokenValid = (token) => {
     const tokenPayload = getJWTPayload(token);
+    console.log(new Date(tokenPayload.exp * 1000) >= new Date())
     return new Date(tokenPayload.exp * 1000) >= new Date()
 }
 
diff --git a/wahlfang_web/src/api/management.js b/wahlfang_web/src/api/management.js
index 6a4b962..7195632 100644
--- a/wahlfang_web/src/api/management.js
+++ b/wahlfang_web/src/api/management.js
@@ -44,7 +44,7 @@ export const refreshManagerToken = async () => {
 }
 
 export const loginManager = async (username, password) => {
-    console.log(managementAPIRoutes.login)
+    localStorage.removeItem("managerToken");
     const response = await makeRequest(managementAPIRoutes.login, 'POST', {
         username: username,
         password: password
diff --git a/wahlfang_web/src/components/BasicDatePicker.js b/wahlfang_web/src/components/BasicDatePicker.js
index cf36a9c..e3f2c15 100644
--- a/wahlfang_web/src/components/BasicDatePicker.js
+++ b/wahlfang_web/src/components/BasicDatePicker.js
@@ -12,7 +12,6 @@ export default function BasicDatePicker({
 
     }) {
   const [date, setDate] = React.useState(new Date());
-  console.log()
   return (
     <LocalizationProvider dateAdapter={AdapterDateFns}>
       <DateTimePicker
diff --git a/wahlfang_web/src/components/Header.js b/wahlfang_web/src/components/Header.js
index 81045d7..2cb363b 100644
--- a/wahlfang_web/src/components/Header.js
+++ b/wahlfang_web/src/components/Header.js
@@ -1,6 +1,6 @@
 import {Link} from "react-router-dom";
 import {useRecoilValue} from "recoil";
-import {isVoterAuthenticated} from "../state";
+import {isVoterAuthenticated} from "../state/index";
 import logo from '../assets/logo_inv.png';
 
 
diff --git a/wahlfang_web/src/components/HeaderManagement.js b/wahlfang_web/src/components/HeaderManagement.js
new file mode 100644
index 0000000..3622745
--- /dev/null
+++ b/wahlfang_web/src/components/HeaderManagement.js
@@ -0,0 +1,34 @@
+import {Link} from "react-router-dom";
+import {useRecoilValue} from "recoil";
+import {isManagerAuthenticated} from "../state/management";
+import logo from '../assets/logo_inv.png';
+
+
+export default function HeaderManagement() {
+    const authenticated = useRecoilValue(isManagerAuthenticated);
+
+    return (
+    <nav className="navbar navbar-expand navbar-dark bg-dark shadow">
+        <div className="container">
+            <Link className="navbar-brand" to="/">
+                <img src={logo} alt="StuStaNet" width="192px"/>
+            </Link>
+            <button className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
+                    aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
+                <span className="navbar-toggler-icon"></span>
+            </button>
+            <div className="collapse navbar-collapse" id="navbarNav">
+                <div className="navbar-text me-auto">Online Voting System</div>
+                <ul className="navbar-nav">
+                    <li className="nav-item">
+                        <Link className="nav-link" to="/help">Help</Link>
+                    </li>
+                    {authenticated ? (
+                        <Link className="nav-link" to="/management/logout">Logout</Link>
+                    ): ""}
+                </ul>
+            </div>
+        </div>
+    </nav>
+    )
+}
\ No newline at end of file
diff --git a/wahlfang_web/src/pages/ManagementApp.js b/wahlfang_web/src/pages/ManagementApp.js
index 02fe1ac..78a315f 100644
--- a/wahlfang_web/src/pages/ManagementApp.js
+++ b/wahlfang_web/src/pages/ManagementApp.js
@@ -8,8 +8,8 @@ import LoginManager from './management/Login';
 import {loadManagerToken, refreshManagerToken} from "../api/management";
 import Help from "./management/Help";
 import {managementWS} from "../websocket";
-import Header from "../components/Header";
-import Logout from "./vote/Logout";
+import HeaderManagement from "../components/HeaderManagement";
+import Logout from "./management/Logout";
 import ManagerAuthenticatedRoute from "../components/ManagerAuthenticatedRoute";
 import AddSession from "./management/AddSession"
 
@@ -20,12 +20,13 @@ export default function ManagementApp() {
     const {path} = useRouteMatch();
     useEffect(() => {
         const authToken = loadManagerToken();
-        if (authToken && isTokenValid(authToken.access)) {
+        if (authToken && authToken.access && isTokenValid(authToken.access)) {
+            console.log(authToken.access)
             setAuthenticated(true);
             setLoading(false);
             managementWS.initWs();
             console.log("found valid access token");
-        } else if (authToken && isTokenValid(authToken.refresh)) {
+        } else if (authToken && authToken.refresh && isTokenValid(authToken.refresh)) {
             console.log("found valid refresh token");
             refreshManagerToken()
                 .then(() => {
@@ -45,10 +46,10 @@ export default function ManagementApp() {
         <>
             {loading ? <Loading/> : (
                 <div id="content">
-                    <Header/>
+                    <HeaderManagement/>
                     <Switch>
                         <Route exact path={path}>
-                            <Help/>
+                            <LoginManager/>
                         </Route>
                         <Route exact path={`${path}/login`}>
                             <Suspense fallback={<Loading/>}>
diff --git a/wahlfang_web/src/pages/VoteApp.js b/wahlfang_web/src/pages/VoteApp.js
index 199ad4c..018f22e 100644
--- a/wahlfang_web/src/pages/VoteApp.js
+++ b/wahlfang_web/src/pages/VoteApp.js
@@ -19,8 +19,6 @@ import Header from "../components/Header";
 export default function VoteApp() {
     const [authenticated, setAuthenticated] = useRecoilState(isVoterAuthenticated);
     const [loading, setLoading] = useState(!authenticated);
-    const {path} = useRouteMatch();
-    console.log(path)
 
 
     useEffect(() => {
@@ -52,16 +50,16 @@ export default function VoteApp() {
                 <div id="content">
                     <Header/>
                     <Switch>
-                        <Route exact path={`${path}/code`}>
+                        <Route exact path="/vote/code">
                             <Suspense fallback={<Loading/>}>
                                 <Login/>
                             </Suspense>
                         </Route>
-                        <Route exact path={`${path}/help`}>
+                        <Route exact path="/help">
                             <Help/>
                         </Route>
                         <AuthenticatedRoute>
-                            <Route path={path} exact={true}>
+                            <Route path="/vote/home" exact={true}>
                                 <Suspense fallback={<Loading/>}>
                                     <Home/>
                                 </Suspense>
@@ -71,12 +69,12 @@ export default function VoteApp() {
                                     <Logout/>
                                 </Suspense>
                             </Route>
-                            <Route exact path={`${path}/election/:id/vote`}>
+                            <Route exact path="vote/election/:id/vote">
                                 <Suspense fallback={<Loading/>}>
                                     <PerformVote/>
                                 </Suspense>
                             </Route>
-                            <Route exact path={`${path}/election/:id/application`} >
+                            <Route exact path="vote/election/:id/application" >
                                 <Suspense fallback={<Loading/>}>
                                     <Application/>
                                 </Suspense>
diff --git a/wahlfang_web/src/pages/management/Login.js b/wahlfang_web/src/pages/management/Login.js
index b55ec8b..3402b2e 100644
--- a/wahlfang_web/src/pages/management/Login.js
+++ b/wahlfang_web/src/pages/management/Login.js
@@ -24,7 +24,7 @@ export default function LoginManager() {
     }
 
     if (authenticated) {
-        return <Redirect to="/help"/>
+        return <Redirect to="/management/add-session"/>
     }
 
     return (
diff --git a/wahlfang_web/src/pages/vote/Login.js b/wahlfang_web/src/pages/vote/Login.js
index 55aa5cc..6cadbb5 100644
--- a/wahlfang_web/src/pages/vote/Login.js
+++ b/wahlfang_web/src/pages/vote/Login.js
@@ -24,6 +24,7 @@ export default function Login() {
     }
 
     if (authenticated) {
+        debugger
         return <Redirect to="/"/>
     }
 
-- 
GitLab