Skip to content
Snippets Groups Projects
script.js 3.24 KiB
Newer Older
  • Learn to ignore specific revisions
  • 'use strict';
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    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();
    
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    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 {
    
    Elisa Giglio's avatar
    Elisa Giglio committed
            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);
            }
    
    Elisa Giglio's avatar
    Elisa Giglio committed
            // 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];
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    }
    
    
    /**
     * 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;