Skip to content
Snippets Groups Projects
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;
}