From 9eb3ab91fb653ca6d4921238e2a497427405f178 Mon Sep 17 00:00:00 2001 From: realtradam Date: Fri, 28 Jun 2024 17:25:36 -0400 Subject: add login --- react-frontend/src/components/Layout.tsx | 22 ++++++++++++++++------ react-frontend/src/pages/CloseWindow.tsx | 19 +++++++++++++++++++ react-frontend/src/routes/index.tsx | 26 +++++++++++++++++++++++++- 3 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 react-frontend/src/pages/CloseWindow.tsx diff --git a/react-frontend/src/components/Layout.tsx b/react-frontend/src/components/Layout.tsx index 8b87634..8f834ef 100644 --- a/react-frontend/src/components/Layout.tsx +++ b/react-frontend/src/components/Layout.tsx @@ -1,4 +1,5 @@ import { Outlet } from "react-router-dom"; +import { useState } from "react"; import { IconButton, Button, ButtonGroup } from 'rsuite'; import { Icon } from '@rsuite/icons'; import { FaUser } from "react-icons/fa6"; @@ -6,19 +7,28 @@ import { FaGamepad } from "react-icons/fa"; import { GiCowboyHolster } from "react-icons/gi"; import { GrAdd } from "react-icons/gr"; -export default function Layout() +export type userData = { userData: { name: string } }; + + //{ userData.name ?
Logged in as:
{userData.name}
: Login with Github } + + +export default function Layout({userData} : userData) { + const loginLink = () => { + window.open(`https://github.com/login/oauth/authorize?client_id=${import.meta.env.VITE_GITHUB_CLIENTID}`); + }; + + + const loggedout_element = }>Log In; + const loggedin_element = ; + return( <>
- {/*}>Log In*/} - - - - + { userData.name ? loggedin_element : loggedout_element }
diff --git a/react-frontend/src/pages/CloseWindow.tsx b/react-frontend/src/pages/CloseWindow.tsx new file mode 100644 index 0000000..b92d77e --- /dev/null +++ b/react-frontend/src/pages/CloseWindow.tsx @@ -0,0 +1,19 @@ + +export default function CloseWindow () { + + // trigger localStorage listener in other tabs. + // this forces react rerender where required. + localStorage.setItem("logged in trigger", String(Math.random())); + // close window once done + window.close(); + + // window can only be closed if it was opened by javascript. + // if the window was opened by a user then just redirect to + // the home page instead. + window.location.replace("/"); + + return( + <> + + ); +} diff --git a/react-frontend/src/routes/index.tsx b/react-frontend/src/routes/index.tsx index 5fcae2b..e22bcc4 100644 --- a/react-frontend/src/routes/index.tsx +++ b/react-frontend/src/routes/index.tsx @@ -1,14 +1,38 @@ +import { useState, useEffect } from "react"; import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; import Home from "../pages/Home"; import Layout from "../components/Layout"; +import CloseWindow from "../pages/CloseWindow"; export default function Index() { + + const [userData, setUserData] = useState({ name: '' }); + useEffect(() => { + const update_login_status = () => { + //localStorage.removeItem("logged in trigger"); + const url = `${import.meta.env.VITE_API_TITLE}/api/v1/auth/data`; + try { fetch(url, { + credentials: "include" + }).then((response) => { + if(response.ok) { + return response.json(); + } + //throw new Error("Network response was not ok."); + }).then((response) => response && setUserData(response.user_data)).catch((err) => { console.log(err); });} + catch(err) { console.log(err); } + }; + window.addEventListener('storage', update_login_status ); + update_login_status(); + return () => { window.removeEventListener('storage', update_login_status); }; + }, []); + return (<> - }> + }> } /> + } /> -- cgit v1.2.3