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