From f21f3fff3f7798ab1784f8ac8b810f670d629394 Mon Sep 17 00:00:00 2001
From: Minh Duong <github@whitehoodhacker.net>
Date: Wed, 26 Jun 2024 09:59:09 -0700
Subject: [PATCH] Add additional verify confirmation button

---
 client/src/routes/verify.js | 43 ++++++++++++++++++++++++++-----------
 1 file changed, 30 insertions(+), 13 deletions(-)

diff --git a/client/src/routes/verify.js b/client/src/routes/verify.js
index 61851756a..6cd68b8e8 100644
--- a/client/src/routes/verify.js
+++ b/client/src/routes/verify.js
@@ -1,3 +1,4 @@
+import { Fragment } from 'preact'
 import { useEffect, useState } from 'preact/hooks'
 import Error from './error'
 import config from '../config'
@@ -8,25 +9,41 @@ const Verify = () => {
   const [authToken, setAuthToken] = useState(null)
   const [emailSet, setEmailSet] = useState(false)
   const [error, setError] = useState(null)
+  const [pending, setPending] = useState(true)
 
   useEffect(() => {
     document.title = `Verify | ${config.ctfName}`
+  }, [])
 
-    ;(async () => {
-      const qs = new URLSearchParams(location.search)
-      if (qs.has('token')) {
-        const verifyRes = await verify({ verifyToken: qs.get('token') })
-        if (verifyRes.authToken) {
-          setAuthToken(verifyRes.authToken)
-        } else if (verifyRes.emailSet) {
-          setEmailSet(true)
-        } else {
-          setError(verifyRes.verifyToken)
-        }
+  const handleVerifyClick = async () => {
+    const qs = new URLSearchParams(location.search)
+    if (qs.has('token')) {
+      const verifyRes = await verify({ verifyToken: qs.get('token') })
+      if (verifyRes.authToken) {
+        setAuthToken(verifyRes.authToken)
+      } else if (verifyRes.emailSet) {
+        setEmailSet(true)
+      } else {
+        setError(verifyRes.verifyToken)
       }
-    })()
-  }, [])
+    } else {
+      setError("No token was provided!")
+    }
+    setPending(false)
+  }
 
+  if (pending) {
+    return (
+      <Fragment>
+        <div class='row u-center'>
+          <h3>Finish verifying your action</h3>
+        </div>
+        <div class='row u-center'>
+          <button class='btn-info' onClick={() => handleVerifyClick()}>Verify</button>
+        </div>
+      </Fragment>
+    )
+  }
   if (error) {
     return <Error error='401' message={error} />
   }