soupirehn

This commit is contained in:
Guillem George 2026-05-15 17:27:27 +02:00
parent c3e9ffcb6d
commit 168a35f9de
2 changed files with 53 additions and 67 deletions

View file

@ -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) {
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",
refresh_token: refreshToken,
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) {
console.error("Failed to retrieve OIDC token")
localStorage.clear();
redirect.redirectToLoginPage()
refreshToken= refreshToken || localStorage.getItem("refresh_token");
if (!refreshToken) {
console.error("Unable to retrieve refresh token")
return false
}
const {
// access_token,
// token_type,
refresh_token,
// expires_in,
id_token
} = response.body
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": "authorization_code",
refresh_token: refreshToken,
scope: "epita profile picture"
}
const response = await sendRequest(endpoint, formData)
if (response === null) {
console.error("Failed to retrieve OIDC token")
alert("Failed to retrieve OIDC token")
// console.debug("Saving token and refresh tokens...")
localStorage.setItem("token", id_token);
localStorage.setItem("refresh_token", refresh_token);
localStorage.clear();
redirect.redirectToLoginPage()
return false;
}
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
}

View file

@ -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;
}