Subversion Repositories Applications.reseau

Rev

Rev 79 | Rev 100 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

$(document).ready(function() {
        // infobulles
        $('[data-toggle="tooltip"]').tooltip();

        // trucage ordre des champs pour passer du login au mdp sans passer
        // par le lien "oublié ?" => pas standard, c'est mal - @TODO faire mieux
        // Ordre : login => mdp => oublie => s'inscrire
        $('#login').keypress(function(e) {
                if(e.keyCode == 9) {
                        if(! e.shiftKey) {
                                $('#mdp').focus();
                                return false;
                        }
                }
        });
        $('#mdp').keypress(function(e) {
                if(e.keyCode == 9) {
                        if(e.shiftKey) {
                                $('#login').focus();
                        } else {
                                $('#mdp-oublie').focus();
                        }
                        return false;
                }
        });
        $('#mdp-oublie').keypress(function(e) {
                if(e.keyCode == 9) {
                        if(e.shiftKey) {
                                $('#mdp').focus();
                        } else {
                                $('#lien-inscription').focus();
                        }
                }
                return false;
        });
        $('#lien-inscription').keypress(function(e) {
                if(e.keyCode == 9) {
                        if(e.shiftKey) {
                                $('#mdp-oublie').focus();
                                return false;
                        }
                }
        });

        // partenaire avec lequel se connecter
        $('#liste-fournisseurs ul li a').click(function() {
                $('#liste-fournisseurs ul li a').attr('data-focus', 'false');
                $(this).attr('data-focus', 'true');
                var nomPartenaire = $(this).data('nom-partenaire'),
                        urlOubliMdp = $(this).data('url-oubli-mdp'),
                        loginLegende = $(this).data('login-legende'),
                        loginTypeChamp = $(this).data('login-type-champ');
                $('#nom-partenaire').html(nomPartenaire);
                $('#mdp-oublie').attr('href', urlOubliMdp);
                $('#login').attr('type', loginTypeChamp);
                $('#login').attr('placeholder', loginLegende);
        });

        // Connexion au SSO
        $('#formulaire-identification').submit(function() {
                connecterUtilisateur();
                return false;
        });

        // Déconnexion du SSO
        $('#deconnexion').click(function() {
                deconnecterUtilisateur();
                return false;
        });

        // vérification de l'état au chargement
        var urlAuth = baseUrlAuth + '/identite';
        $.ajax({
            url: urlAuth,
            type: "GET",
            dataType: 'json',
            xhrFields: {
                 withCredentials: true
            }
        }).done(function(data) {
                // connecté
                definirUtilisateur(data.token);
                afficherPanneauBienvenue();
        })
        .fail(function(error) {
                // non connecté
                afficherPanneauIdentification();
        });

        // exécuter une action si définie (par ex: déconnexion)
        executerAction();
});

/**
 * Connecte l'utilisateur au SSO
 */
function connecterUtilisateur() {
        var login = $('#login').val(),
                mdp = $('#mdp').val();
        if (login == '' || mdp == '') {
                alert('Veuillez entrer votre login et votre mot de passe');
        } else {
                var urlAuth = baseUrlAuth + '/connexion?login=' + login + '&password=' + mdp;
                // partenaire ?
                var codePartenaire = $('#liste-fournisseurs a[data-focus="true"]').data('code-partenaire');
                if (codePartenaire != undefined) {
                        urlAuth += '&partner=' + codePartenaire;
                }
                $.ajax({
                    url: urlAuth,
                    type: "GET",
                    dataType: 'json',
                    xhrFields: {
                         withCredentials: true
                    }
                })
                .done(function(data) {
                        rediriger();
                        definirUtilisateur(data.token);
                        afficherPanneauBienvenue();
                        masquerErreurs();
                })
                .fail(function(error) {
                        afficherErreurLogin();
                });
        }
}

/**
 * Déconnecte l'utilisateur du SSO
 */
function deconnecterUtilisateur() {
        var urlAuth = baseUrlAuth + '/deconnexion';
        $.ajax({
            url: urlAuth,
            type: "GET",
            dataType: 'json',
            xhrFields: {
                 withCredentials: true
            }
        })
        .done(function(data) {
                rediriger();
                definirUtilisateur();
                afficherPanneauIdentification();
                masquerErreurs();
        })
        .fail(function(error) {
                // @TODO gérer l'affichage de l'erreur, mais pas facile à placer
                // dans l'interface actuelle sans que ce soit moche
                //afficherErreurServeur();
        });
}

/**
 * Si la variable "action" est définie (provenant du paramètre GET "origine"),
 * exécute l'action associée (par ex: déconnexion)
 */
function executerAction() {
        switch (action) {
                case "deconnexion":
                        deconnecterUtilisateur();
                        break;
                default :
                        // on ne fait rien
        }
}

function definirUtilisateur(jeton) {
        var nomComplet = '';
        if (jeton != undefined) {
                // décodage jeton
                var jetonDecode = decoderJeton(jeton);
                nomComplet = jetonDecode.intitule;
                email = jetonDecode.sub;
        }
        // affichage
        $('#nom-complet').html(nomComplet);
        $('#nom-complet').attr('title', email);
}

/**
 * Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE
 * JETON EST VALIDE, ne pas décoder n'importe quoi - pas trouvé de lib simple
 * Si pb de cross-browser, tenter ceci : https://code.google.com/p/javascriptbase64/
 * ou ceci : https://code.google.com/p/crypto-js
 */
function decoderJeton(jeton) {
        parts = jeton.split('.');
        payload = parts[1];
        payload = atob(payload);
        payload = JSON.parse(payload, true);

        return payload;
}

/**
 * Si la variable "origine" est définie (provenant du paramètre GET "origine"),
 * redirige l'utilisateur vers cette page
 */
function rediriger() {
        if (origine != '') {
                window.location.href = origine;
        }
}

function afficherPanneauIdentification() {
        $('#panneau-identification').show();
        $('#panneau-bienvenue').hide();
        $('.boite-centre').addClass('reduite');
}

function afficherPanneauBienvenue() {
        $('#panneau-identification').hide();
        $('#panneau-bienvenue').show();
        $('.boite-centre').removeClass('reduite');
}

function afficherErreurLogin() {
        $('#info-erreur-login').show();
}

function afficherErreurServeur() {
        $('#info-erreur-serveur').show();
}

function masquerErreurs() {
        $('.info-erreur').hide();
}