From feb2c851bfe1c0d37be18470cf497979e444f06e Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Tue, 13 May 2008 00:11:20 +0000 Subject: [PATCH] petits ajustements sur le login ; essayer notamment de refuser le js, ou les cookies, ou de taper un login inconnu --- dist/formulaires/login.html | 68 +++++++++++++++++---------------- dist/formulaires/login.php | 57 +++++++++++++-------------- ecrire/inc/identifier_login.php | 2 +- 3 files changed, 63 insertions(+), 64 deletions(-) diff --git a/dist/formulaires/login.html b/dist/formulaires/login.html index e1189f1d1f..799ee4e3e6 100644 --- a/dist/formulaires/login.html +++ b/dist/formulaires/login.html @@ -6,6 +6,12 @@ [<p class="formulaire_message">(#ENV**{_deja_loge})</p>] [<p class="formulaire_message">(#ENV**{message_ok})</p>] [<p class='formulaire_erreur'>(#ENV**{message_erreur})</p>] + + [(#ENV{echec_cookie})<fieldset class='formulaire_erreur'> + <h2><:avis_erreur_cookie:></h2> + <p><:login_cookie_oblige:><br /><:login_cookie_accepte:></p> + </fieldset>] + [(#ENV{editable}) <form id='formulaire_login' method='post' action='#ENV{action}' enctype='multipart/form-data'> [(#REM) declarer les hidden qui declencheront le service du formulaire @@ -22,13 +28,11 @@ <li class="editer_password obligatoire"> <label for="password"><:login_pass2:></label> <input class='password' type='password' name='password' id='password' value="" size='40' /> - <em id='pass_securise'[(#ENV{_alea_actuel}|?{'',' '})style='display:none;']><img src='#EVAL{_DIR_IMG_PACK}securise.gif' width='16' height='16' alt='<:login_securise:>' /></em> [<span class='erreur'>(#ENV**{erreurs}|table_valeur{password})</span>] <span class='details'>[<a href="#URL_PAGE{spip_pass}" target="spip_pass" onclick="javascript:window.open(this.href, 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=330'); return false;"><:login_motpasseoublie:></a>]</span> </li> [(#ENV{rester_connecte}) - <li><input class='checkbox' type="checkbox" name="session_remember" id="session_remember" value="oui" [(#ENV**{cnx}|?{' '})checked="checked"] - class="intact" onchange="this.className='';" /> + <li><input class='checkbox' type="checkbox" name="session_remember" id="session_remember" value="oui" [(#ENV**{cnx}|?{' '})checked="checked"] onchange="jQuery(this).addClass('modifie');" /> <label class='nofx' for="session_remember"><:login_rester_identifie:></label></li> ] </ol> @@ -58,20 +62,19 @@ var alea_futur='#ENV{_alea_futur,''}'; var login='#ENV{var_login,''}'; var informe_auteur_en_cours = false; function informe_auteur(c){ + informe_auteur_en_cours = false; eval('c = '+c); // JSON if (c) { alea_actuel = c.alea_actuel; alea_futur = c.alea_futur; - jQuery('input#session_login_hidden').attr('value',c.login); // indiquer le cnx si on n'y a pas touche - jQuery('input#session_remember.intact') - .attr('checked',c.cnx=='1'?'checked':''); + jQuery('input#session_remember:not(.modifie)') + .attr('checked',(c.cnx=='1')?'checked':''); jQuery('#spip_logo_auteur').html(c.logo); - jQuery('#pass_securise').show(); } else { jQuery('#spip_logo_auteur').html(''); + alea_actuel = ''; } - informe_auteur_en_cours = false; } function calcule_md5_pass(pass){ if (alea_actuel) { @@ -81,41 +84,40 @@ function calcule_md5_pass(pass){ } } function actualise_auteur(){ - if (login!=jQuery('#var_login').attr('value')) { - login = jQuery('#var_login').attr('value'); + if (login != jQuery('#var_login').attr('value')) { informe_auteur_en_cours = true; + login = jQuery('#var_login').attr('value'); $.get('#URL_ACTION{informer_auteur}',{var_login:login},informe_auteur); } } -jQuery('#var_login').change(function(){actualise_auteur();}); +jQuery('#password').after("<em id='pass_securise'><img src='#EVAL{_DIR_IMG_PACK}securise.gif' width='16' height='16' alt='<:login_securise:>' title='<:login_securise:>' \/><\/em>"); + +jQuery('#var_login').change(actualise_auteur); + jQuery('form#formulaire_login').submit(function(){ + actualise_auteur(); pass = jQuery('input[@name=password]').attr('value'); // ne jamais laisser le pass circuler en clair if (pass) { - if (alea_actuel) - // on a l'alea, on peut lancer le submit apres avoir hashe le pass - calcule_md5_pass(pass); - else { - // on a pas encore l'alea de l'auteur - // retrouver les alea de l'auteur qui ne sont pas encore arrives (remplissage auto des champs par le navigateur) ! - - // si l'information est en cours, retenter sa chance - if (informe_auteur_en_cours) { - setTimeout(function(){jQuery('form#formulaire_login').submit();},300); - return false; - } - - // sinon lancer une demande - informe_auteur_en_cours = true; - $.get('#URL_ACTION{informer_auteur}',{var_login:jQuery('#var_login').attr('value')},function(c) { - informe_auteur(c); - // le formulaire sera soumis apres reception des info auteur - jQuery('form#formulaire_login').submit(); - }); - // ou dans un delai maxi de 5s (pour eviter le blocage a cette etape) + // si l'information est en cours, retenter sa chance + if (informe_auteur_en_cours) { setTimeout(function(){ jQuery('form#formulaire_login').submit(); - },5000); + }, 1000); + return false; + } + + // Si on a l'alea, on peut lancer le submit apres avoir hashe le pass + if (alea_actuel) { + calcule_md5_pass(pass); + } + // sinon c'est que l'auteur n'existe pas + else { + var alert = jQuery("<div class='formulaire_erreur'>" + + (<:login_identifiant_inconnu|_q:>.replace(/@login@/, login)) + + "<\/div>") + .appendTo(jQuery("#var_login").parent()); + setTimeout(function() {alert.slideUp();}, 3000); return false; } } diff --git a/dist/formulaires/login.php b/dist/formulaires/login.php index d4df85c76f..a201f5f0de 100644 --- a/dist/formulaires/login.php +++ b/dist/formulaires/login.php @@ -38,19 +38,19 @@ function formulaires_login_charger_dist($cible="",$login="",$prive=null){ // Ne pas proposer de "rester connecte quelques jours" // si la duree de l'alea est inferieure a 12 h (valeur par defaut) $rester_connecte = (_RENOUVELLE_ALEA < 12*3600) ? '' : ' '; + $valeurs = array( - #'auth_http' => $auth_http, - 'var_login' => $login, - 'rester_connecte' => $rester_connecte, - '_logo' => isset($auteur['logo'])?$auteur['logo']:'', - 'cnx' => isset($auteur['cnx'])?$auteur['cnx']:'', - '_alea_actuel' => isset($auteur['alea_actuel'])?$auteur['alea_actuel']:'', - '_alea_futur' => isset($auteur['alea_futur'])?$auteur['alea_futur']:'', + #'auth_http' => $auth_http, + 'var_login' => $login, + 'rester_connecte' => $rester_connecte, + '_logo' => isset($auteur['logo'])?$auteur['logo']:'', + 'cnx' => isset($auteur['cnx'])?$auteur['cnx']:'', + '_alea_actuel' => isset($auteur['alea_actuel'])?$auteur['alea_actuel']:'', + '_alea_futur' => isset($auteur['alea_futur'])?$auteur['alea_futur']:'', ); $valeurs['_hidden'] = '<input type="hidden" name="session_password_md5" value="" />' - . '<input type="hidden" name="next_session_password_md5" value="" />' - . '<input type="hidden" name="session_login_hidden" id="session_login_hidden" value="" />'; + . '<input type="hidden" name="next_session_password_md5" value="" />'; // Si on est connecte, envoyer vers la destination // si on en a le droit, et sauf si on y est deja @@ -79,6 +79,14 @@ function formulaires_login_charger_dist($cible="",$login="",$prive=null){ } } + // en cas d'echec de cookie, inc_auth a renvoye vers le script de + // pose de cookie ; s'il n'est pas la, c'est echec cookie + // s'il est la, c'est probablement un bookmark sur bonjour=oui, + // et pas un echec cookie. + if (_request('var_erreur') == 'cookie') + $valeurs['echec_cookie'] = ' '; + + return array($editable,$valeurs); } @@ -93,26 +101,8 @@ function formulaires_login_verifier_dist($cible="",$login="",$prive=null){ $session_password = _request('password'); $session_md5pass = _request('session_password_md5'); $session_md5next = _request('next_session_password_md5'); - - // en cas d'echec de cookie, inc_auth a renvoye vers le script de - // pose de cookie ; s'il n'est pas la, c'est echec cookie - // s'il est la, c'est probablement un bookmark sur bonjour=oui, - // et pas un echec cookie. - /*if (_request('var_echec_cookie')) - $echec_cookie = ($_COOKIE['spip_session'] != 'test_echec_cookie'); - else $echec_cookie = '';*/ - - if ($echec_cookie){ - $erreurs['message_erreur'] = "echec cookie "; - /* - [(#ENV{echec_cookie}) -<fieldset class="reponse_formulaire"> -<legend><:avis_erreur_cookie:></legend> -<p><:login_cookie_oblige:></p> -<p><:login_cookie_accepte:></p> -</fieldset>]*/ - } - + $session_remember = _request('session_remember'); + #$pose_cookie = generer_url_action('cookie',"",false,true); $auth_http = ''; if ($echec_cookie AND !$ignore_auth_http) { @@ -151,7 +141,8 @@ function formulaires_login_verifier_dist($cible="",$login="",$prive=null){ unset($row['lang']); } $identifier_login = charger_fonction('identifier_login','inc'); - if (!$identifier_login($session_login,$session_password,$session_md5pass,$session_md5next)){ + if (!$identifier_login($session_login, $session_password, + $session_md5pass, $session_md5next, $session_remember)){ $erreurs['password'] = _T('login_erreur_pass'); } else { @@ -200,6 +191,12 @@ function formulaires_login_traiter_dist($cible="",$login="",$prive=null){ else $cible = generer_url_ecrire(); }*/ + // Si on est admin, poser le cookie de correspondance + if ($GLOBALS['auteur_session']['statut'] == '0minirezo') { + include_spip('inc/cookie'); + spip_setcookie('spip_admin', '@'.$GLOBALS['auteur_session']['login'], + time() + 7 * 24 * 3600); + } // Si on est connecte, envoyer vers la destination if ($cible diff --git a/ecrire/inc/identifier_login.php b/ecrire/inc/identifier_login.php index 0cf03b4f5d..fcd0e40b74 100644 --- a/ecrire/inc/identifier_login.php +++ b/ecrire/inc/identifier_login.php @@ -97,7 +97,7 @@ function informer_login($login){ } unset($row['source']); $prefs = unserialize($row['prefs']); - $row['cnx'] = $prefs['cnx'] == 'perma' ? '1' : '0'; + $row['cnx'] = ($prefs['cnx'] == 'perma') ? '1' : '0'; unset($row['prefs']); $page = evaluer_fond('formulaires/logo_auteur', array('id_auteur'=>$row['id_auteur'])); -- GitLab