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