diff --git a/wahlfang_api/consumers.py b/wahlfang_api/consumers.py index fd994796c96dc9e195c838347022c3508a3a31ee..46df18dfca0ee5646cd2a06e1208981f44de443b 100644 --- a/wahlfang_api/consumers.py +++ b/wahlfang_api/consumers.py @@ -3,6 +3,9 @@ import json from channels.generic.websocket import AsyncWebsocketConsumer from channels.db import database_sync_to_async +from management.models import ElectionManager +from vote.models import Voter + class VoteAPIConsumer(AsyncWebsocketConsumer): @@ -26,8 +29,11 @@ class VoteAPIConsumer(AsyncWebsocketConsumer): # uuid = self.scope['url_route']['kwargs']['uuid'] # session = Session.objects.get(spectator_token=uuid) # else: - session = self.scope['user'].session - return f'api-vote-session-{session.pk}' + if isinstance(self.scope['user'], Voter): + session = self.scope['user'].session + return f'api-vote-session-{session.pk}' + else: + raise RuntimeError('error, trying to connect to voter websocket with an election manager') class ManagementAPIConsumer(AsyncWebsocketConsumer): @@ -48,5 +54,8 @@ class ManagementAPIConsumer(AsyncWebsocketConsumer): })) def get_manager_key(self): - manager_key = self.scope['user'].id - return f'api-election-manager-{manager_key}' + if isinstance(self.scope['user'], ElectionManager): + manager_key = self.scope['user'].id + return f'api-election-manager-{manager_key}' + else: + raise RuntimeError('error, trying to connect to voter websocket with an election manager') diff --git a/wahlfang_api/urls.py b/wahlfang_api/urls.py index ed7c1e2bc3ba1df93d0524cc470f182c675938d3..76cb857c8c0335d3d5f031f4f23a1988d59b7357 100644 --- a/wahlfang_api/urls.py +++ b/wahlfang_api/urls.py @@ -1,5 +1,5 @@ from django.urls import include, path -from rest_framework_nested import routers +from rest_framework import routers from rest_framework_simplejwt.views import ( TokenRefreshView, TokenVerifyView, diff --git a/wahlfang_web/package.json b/wahlfang_web/package.json index 6f2ee129248549654012143dc58296c279734b46..029fbf9116051b7cd69600181d7d62bc5e745370 100644 --- a/wahlfang_web/package.json +++ b/wahlfang_web/package.json @@ -26,7 +26,7 @@ "react-dom": "^17.0.2", "react-router-dom": "^5.2.0", "react-scripts": "4.0.3", - "recoil": "^0.3.1", + "recoil": "^0.4.1", "web-vitals": "^1.0.1", "yarn": "^1.22.17", "yup": "^0.32.11" diff --git a/wahlfang_web/src/components/HeaderManagement.js b/wahlfang_web/src/components/HeaderManagement.js index 36227453037749f3a5d8e66006ab64341e5e2bfd..d822ef18651a557a7f1125fdf1600add718808c0 100644 --- a/wahlfang_web/src/components/HeaderManagement.js +++ b/wahlfang_web/src/components/HeaderManagement.js @@ -10,7 +10,7 @@ export default function HeaderManagement() { return ( <nav className="navbar navbar-expand navbar-dark bg-dark shadow"> <div className="container"> - <Link className="navbar-brand" to="/"> + <Link className="navbar-brand" to="/management/sessions"> <img src={logo} alt="StuStaNet" width="192px"/> </Link> <button className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" @@ -21,7 +21,7 @@ export default function HeaderManagement() { <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> + <Link className="nav-link" to="/management/help">Help</Link> </li> {authenticated ? ( <Link className="nav-link" to="/management/logout">Logout</Link> diff --git a/wahlfang_web/src/pages/vote/Login.js b/wahlfang_web/src/pages/vote/Login.js index 55aa5cc2c5f1011e29001e15caaf5d6fb60ee089..e81cb42675b5dff6ffa016fceb6e377fe7961ff8 100644 --- a/wahlfang_web/src/pages/vote/Login.js +++ b/wahlfang_web/src/pages/vote/Login.js @@ -24,7 +24,7 @@ export default function Login() { } if (authenticated) { - return <Redirect to="/"/> + return <Redirect to="/vote/home"/> } return ( diff --git a/wahlfang_web/src/websocket.js b/wahlfang_web/src/websocket.js index 02c7702e26ec87e3a0795d114dedc1cda55d84dd..7d58f5e5daa520088b49d6b27f191a130cf79a55 100644 --- a/wahlfang_web/src/websocket.js +++ b/wahlfang_web/src/websocket.js @@ -1,16 +1,18 @@ import {loadManagerToken} from "./api/management"; +import {loadVoterToken} from "./api"; export const voterWebsocketURL = 'ws://localhost:8000/api/v1/vote/' export const managementWebsocketURL = 'ws://localhost:8000/api/v1/management/' export class WahlfangWebsocket { - constructor(url) { + constructor(url, isVoter) { this.url = url; + this.isVoter = isVoter; this.handlers = {}; // map of table name to callback } initWs = () => { - const token = loadManagerToken(); + const token = this.isVoter ? loadVoterToken() : loadManagerToken(); const url = this.url + '?token=' + token.access; this.ws = new WebSocket(url); this.ws.onopen = this.onopen; @@ -43,5 +45,5 @@ export class WahlfangWebsocket { } } -export const voterWS = new WahlfangWebsocket(voterWebsocketURL) -export const managementWS = new WahlfangWebsocket(managementWebsocketURL) +export const voterWS = new WahlfangWebsocket(voterWebsocketURL, true); +export const managementWS = new WahlfangWebsocket(managementWebsocketURL, false);