874e60e97857f2eb28aa010ea521fd6a4f7c412f
[velocampus/web/www.git] / www / prive / javascript / login.js
1 function affiche_login_secure() {
2 if (alea_actuel)
3 jQuery('#pass_securise').show();
4 else
5 jQuery('#pass_securise').hide();
6 }
7
8 function informe_auteur(c){
9 informe_auteur_en_cours = false;
10 eval('c = '+c); // JSON envoye par informer_auteur.html
11 if (c) {
12 alea_actuel = c.alea_actuel;
13 alea_futur = c.alea_futur;
14 // indiquer le cnx si on n'y a pas touche
15 jQuery('input#session_remember:not(.modifie)')
16 .attr('checked',(c.cnx=='1')?'checked':'');
17 } else {
18 alea_actuel = '';
19 }
20 if (c.logo)
21 jQuery('#spip_logo_auteur').html(c.logo);
22 else
23 jQuery('#spip_logo_auteur').html('');
24 affiche_login_secure();
25 }
26
27 function calcule_hash_pass(pass){
28 if ((alea_actuel || alea_futur)
29 && !pass.match(/^\{([0-9a-f]{32});([0-9a-f]{32})\}$/i)
30 && !pass.match(/^\{([0-9a-f]{64});([0-9a-f]{64});([0-9a-f]{32});([0-9a-f]{32})\}$/i)
31 && sha256_self_test() // verifions que le hash sha est operationnel
32 ) {
33 var hash = "";
34 hash = hex_sha256(alea_actuel + pass);
35
36 hash = hash+';'+hex_sha256(alea_futur + pass);
37 // envoyer aussi le md5 si demande (compatibilite)
38 if (window.calcMD5){
39 hash = hash+';'+calcMD5(alea_actuel + pass);
40 hash = hash+';'+calcMD5(alea_futur + pass);
41 }
42
43 jQuery('input[name=password]').attr('value','{'+hash+'}');
44 }
45 }
46
47 function actualise_auteur(){
48 if (login != jQuery('#var_login').attr('value')) {
49 informe_auteur_en_cours = true;
50 login = jQuery('#var_login').attr('value');
51 var currentTime = new Date();// on passe la date en var pour empecher la mise en cache de cette requete (bug avec FF3 & IE7)
52 jQuery.get(page_auteur, {var_login:login,var_compteur:currentTime.getTime()},informe_auteur);
53 }
54 }
55
56 function login_submit(){
57 actualise_auteur();
58 var inputpass = jQuery('input[name=password]');
59 pass = inputpass.attr('value');
60 // ne pas laisser le pass d'un auteur "auth=spip" circuler en clair
61 if (pass) {
62 // si l'information est en cours, retenter sa chance
63 // pas plus de 5 fois (si profondeur_url fausse, la requete d'information echoue et ne repond jamais)
64 if (informe_auteur_en_cours && (attente_informe<5)) {
65 attente_informe++;
66 jQuery('form#formulaire_login').animeajax().find('p.boutons input').before('.'); // montrer qu'il se passe quelque chose
67 setTimeout(function(){
68 jQuery('form#formulaire_login').submit();
69 }, 1000);
70 return false;
71 }
72
73 // Si on a l'alea, on peut lancer le submit apres avoir hashe le pass
74 if (alea_actuel || alea_futur) {
75 // il ne faut pas injecter le pass hashe directement dans l'input password visible car
76 // - cela est perturbant
77 // - certains navigateurs memorisent le hash au lieu du pass ...
78 // on cree un input hidden a cote, on lui met le name="password"
79 // et on vide le champ visible
80 inputpass.after('<input name="password" type="hidden" value="'+pass+'" />');
81 inputpass.attr('name','nothing').attr('value','');
82 calcule_hash_pass(pass);
83 }
84 // si on arrive pas a avoir une reponse ajax, vider le pass pour forcer un passage en 2 fois
85 else if(informe_auteur_en_cours)
86 jQuery('input[name=password]').attr('value','');
87 // sinon c'est que l'auteur n'existe pas
88 // OU qu'il sera accepte par LDAP ou autre auth avec mot de passe en clair
89 }
90 }