From 677140750b15d2b5957fc5eb0d150d205047819d Mon Sep 17 00:00:00 2001
From: Nico Vermaas <vermaas@astron.nl>
Date: Fri, 2 Jul 2021 09:19:32 +0200
Subject: [PATCH] also add 'access_token' to token button

---
 src/components/ShowTokenButton.js  | 30 ++++++++++++++++++++++++++----
 src/components/auth/authControl.js |  2 +-
 src/contexts/GlobalContext.js      | 18 +++++++++++-------
 src/routes/Routes.js               |  2 +-
 4 files changed, 39 insertions(+), 13 deletions(-)

diff --git a/src/components/ShowTokenButton.js b/src/components/ShowTokenButton.js
index a6cda00..4d33308 100644
--- a/src/components/ShowTokenButton.js
+++ b/src/components/ShowTokenButton.js
@@ -4,11 +4,12 @@ import { GlobalContext } from "../contexts/GlobalContext";
 import { getTokenIcon, getOKIcon, getCopyIcon } from "../utils/styling";
 
 export default function ShowTokenButton(props) {
-    const { api_host, token, isAuthenticated } = useContext(GlobalContext);
+    const { api_host, idToken, accessToken, isAuthenticated } = useContext(GlobalContext);
     const [show, setShow] = useState(false);
 
     const [copySuccess, setCopySuccess] = useState('');
     const textAreaRef = useRef(null);
+    const textAreaRef2 = useRef(null);
 
     const handleClose = () => setShow(false);
     const handleShow = () => setShow(true);
@@ -19,11 +20,19 @@ export default function ShowTokenButton(props) {
         // This is just personal preference.
         // I prefer to not show the the whole text area selected.
         e.target.focus();
-        setCopySuccess('Copied!');
 
         setShow(false)
     };
 
+    function copyToClipboard2(e) {
+        textAreaRef2.current.select();
+        document.execCommand('copy');
+        // This is just personal preference.
+        // I prefer to not show the the whole text area selected.
+        e.target.focus();
+
+        setShow(false)
+    };
     function close(){
         setShow(false)
     }
@@ -45,15 +54,28 @@ export default function ShowTokenButton(props) {
                     <Modal.Title>{getTokenIcon('black')}{' '}oidc_id_token</Modal.Title>
                 </Modal.Header>
                 <Modal.Body>
-                    <Form.Control as="textarea" rows={12} ref={textAreaRef} value={token}>
-                    {token}
+                    <Form.Control as="textarea" rows={11} ref={textAreaRef} value={idToken}>
+                    {idToken}
                     </Form.Control>
                 </Modal.Body>
                 <Modal.Footer>
                     <Button variant="primary" onClick={copyToClipboard}>
                         {getCopyIcon()}{' '}Copy to Clipboard
                     </Button>
+                </Modal.Footer>
 
+                <Modal.Header closeButton>
+                    <Modal.Title>{getTokenIcon('black')}{' '}access_token</Modal.Title>
+                </Modal.Header>
+                <Modal.Body>
+                    <Form.Control as="textarea" rows={9} ref={textAreaRef2} value={accessToken}>
+                        {accessToken}
+                    </Form.Control>
+                </Modal.Body>
+                <Modal.Footer>
+                    <Button variant="primary" onClick={copyToClipboard2}>
+                        {getCopyIcon()}{' '}Copy to Clipboard
+                    </Button>
                 </Modal.Footer>
             </Modal>
             </>
diff --git a/src/components/auth/authControl.js b/src/components/auth/authControl.js
index 3cb663c..ebf8aae 100644
--- a/src/components/auth/authControl.js
+++ b/src/components/auth/authControl.js
@@ -4,7 +4,7 @@ import { Nav } from "react-bootstrap";
 import { GlobalContext } from "../../contexts/GlobalContext";
 
 export default function AuthControl() {
-  const { api_host, isAuthenticated, loggedInUserName, token } = useContext(GlobalContext);
+  const { api_host, isAuthenticated, loggedInUserName } = useContext(GlobalContext);
 
   console.log("loggedIn: ", isAuthenticated);
 
diff --git a/src/contexts/GlobalContext.js b/src/contexts/GlobalContext.js
index ba39d3e..2e3bd90 100644
--- a/src/contexts/GlobalContext.js
+++ b/src/contexts/GlobalContext.js
@@ -5,14 +5,15 @@ import getCookie from "../utils/getCookie";
 
 export const GlobalContext = createContext();
 
-function getUserName(api_host, setLoggedInUserName, setToken){
+// request the user profile (async) and on return set pieces of global state
+function setProfileState(api_host, setLoggedInUserName, setIdToken, setAccessToken){
   const profileUrl = api_host + "accounts/user-profiles/";
   axios
     .get(profileUrl, {withCredentials: true})
     .then((response) => {
-
-      setLoggedInUserName(response.data.results[0].full_name);
-      setToken(response.data.results[0].oidc_id_token)
+        setLoggedInUserName(response.data.results[0].full_name);
+        setIdToken(response.data.results[0].oidc_id_token)
+        setAccessToken(response.data.results[0].oidc_access_token)
     })
 }
 
@@ -28,7 +29,8 @@ export function GlobalContextProvider({ children }) {
   const [archives, setArchives] = useState();
   const [navbar, setNavbar] = useState();
   const [loggedInUserName, setLoggedInUserName] = useState();
-  const [token, setToken] = useState([]);
+  const [idToken, setIdToken] = useState([]);
+  const [accessToken, setAccessToken] = useState([]);
 
   useEffect(() => {
     axios
@@ -48,6 +50,7 @@ export function GlobalContextProvider({ children }) {
   // Zheng: "!!!!! Still need to look at sessionid and stuff"
   const [sessionid, setSessionid] = useState(getCookie("sessionid"));
   console.log("waah", sessionid, getCookie("sessionid"), document.cookie);
+
   const [isAuthenticated, setIsAuthenticated] = useState(
     sessionid ? true : false
   );
@@ -56,7 +59,7 @@ export function GlobalContextProvider({ children }) {
     setIsAuthenticated(true);
     setSessionid(getCookie("sessionid"));
     history.replace("/");
-    getUserName(api_host, setLoggedInUserName, setToken);
+    setProfileState(api_host, setLoggedInUserName, setIdToken, setAccessToken);
     return null;
   };
 
@@ -93,7 +96,8 @@ export function GlobalContextProvider({ children }) {
         handleLogout,
         handleError,
         loggedInUserName,
-        token,
+        idToken,
+        accessToken
       }}
     >
       {children}
diff --git a/src/routes/Routes.js b/src/routes/Routes.js
index 28a5043..096087e 100644
--- a/src/routes/Routes.js
+++ b/src/routes/Routes.js
@@ -64,7 +64,7 @@ export default function Routes() {
 
         </Switch>
 
-      <footer><small>esap-gui version 1 jul 2021 - 13:00</small></footer>
+      <footer><small>esap-gui version 2 jul 2021 - 9:00</small></footer>
     </Router>
   );
 }
-- 
GitLab