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