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'>&#91;<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>&#93;</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