From 266843eb442ae89d93b9ab2035c18f859f1e2f91 Mon Sep 17 00:00:00 2001
From: Dorian Koch <doriank@fsmpi.rwth-aachen.de>
Date: Sat, 21 Sep 2024 14:20:42 +0200
Subject: [PATCH] Periodically check authentication status in player login,
 closes #31

---
 src/components/Player.tsx | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/components/Player.tsx b/src/components/Player.tsx
index 6ba2294..18c7d70 100644
--- a/src/components/Player.tsx
+++ b/src/components/Player.tsx
@@ -307,8 +307,34 @@ function AuthorizeHelper({
                 const pop = window.open(res.verification_url, "_blank");
                 if (pop) {
                     pop.focus();
+                    let triggerReload = false;
+                    let tries = 0;
+                    const testAuth = () => {
+                        tries++;
+                        if (pop.closed || triggerReload || tries > 120) {
+                            return; // this will be handled by the other interval
+                        }
+                        api.getAuthenticationStatus({ lecture_id: lecture.id })
+                            .then((res) => {
+                                if (res.is_lecture_authenticated) {
+                                    triggerReload = true;
+                                } else if ((res.in_progress_authentication ?? "").length === 0) {
+                                    console.log(
+                                        "Authentication appears to have been cancelled by the user",
+                                    );
+                                    triggerReload = true;
+                                } else {
+                                    setTimeout(testAuth, 1000);
+                                }
+                            })
+                            .catch((e) => {
+                                console.error(e);
+                            });
+                    };
+                    setTimeout(testAuth, 5000);
                     let popInterval = setInterval(() => {
-                        if (pop.closed) {
+                        if (pop.closed || triggerReload) {
+                            triggerReload = true;
                             clearInterval(popInterval);
                             reloadFunc();
                         }
-- 
GitLab