Valider f6db39be rédigé par esj's avatar esj
Parcourir les fichiers

Dépot un peu complexe pour

	1. rendre toujours disponible, pour les visiteurs en mode http_auth, la globale auteur_session et son cookie associé
	2. étendre le script ecrire/prive.php aux visiteurs: ce script devient plus généralement un script permettant d'appliquer un squelette en étant sur que la globale auteur_session est définie

Du coup, un peu de réécriture dans les appels de inc_auth_dist qui calculait souvent une URL compliqué qui n'était utile qu'à son appel dans ecrire/index.php.
En conséquence, migration de ce calcul dans ce fichier, et quelques nettoyages et facilités supplémentaires: le login du Ldap peut etre différent de celui mémorisé par Spip (intéressant pour le charset ou majuscule/minuscules), et la globale $prefs n'est plus utilisée que dans index.php ca clarifie un  peu.
parent 89737019
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -220,7 +220,7 @@ function determine_upload()

	if (!$connect_statut) {
		$auth = charger_fonction('auth', 'inc');
		$auth = $auth();
		if ($auth()) {echo minipres();exit;}
	}
	if ($connect_statut != '0minirezo') return false;
	$repertoire = _DIR_TRANSFERT;
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -306,7 +306,7 @@ function traite_svg($file)
	// Trop expeditif, a ameliorer

	$auth = charger_fonction('auth', 'inc');
	$auth();
	if ($auth()) {echo minipres();exit;}

	if ($connect_statut != '0minirezo') {
		include_spip('inc/texte');
+37 −41
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -78,10 +78,17 @@ function acces_statut($id_auteur, $statut, $bio)
	return $statut;
}

// Fonction d'authentification
// retourne -1 si authentification impossible a cause du serveur SQL 
// retourne une chaine vide si authentification reussie
// retourne une chaine non vide expliquant l'echec sinon:
//	"rien" ==> nouvel arrivant, envoyer le formulaire
//	autre  ==> statut incompatible

// http://doc.spip.org/@inc_auth_dist
function inc_auth_dist() {
	global $auth_can_disconnect, $ignore_auth_http, $ignore_remote_user;
	global $prefs, $connect_id_auteur, $connect_login, $connect_quand;
	global $connect_id_auteur, $connect_login, $connect_quand;
	global $connect_statut, $connect_toutes_rubriques, $connect_id_rubrique;
	//
	// Initialiser variables (eviter hacks par URL)
@@ -110,9 +117,9 @@ function inc_auth_dist() {
		AND isset($_SERVER['PHP_AUTH_PW'])) {
			include_spip('inc/actions');
			if (verifier_php_auth()) {
				$connect_login = $_SERVER['PHP_AUTH_USER'];
				$auth_can_disconnect = true;
				$connect_login = $GLOBALS['auteur_session']['login'];
				$_SERVER['PHP_AUTH_PW'] = '';
				$auth_can_disconnect = true;
			}
		} else if (isset($_SERVER['REMOTE_USER']))

@@ -126,9 +133,9 @@ function inc_auth_dist() {
	  "id_auteur=$connect_id_auteur" :
	  (!$connect_login ? '' : "login=" . _q($connect_login));

	// pas authentifie par cookie ni rien: demander login / mdp
	// pas authentifie par cookie ni http_auth:

	if (!$where) return auth_arefaire();
	if (!$where) return "inconnu";

	// Trouver les autres infos dans la table auteurs.

@@ -136,35 +143,20 @@ function inc_auth_dist() {

	if (!$row = spip_fetch_array($result)) {

		return auth_areconnecter($connect_login);
	}

	// Indiquer la connexion. A la minute pres ca suffit.
	if ((time() - $row['quand']) >= 60) {
		@spip_query("UPDATE spip_auteurs SET en_ligne=NOW() WHERE id_auteur='$connect_id_auteur'");
	  // il n'est PLUS connu. c'est SQL qui est desyncrho
		auth_areconnecter($connect_login);
		return -1;
	}

	$connect_id_auteur = $row['id_auteur'];
	// connu. Mais avec quels droits ?
	$connect_login = $row['login'];
	$connect_quand = $row['quand'];
	$connect_id_auteur = $row['id_auteur'];
	$connect_statut = acces_statut($connect_id_auteur, $row['statut'], $row['bio']);
	$r = auth_rubrique($connect_id_auteur, $connect_statut);

	if (is_string($r)) {
		if ($r != '1comite') return auth_arefaire($r);
	} elseif (is_array($r))
		$connect_id_rubrique = $r;
	else $connect_toutes_rubriques = true;

	$prefs = unserialize($row['prefs']);
	$connect_login = $row['login'];

	// Le tableau global auteur_session contient toutes les infos.
	// Les plus utiles sont aussi dans les variables simples ci-dessus

	$GLOBALS['auteur_session'] = $row;
	$droits = auth_rubrique($connect_id_auteur, $connect_statut);

	// rajouter les sessions meme en mode auth_http
	// pour permettre les connexions multiples
	// pour permettre les connexions multiples et identifier les visiteurs
	if (!$_COOKIE['spip_session']) {
		$session = charger_fonction('session', 'inc');
		if ($spip_session = $session($row)) {
@@ -175,6 +167,23 @@ function inc_auth_dist() {
		}
	}

	// Indiquer la connexion. A la minute pres ca suffit.
	if ((time() - 	$connect_quand)  >= 60) {
		@spip_query("UPDATE spip_auteurs SET en_ligne=NOW() WHERE id_auteur='$connect_id_auteur'");
	}

	// Le tableau global auteur_session contient toutes les infos.
	// Les plus utiles sont aussi dans les variables simples ci-dessus

	$GLOBALS['auteur_session'] = $row;

	if (is_string($droits)) {
	  // ordres mineurs: redac, visiteur ou indefini
		if ($droits != '1comite') return $droits;
	} elseif (is_array($droits))
		$connect_id_rubrique = $droits;
	else $connect_toutes_rubriques = true;

	// vide = pas de message d'erreur (cf exit(0) Unix)
	return "";
}
@@ -195,18 +204,5 @@ function auth_areconnecter($auth_login)
	} else {
		echo minipres(_T('avis_erreur_connexion'), "<br /><br /><p>" . _T('texte_inc_auth_1', array('auth_login' => $auth_login)). " <a href='".  generer_url_action('logout', "logout=prive"). "'>". _T('texte_inc_auth_2'). "</a>"._T('texte_inc_auth_3'));
	}
	return -1;
}

// redemande login, avec nettoyage

// http://doc.spip.org/@auth_arefaire
function auth_arefaire($statut='')
{
	// hack grossier pour changer le message en cas d'echec d'un visiteur(6forum) sur ecrire/
	$var_echec = $statut?'&var_echec_visiteur=true':'&var_echec_cookie=true';
	$url = rawurlencode(str_replace('/./', '/',
			(_DIR_RESTREINT ? "" : _DIR_RESTREINT_ABS) . str_replace('&amp;', '&', self()))); 
	return generer_url_public('login', "url=$url" . (isset($_GET['bonjour']) ? $var_echec : ''),true);
}
?>
+18 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -72,8 +72,6 @@ include_spip('inc/cookie');

$exec = _request('exec');

if (!preg_match(',^[a-z][0-9a-z_]*$,i', $exec)) $exec = "accueil";

//
// Authentification, redefinissable
//
@@ -87,7 +85,17 @@ if (autoriser_sans_cookie($exec)) {
	if ($var_auth!=="") {
		if ($var_auth===-1) exit();
		include_spip('inc/headers');
		redirige_par_entete($var_auth);
		redirige_par_entete(generer_url_public('login',
			"url=" . 
			rawurlencode(str_replace('/./', '/',
				(_DIR_RESTREINT ? "" : _DIR_RESTREINT_ABS)
				. str_replace('&amp;', '&', self())))
		// $var_auth indique si c'est le statut qui est insuffisant
			. ((!isset($_GET['bonjour'])) ? ''
			    : (($var_auth == '6forum') ?
				 '&var_echec_visiteur=true'
			       : '&var_echec_cookie=true')),
						       true));
	}
 }

@@ -95,9 +103,12 @@ if (autoriser_sans_cookie($exec)) {
// Preferences de presentation
//

if (!isset($GLOBALS['prefs']))

if (!isset($GLOBALS['auteur_session']['prefs']))
	$GLOBALS['prefs'] = array('couleur' =>1, 'display'=>0, 
			  'options'=> $var_auth ? 'avancees' : 'basiques');
else $GLOBALS['prefs'] = unserialize($GLOBALS['auteur_session']['prefs']);

$prefs_mod = false;

if (isset($_GET['set_couleur'])) {
@@ -199,6 +210,9 @@ AND $GLOBALS['auteur_session']['statut']=='0minirezo') {
	$exec = $GLOBALS['transformer_xml'];
 }

// si nom pas plausible, prendre le script par defaut
if (!preg_match(',^[a-z_][0-9a-z_]*$,i', $exec)) $exec = "accueil";

// Trouver la fonction eventuellement surchagee

$var_f = charger_fonction($exec);
+19 −25
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -10,35 +10,29 @@
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
\***************************************************************************/

# ou est l'espace prive : on y est deja !
  // Script pour appeler un squelette apres s'etre authentifie

include_once 'inc_version.php';

include_spip('inc/cookie');

//
// Determiner l'action demandee
//

$exec = _request('exec');
if (!preg_match(',^[a-z][0-9a-z_]*$,i', $exec)) $exec = "accueil";

//
// Authentification, redefinissable
//

if (autoriser_sans_cookie($exec)) {
	if (!isset($reinstall)) $reinstall = 'non';
	$var_auth = true;
} else {
$auth = charger_fonction('auth', 'inc');
$auth = $auth();
	if ($auth!=="") {
spip_log("authen: $auth");
if ($auth) {
	if ($auth===-1) exit();
	include_spip('inc/headers');
	if ($auth == '6forum') {
	  $auth = generer_url_public('', $_SERVER['QUERY_STRING'], true);
	  spip_log("6forum pour $auth");
	}	else
	  $auth = generer_url_public('login',
			"url=" . 
			rawurlencode(str_replace('/./', '/',
				(_DIR_RESTREINT ? "" : _DIR_RESTREINT_ABS)
						 . str_replace('&amp;', '&', self()))), true);
	redirige_par_entete($auth);
 }
}


# au travail...
include_once 'public.php';