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