From f0cec1c3416b6cc883d9c0691188e78e2abe78f4 Mon Sep 17 00:00:00 2001
From: rfhf19 <rfhf19@inf.ufpr.br>
Date: Mon, 5 Aug 2024 11:18:12 -0300
Subject: [PATCH] backend python missmatch

---
 src/app/entrar/components/LoginForm.js | 24 ++++++++++++++++++++++--
 src/app/govbr/page.js                  | 26 ++++++++++++++++++++------
 2 files changed, 42 insertions(+), 8 deletions(-)

diff --git a/src/app/entrar/components/LoginForm.js b/src/app/entrar/components/LoginForm.js
index a0c94697..6056ffef 100644
--- a/src/app/entrar/components/LoginForm.js
+++ b/src/app/entrar/components/LoginForm.js
@@ -24,9 +24,29 @@ export default function LoginForm({
   const handleOpenModalPasswd = () => setOpenModalPasswd(true);
   const handleCloseModalPasswd = () => setOpenModalPasswd(false);
 
-  const handleGovBr = () => {
+  const handleGovBr = async () => {
     const state = window.crypto.randomUUID();
     localStorage.setItem("govbr_state", state);
+    async function generateCodeVerifier() {
+      var code_verifier = new Uint8Array(32);
+      window.crypto.getRandomValues(code_verifier);
+      return code_verifier;
+    }
+    function generateCodeChallenge(code_verifier) {
+      return base64URL(window.crypto.subtle.digest("SHA-256", code_verifier));
+    }
+    async function base64URL(buffer) {
+      // use a FileReader to generate a base64 data URI:
+      const base64url = await new Promise(r => {
+        const reader = new FileReader()
+        reader.onload = () => r(reader.result)
+        reader.readAsDataURL(new Blob([buffer]))
+      });
+      // remove the `data:...;base64,` part from the start
+      return base64url.slice(base64url.indexOf(',') + 1);
+    }    
+    const codeVerifier = await generateCodeVerifier();
+    localStorage.setItem("govbr_code_verifier", await base64URL(codeVerifier));
     const params = {
       response_type: "code",
       client_id: "mecredhomologa.c3sl.ufpr.br",
@@ -34,7 +54,7 @@ export default function LoginForm({
       redirect_uri: "https://mecredhomologa.c3sl.ufpr.br/govbr",
       nonce: "1121",
       state,
-      code_challenge: "Ra1GhTAFgJYB8p_uS8XfPnhBMcU1FDyZuIZ4akw5IAM",
+      code_challenge: await generateCodeChallenge(codeVerifier),
       code_challenge_method: "S256",
     };
 
diff --git a/src/app/govbr/page.js b/src/app/govbr/page.js
index 7af42911..567242f9 100644
--- a/src/app/govbr/page.js
+++ b/src/app/govbr/page.js
@@ -1,5 +1,6 @@
 "use client"
 import mecredApi from "@/axiosConfig";
+import axios from "axios";
 import { useSearchParams } from "next/navigation";
 import { useEffect } from "react";
 
@@ -7,9 +8,23 @@ export default function Govbr() {
 
     const searchParams = useSearchParams();
 
-    const validate = async () => {
+    const getToken = async (code) => {
         try {
-            const res = await mecredApi.post("/govbr");
+
+            if (!localStorage.getItem("govbr_code_verifier")) {
+                console.error("local storage não possui code verifier.");
+                return
+            }
+            const verifier = localStorage.getItem("govbr_code_verifier");
+
+            const res = await axios.post("http://127.0.0.1:3335/govbr", 
+                {
+                    code,
+                    verifier
+                }
+            );
+
+            console.log("foi")
         } catch(error) {
             console.error(error);
         }
@@ -18,12 +33,11 @@ export default function Govbr() {
     useEffect(() => {
         let code;
         const validateState = () => {
-
-            if (!searchParams.get("govbr_code")) {
+            if (!searchParams.get("code")) {
                 console.error("local storage não possui code.")
                 return
             }
-            code = searchParams.getItem("govbr_code");
+            code = searchParams.get("code");
             console.log(code)
 
             if (!localStorage.getItem("govbr_state")) {
@@ -51,6 +65,6 @@ export default function Govbr() {
             console.log("State validado com sucesso!")
         }
         validateState()
-        
+        getToken(code)
     }, [searchParams]);
 };
\ No newline at end of file
-- 
GitLab