diff --git a/src/utils/auth.js b/src/utils/auth.js index db18f43..36c8246 100644 --- a/src/utils/auth.js +++ b/src/utils/auth.js @@ -1,5 +1,31 @@ import * as redirect from "./redirect"; +async function sendRequest(endpoint, body) { + const request = { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + + body: new URLSearchParams(body) + }; + console.debug(request) + + let response; + try { + response = await fetch(endpoint, request) + if (!response.ok) { + throw new Error(response.statusText) + } + } + catch (err) { + console.error(err) + return null + } + + return await response.json() +} + /** * @param {string} code the authorization code received from the OIDC * provider @@ -12,47 +38,22 @@ async function getToken(code) { const formData = { "grant_type": "authorization_code", "code": code, - "redirect_uri": redirect.createLink(), + "redirect_uri": `${auth_url}/complete/epita/`, "client_id": import.meta.env.VITE_CLIENT_ID } - const request = { - method: "POST", - // mode: 'cors', - headers: { - "Content-Type": "application/x-www-form-urlencoded", - }, - - body: new URLSearchParams(formData) - }; - - try { - const response = await fetch(endpoint, request) - if (!response.ok) { - throw new Error(response.statusText) - } - } - catch (err) { + const response = await sendRequest(endpoint, formData) + if (response === null) { console.error("Failed to retrieve OIDC token") alert("Failed to retrieve OIDC token") - console.error(err) - localStorage.clear(); redirect.redirectToLoginPage() - return false + return false; } - const { - // access_token, - // token_type, - refresh_token, - // expires_in, - id_token - } = response.body - - // console.debug("Saving token and refresh tokens...") - localStorage.setItem("token", id_token); - localStorage.setItem("refresh_token", refresh_token); + localStorage.setItem("token", response.id_token); + localStorage.setItem("refresh_token", response.refresh_token); + console.debug("Saved token and refresh tokens") return true } @@ -64,50 +65,34 @@ async function getToken(code) { */ async function refreshToken(refreshToken) { + refreshToken= refreshToken || localStorage.getItem("refresh_token"); + if (!refreshToken) { + console.error("Unable to retrieve refresh token") + return false + } + const auth_url = import.meta.env.VITE_URL; const endpoint = `${auth_url}/auth-api/token`; const formData = { - client_id: import.meta.env.VITE_CLIENT_ID, - client_secret: "...", - grant_type: "code", + "client_id": import.meta.env.VITE_CLIENT_ID, + // client_secret: "", + "grant_type": "authorization_code", refresh_token: refreshToken, - scope: "epita profile picture", + scope: "epita profile picture" } - const request = { - method: "POST", - // mode: 'cors', - headers: { - "Content-Type": "application/x-www-form-urlencoded", - }, - - body: new URLSearchParams(formData) - }; - - try { - const response = await fetch(endpoint, request) - if (!response.ok) { - throw new Error(response.statusText) - } - } - catch (err) { + const response = await sendRequest(endpoint, formData) + if (response === null) { console.error("Failed to retrieve OIDC token") + alert("Failed to retrieve OIDC token") localStorage.clear(); redirect.redirectToLoginPage() - return false + return false; } - const { - // access_token, - // token_type, - refresh_token, - // expires_in, - id_token - } = response.body - - // console.debug("Saving token and refresh tokens...") - localStorage.setItem("token", id_token); - localStorage.setItem("refresh_token", refresh_token); + localStorage.setItem("token", response.id_token); + localStorage.setItem("refresh_token", response.refresh_token); + console.debug("Saved token and refresh tokens") return true } @@ -133,6 +118,6 @@ async function authenticate() { export { getToken, - // refreshToken, + refreshToken, authenticate } diff --git a/src/utils/redirect.js b/src/utils/redirect.js index 2e1be65..d8d3ae8 100644 --- a/src/utils/redirect.js +++ b/src/utils/redirect.js @@ -10,7 +10,8 @@ function createLink() { }); const base_url = import.meta.env.VITE_AUTH_URL - return `${base_url}/authorize?${params}` + const res = `${base_url}/authorize?${params}` + return res; }