-
Elisa Giglio authoredElisa Giglio authored
script.js 3.24 KiB
'use strict';
import Secure from './secure.js';
import Domain from './domain.js';
import App from './app';
// import * as jose from 'jose'; // per la gestione del token
const mySecure = new Secure();
let token = null;
const uri = window.location.toString();
if(!uri.includes('#')) {
const a = document.getElementById("my-link");
a.href = a.href.replace("$MY_CODE_CHALLENGE", mySecure.codeChallenge).replace("$MY_STATE", mySecure.state);
sessionStorage.setItem("stateSent", mySecure.state); // state inviato durante la richiesta dell'authcode
sessionStorage.setItem("codeVerifier", mySecure.codeVerifier);
}
else {
// l'uri e' del tipo localhost:3000/secured# seguito da parametri
const uriSplit = uri.split('#');
const params = uriSplit[1].split('&');
const uriState = queryStringGetValue(params[0]);
const uriAuthCode = queryStringGetValue(params[2]);
const body = document.getElementById('body-id');
body.innerHTML = "";
if(!sessionStorage.stateSent || sessionStorage.stateSent !== uriState) {
body.innerHTML = `Errors in the request!`;
}
else {
token = await requestToken(uriAuthCode); // post per la richiesta del token
if(token !== null) {
console.log(token);
const myDomains = getMyDomains(token);
const app = new App(myDomains);
}
// DA FARE: capire come richiedere il refresh token
}
}
/**
* Ottengo il valore associato al parametro.
* @param {*} queryString query string del tipo parametro=valore.
* @returns il valore associato al parametro.
*/
function queryStringGetValue(queryString) {
const arr = queryString.split('=');
return arr[1];
}
/**
* Post per la richiesta del token
* @returns il token ottenuto
*/
async function requestToken(uriAuthCode) {
const url = 'http://localhost:8080/realms/test00/protocol/openid-connect/token';
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-type':'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
grant_type: 'authorization_code',
client_id: 'myclient',
code_verifier: sessionStorage.getItem("codeVerifier"),
code: uriAuthCode,
redirect_uri: 'http://localhost:3000/secured'
})
});
const token = await response.json();
if(response.ok)
return token;
else
return null;
}
/**
* Funzione per ottenenere dal domain manager tutte le informazioni
* sui domini dell'utente che ha fatto il login
* @param {*} token token da inviare al domain manager
*/
async function getMyDomains(token) {
const responseDomain = await fetch('http://localhost:3001/secured/domains', { // DA FARE: controllare che l'uri che ho specificato qui coincida con quello specificato dal domain manager
method: 'GET',
headers: {
// DA FARE: mettere qui il token
}
}) ;
const domainsJson = await response.json();
if(response.ok) {
const domainsArray = domainsJson.response;
const myDomains = domainsArray.map((d) => Domain.from(d));
return myDomains;
}
else
throw domainsJson;
}
export function getToken() {
return token;
}