From c4e9fc357590a0eab63b4536ba7f4f8934affad8 Mon Sep 17 00:00:00 2001
From: manuconcepbrito <manu041196@gmail.com>
Date: Wed, 6 Oct 2021 19:23:17 +0200
Subject: [PATCH] Logout for Management Consumer

---
 wahlfang_web/src/api/index.js               |  5 ++++
 wahlfang_web/src/pages/ManagementApp.js     |  9 +++++++
 wahlfang_web/src/pages/management/Logout.js | 26 +++++++++++++++++++++
 3 files changed, 40 insertions(+)
 create mode 100644 wahlfang_web/src/pages/management/Logout.js

diff --git a/wahlfang_web/src/api/index.js b/wahlfang_web/src/api/index.js
index 926ac6c..40d4281 100644
--- a/wahlfang_web/src/api/index.js
+++ b/wahlfang_web/src/api/index.js
@@ -85,6 +85,11 @@ export const logoutVoter = async () => {
     return true;
 }
 
+export const logoutManager = async () => {
+    localStorage.removeItem("managerToken");
+    return true;
+}
+
 export const fetchSpectatorInfo = async (uuid) => {
     const response = await makeRequest(`/vote/spectator/${uuid}/`, 'GET');
     if (response.status === 200) {
diff --git a/wahlfang_web/src/pages/ManagementApp.js b/wahlfang_web/src/pages/ManagementApp.js
index 21347e4..a7a09f6 100644
--- a/wahlfang_web/src/pages/ManagementApp.js
+++ b/wahlfang_web/src/pages/ManagementApp.js
@@ -9,6 +9,8 @@ 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 AuthenticatedRoute from "../components/AuthenticatedRoute";
 
 
 export default function ManagementApp() {
@@ -56,6 +58,13 @@ export default function ManagementApp() {
                         <Route exact path={`${path}/help`}>
                             <Help/>
                         </Route>
+                        <AuthenticatedRoute>
+                            <Route exact path="/logout">
+                                <Suspense fallback={<Loading/>}>
+                                    <Logout/>
+                                </Suspense>
+                            </Route>
+                        </AuthenticatedRoute>
                     </Switch>
                 </div>
             )}
diff --git a/wahlfang_web/src/pages/management/Logout.js b/wahlfang_web/src/pages/management/Logout.js
new file mode 100644
index 0000000..b5b5c16
--- /dev/null
+++ b/wahlfang_web/src/pages/management/Logout.js
@@ -0,0 +1,26 @@
+import React, {useEffect} from "react";
+import Layout from "../../components/Layout";
+import {useSetRecoilState} from "recoil";
+import {isManagerAuthenticated} from "../../state/management";
+import Loading from "../../components/Loading";
+import {logoutVoter} from "../../api";
+
+
+export default function Logout() {
+    const setAuthenticated = useSetRecoilState(isManagerAuthenticated);
+
+    useEffect(() => {
+        logoutVoter().then(result => {
+            setAuthenticated(false);
+            // TODO: this is a very hacky way of reloading the whole app such that the recoil app state is reset.
+            // TODO: find a saner way of resetting the recoil state without having to force reload the whole page.
+            window.location.assign('/');
+        });
+    })
+
+    return (
+        <Layout title="logout">
+            <Loading/>
+        </Layout>
+    );
+}
-- 
GitLab