X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fprive%2Fjavascript%2Flogin.js;fp=www%2Fprive%2Fjavascript%2Flogin.js;h=874e60e97857f2eb28aa010ea521fd6a4f7c412f;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hp=0000000000000000000000000000000000000000;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c;p=velocampus%2Fweb%2Fwww.git diff --git a/www/prive/javascript/login.js b/www/prive/javascript/login.js new file mode 100644 index 0000000..874e60e --- /dev/null +++ b/www/prive/javascript/login.js @@ -0,0 +1,90 @@ +function affiche_login_secure() { + if (alea_actuel) + jQuery('#pass_securise').show(); + else + jQuery('#pass_securise').hide(); +} + +function informe_auteur(c){ + informe_auteur_en_cours = false; + eval('c = '+c); // JSON envoye par informer_auteur.html + if (c) { + alea_actuel = c.alea_actuel; + alea_futur = c.alea_futur; + // indiquer le cnx si on n'y a pas touche + jQuery('input#session_remember:not(.modifie)') + .attr('checked',(c.cnx=='1')?'checked':''); + } else { + alea_actuel = ''; + } + if (c.logo) + jQuery('#spip_logo_auteur').html(c.logo); + else + jQuery('#spip_logo_auteur').html(''); + affiche_login_secure(); +} + +function calcule_hash_pass(pass){ + if ((alea_actuel || alea_futur) + && !pass.match(/^\{([0-9a-f]{32});([0-9a-f]{32})\}$/i) + && !pass.match(/^\{([0-9a-f]{64});([0-9a-f]{64});([0-9a-f]{32});([0-9a-f]{32})\}$/i) + && sha256_self_test() // verifions que le hash sha est operationnel + ) { + var hash = ""; + hash = hex_sha256(alea_actuel + pass); + + hash = hash+';'+hex_sha256(alea_futur + pass); + // envoyer aussi le md5 si demande (compatibilite) + if (window.calcMD5){ + hash = hash+';'+calcMD5(alea_actuel + pass); + hash = hash+';'+calcMD5(alea_futur + pass); + } + + jQuery('input[name=password]').attr('value','{'+hash+'}'); + } +} + +function actualise_auteur(){ + if (login != jQuery('#var_login').attr('value')) { + informe_auteur_en_cours = true; + login = jQuery('#var_login').attr('value'); + var currentTime = new Date();// on passe la date en var pour empecher la mise en cache de cette requete (bug avec FF3 & IE7) + jQuery.get(page_auteur, {var_login:login,var_compteur:currentTime.getTime()},informe_auteur); + } +} + +function login_submit(){ + actualise_auteur(); + var inputpass = jQuery('input[name=password]'); + pass = inputpass.attr('value'); + // ne pas laisser le pass d'un auteur "auth=spip" circuler en clair + if (pass) { + // si l'information est en cours, retenter sa chance + // pas plus de 5 fois (si profondeur_url fausse, la requete d'information echoue et ne repond jamais) + if (informe_auteur_en_cours && (attente_informe<5)) { + attente_informe++; + jQuery('form#formulaire_login').animeajax().find('p.boutons input').before('.'); // montrer qu'il se passe quelque chose + setTimeout(function(){ + jQuery('form#formulaire_login').submit(); + }, 1000); + return false; + } + + // Si on a l'alea, on peut lancer le submit apres avoir hashe le pass + if (alea_actuel || alea_futur) { + // il ne faut pas injecter le pass hashe directement dans l'input password visible car + // - cela est perturbant + // - certains navigateurs memorisent le hash au lieu du pass ... + // on cree un input hidden a cote, on lui met le name="password" + // et on vide le champ visible + inputpass.after(''); + inputpass.attr('name','nothing').attr('value',''); + calcule_hash_pass(pass); + } + // si on arrive pas a avoir une reponse ajax, vider le pass pour forcer un passage en 2 fois + else if(informe_auteur_en_cours) + jQuery('input[name=password]').attr('value',''); + // sinon c'est que l'auteur n'existe pas + // OU qu'il sera accepte par LDAP ou autre auth avec mot de passe en clair + } +}