/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2014 *
+ * Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
-if (!defined('_ECRIRE_INC_VERSION')) return;
-
-include_spip('base/abstract_sql');
-
+/**
+ * Gestion des authentifications
+ *
+ * @package SPIP\Core\Authentification
+ **/
+if (!defined('_ECRIRE_INC_VERSION')) {
+ return;
+}
+include_spip('base/abstract_sql');
/**
- * Fonction d'authentification. Retourne:
- * - URL de connexion si on ne sait rien (pas de cookie, pas Auth_user);
- * - URL de connexion si on ne sait rien (pas de cookie, pas Auth_user);
- * - un tableau si visiteur sans droit (tableau = sa ligne SQL)
- * - code numerique d'erreur SQL
- * - une chaine vide si autorisation a penetrer dans l'espace prive.
+ * Teste l'authentification d'un visiteur
*
- *
- * http://doc.spip.org/@inc_auth_dist
+ * Cette fonction ne fait pas l'authentification en soit ;
+ * elle vérifie simplement qu'une personne est connectée ou non.
*
* @return array|int|string
+ * - URL de connexion si on ne sait rien (pas de cookie, pas Auth_user);
+ * - un tableau si visiteur sans droit (tableau = sa ligne SQL)
+ * - code numerique d'erreur SQL
+ * - une chaîne vide si autorisation à pénétrer dans l'espace privé.
*/
function inc_auth_dist() {
-
- global $connect_login ;
-
$row = auth_mode();
- if ($row) return auth_init_droits($row);
+ if ($row) {
+ return auth_init_droits($row);
+ }
- if (!$connect_login) return auth_a_loger();
+ if (!$GLOBALS['connect_login']) {
+ return auth_a_loger();
+ }
// Cas ou l'auteur a ete identifie mais on n'a pas d'info sur lui
// C'est soit parce que la base est inutilisable,
// Pas la peine d'insister.
// Renvoyer le nom fautif et une URL de remise a zero
- if (spip_connect())
- return array('login' => $connect_login,
- 'site' => generer_url_public('', "action=logout&logout=prive"));
+ if (spip_connect()) {
+ return array(
+ 'login' => $GLOBALS['connect_login'],
+ 'site' => generer_url_public('', 'action=logout&logout=prive')
+ );
+ }
$n = intval(sql_errno());
spip_log("Erreur base de donnees $n " . sql_error());
+
return $n ? $n : 1;
}
* @param $raison
* @return array|string
*/
-function auth_echec($raison)
-{
+function auth_echec($raison) {
include_spip('inc/minipres');
include_spip('inc/headers');
// pas authentifie. Pourquoi ?
$raison = redirige_formulaire($raison);
} elseif (is_int($raison)) {
// erreur SQL a afficher
- $raison = minipres(_T('info_travaux_titre'), _T('titre_probleme_technique'). "<p><tt>".sql_errno()." ".sql_error()."</tt></p>");
+ $raison = minipres(
+ _T('info_travaux_titre'),
+ _T('titre_probleme_technique') . '<p><tt>' . sql_errno() . ' ' . sql_error() . '</tt></p>'
+ );
} elseif (@$raison['statut']) {
// un simple visiteur n'a pas acces a l'espace prive
- spip_log("connexion refusee a " . @$raison['id_auteur']);
- $raison = minipres(_T('avis_erreur_connexion'),_T('avis_erreur_visiteur'));
+ spip_log('connexion refusee a ' . @$raison['id_auteur']);
+ $raison = minipres(_T('avis_erreur_connexion'), _T('avis_erreur_visiteur'));
} else {
// auteur en fin de droits ...
$h = $raison['site'];
- $raison = minipres(_T('avis_erreur_connexion'),
- "<br /><br /><p>"
- . _T('texte_inc_auth_1',
- array('auth_login' => $raison['login']))
- . " <a href='$h'>"
- . _T('texte_inc_auth_2')
- . "</a>"
- . _T('texte_inc_auth_3'));
+ $raison = minipres(
+ _T('avis_erreur_connexion'),
+ '<br /><br /><p>'
+ . _T('texte_inc_auth_1', array('auth_login' => $raison['login']))
+ . " <a href='$h'>"
+ . _T('texte_inc_auth_2')
+ . '</a>'
+ . _T('texte_inc_auth_3')
+ );
}
+
return $raison;
}
*
* @return array|bool|string
*/
-function auth_mode()
-{
- global $auth_can_disconnect, $ignore_auth_http, $ignore_remote_user;
- global $connect_login ;
-
+function auth_mode() {
//
// Initialiser variables (eviter hacks par URL)
//
-
- $connect_login = '';
- $id_auteur = NULL;
- $auth_can_disconnect = false;
+ $GLOBALS['connect_login'] = '';
+ $id_auteur = null;
+ $GLOBALS['auth_can_disconnect'] = false;
//
// Recuperer les donnees d'identification
//
-
+ include_spip('inc/session');
// Session valide en cours ?
if (isset($_COOKIE['spip_session'])) {
$session = charger_fonction('session', 'inc');
if ($id_auteur = $session()
- OR $id_auteur===0 // reprise sur restauration
+ or $id_auteur === 0 // reprise sur restauration
) {
- $auth_can_disconnect = true;
- $connect_login = $GLOBALS['visiteur_session']['login'];
- } else unset($_COOKIE['spip_session']);
+ $GLOBALS['auth_can_disconnect'] = true;
+ $GLOBALS['connect_login'] = session_get('login');
+ } else {
+ unset($_COOKIE['spip_session']);
+ }
}
// Essayer auth http si significatif
// (ignorer les login d'intranet independants de spip)
- if (!$ignore_auth_http) {
+ if (!$GLOBALS['ignore_auth_http']) {
if (
- (isset($_SERVER['PHP_AUTH_USER']) AND isset($_SERVER['PHP_AUTH_PW'])
- AND $r = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']))
- OR
+ (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])
+ and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']))
+ or
// Si auth http differtente de basic, PHP_AUTH_PW
// est indisponible mais tentons quand meme pour
// autocreation via LDAP
(isset($_SERVER['REMOTE_USER'])
- AND $r = lire_php_auth($_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'], ''))
- ) {
- if (!$id_auteur) {
- $_SERVER['PHP_AUTH_PW'] = '';
- $auth_can_disconnect = true;
- $GLOBALS['visiteur_session'] = $r;
- $connect_login = $GLOBALS['visiteur_session']['login'];
- $id_auteur = $r['id_auteur'];
- } else {
- // cas de la session en plus de PHP_AUTH
- /* if ($id_auteur != $r['id_auteur']){
- spip_log("vol de session $id_auteur" . join(', ', $r));
- unset($_COOKIE['spip_session']);
- $id_auteur = '';
- } */
- }
+ and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'], ''))
+ ) {
+ if (!$id_auteur) {
+ $_SERVER['PHP_AUTH_PW'] = '';
+ $GLOBALS['auth_can_disconnect'] = true;
+ $GLOBALS['visiteur_session'] = $r;
+ $GLOBALS['connect_login'] = session_get('login');
+ $id_auteur = $r['id_auteur'];
+ } else {
+ // cas de la session en plus de PHP_AUTH
+ /* if ($id_auteur != $r['id_auteur']){
+ spip_log("vol de session $id_auteur" . join(', ', $r));
+ unset($_COOKIE['spip_session']);
+ $id_auteur = '';
+ } */
+ }
+ } else {
+ // Authentification .htaccess old style, car .htaccess semble
+ // souvent definir *aussi* PHP_AUTH_USER et PHP_AUTH_PW
+ if (isset($_SERVER['REMOTE_USER'])) {
+ $GLOBALS['connect_login'] = $_SERVER['REMOTE_USER'];
+ }
}
- // Authentification .htaccess old style, car .htaccess semble
- // souvent definir *aussi* PHP_AUTH_USER et PHP_AUTH_PW
- else if (isset($_SERVER['REMOTE_USER']))
- $connect_login = $_SERVER['REMOTE_USER'];
}
$where = (is_numeric($id_auteur)
- /*AND $id_auteur>0*/ // reprise lors des restaurations
+ /*AND $id_auteur>0*/ // reprise lors des restaurations
) ?
- "id_auteur=$id_auteur" :
- (!strlen($connect_login) ? '' : "login=" . sql_quote($connect_login,'','text'));
+ "id_auteur=$id_auteur" :
+ (!strlen($GLOBALS['connect_login']) ? '' : 'login=' . sql_quote($GLOBALS['connect_login'], '', 'text'));
- if (!$where) return '';
+ if (!$where) {
+ return '';
+ }
// Trouver les autres infos dans la table auteurs.
// le champ 'quand' est utilise par l'agenda
- return sql_fetsel("*, en_ligne AS quand", "spip_auteurs", "$where AND statut!='5poubelle'");
+ return sql_fetsel('*, en_ligne AS quand', 'spip_auteurs', "$where AND statut!='5poubelle'");
}
/**
- * Init des globales pour tout l'espace prive si visiteur connu
+ * Initialisation des globales pour tout l'espace privé si visiteur connu
+ *
* Le tableau global visiteur_session contient toutes les infos pertinentes et
- * a jour (tandis que $visiteur_session peut avoir des valeurs un peu datees
+ * à jour (tandis que `$visiteur_session` peut avoir des valeurs un peu datées
* s'il est pris dans le fichier de session)
+ *
* Les plus utiles sont aussi dans les variables simples ci-dessus
- * si la globale est vide ce n'est pas un tableau, on la force pour empecher un warning
+ * si la globale est vide ce n'est pas un tableau, on la force pour empêcher un warning.
*
* @param array $row
- * @return array|string
+ * @return array|string|bool
*/
-function auth_init_droits($row)
-{
- global $connect_statut, $connect_toutes_rubriques, $connect_id_rubrique, $connect_login, $connect_id_auteur;
+function auth_init_droits($row) {
- if ($row['statut']=='nouveau'){
+ include_spip('inc/autoriser');
+ if (!autoriser('loger', '', 0, $row)) {
+ return false;
+ }
+
+
+ if ($row['statut'] == 'nouveau') {
include_spip('action/inscrire_auteur');
$row = confirmer_statut_inscription($row);
}
- $connect_id_auteur = $row['id_auteur'];
- $connect_login = $row['login'];
- $connect_statut = $row['statut'];
+ $GLOBALS['connect_id_auteur'] = $row['id_auteur'];
+ $GLOBALS['connect_login'] = $row['login'];
+ $GLOBALS['connect_statut'] = $row['statut'];
$GLOBALS['visiteur_session'] = array_merge((array)$GLOBALS['visiteur_session'], $row);
$r = @unserialize($row['prefs']);
$GLOBALS['visiteur_session']['prefs'] = ($r ? $r : array());
// si prefs pas definies, les definir par defaut
- if (!isset($GLOBALS['visiteur_session']['prefs']['couleur'])){
- $GLOBALS['visiteur_session']['prefs']['couleur'] = 1;
+ if (!isset($GLOBALS['visiteur_session']['prefs']['couleur'])) {
+ $GLOBALS['visiteur_session']['prefs']['couleur'] = 9;
$GLOBALS['visiteur_session']['prefs']['display'] = 2;
- $GLOBALS['visiteur_session']['prefs']["display_navigation"] = "navigation_avec_icones";
- $GLOBALS['visiteur_session']['prefs']["display_outils"] = "oui";
+ $GLOBALS['visiteur_session']['prefs']['display_navigation'] = 'navigation_avec_icones';
+ $GLOBALS['visiteur_session']['prefs']['display_outils'] = 'oui';
}
- $GLOBALS['visiteur_session'] = pipeline('preparer_visiteur_session',array('args'=>array('row'=>$row),'data'=>$GLOBALS['visiteur_session']));
+ $GLOBALS['visiteur_session'] = pipeline(
+ 'preparer_visiteur_session',
+ array('args' => array('row' => $row),
+ 'data' => $GLOBALS['visiteur_session'])
+ );
// Etablir les droits selon le codage attendu
// dans ecrire/index.php ecrire/prive.php
// A noter : le premier appel a autoriser() a le bon gout
// d'initialiser $GLOBALS['visiteur_session']['restreint'],
// qui ne figure pas dans le fichier de session
- include_spip('inc/autoriser');
- if (!autoriser('ecrire'))
+ if (!autoriser('ecrire')) {
return $row;
+ }
// autoriser('ecrire') ne laisse passer que les Admin et les Redac
auth_trace($row);
// Administrateurs
- if (in_array($connect_statut, explode(',', _STATUT_AUTEUR_RUBRIQUE))) {
+ if (in_array($GLOBALS['connect_statut'], explode(',', _STATUT_AUTEUR_RUBRIQUE))) {
if (is_array($GLOBALS['visiteur_session']['restreint'])) {
- $connect_id_rubrique = $GLOBALS['visiteur_session']['restreint'];
+ $GLOBALS['connect_id_rubrique'] = $GLOBALS['visiteur_session']['restreint'];
}
- if ($connect_statut == '0minirezo') {
- $connect_toutes_rubriques = !$connect_id_rubrique;
+ if ($GLOBALS['connect_statut'] == '0minirezo') {
+ $GLOBALS['connect_toutes_rubriques'] = !$GLOBALS['connect_id_rubrique'];
}
}
+
// Pour les redacteurs, inc_version a fait l'initialisation minimale
return ''; // i.e. pas de pb.
*
* @return string
*/
-function auth_a_loger()
-{
- $redirect = generer_url_public('login',
- "url=" . rawurlencode(self('&',true)), '&');
+function auth_a_loger() {
+ $redirect = generer_url_public('login', 'url=' . rawurlencode(self('&', true)), '&');
// un echec au "bonjour" (login initial) quand le statut est
// inconnu signale sans doute un probleme de cookies
- if (isset($_GET['bonjour']))
- $redirect = parametre_url($redirect,
+ if (isset($_GET['bonjour'])) {
+ $redirect = parametre_url(
+ $redirect,
'var_erreur',
(!isset($GLOBALS['visiteur_session']['statut'])
- ? 'cookie'
- : 'statut'
- ),
- '&'
- );
+ ? 'cookie'
+ : 'statut'
+ ),
+ '&'
+ );
+ }
+
return $redirect;
}
/**
- * Tracer en base la date de derniere connexion de l'auteur
- * http://doc.spip.org/@auth_trace
+ * Tracer en base la date de dernière connexion de l'auteur
+ *
+ * @pipeline_appel trig_auth_trace
*
* @param array $row
* @param null|string $date
*/
-function auth_trace($row, $date=null)
-{
+function auth_trace($row, $date = null) {
// Indiquer la connexion. A la minute pres ca suffit.
- if (!is_numeric($connect_quand = $row['quand']))
+ if (!is_numeric($connect_quand = isset($row['quand']) ? $row['quand'] : '')) {
$connect_quand = strtotime($connect_quand);
+ }
- if (is_null($date))
+ if (is_null($date)) {
$date = date('Y-m-d H:i:s');
+ }
- if (abs(strtotime($date) - $connect_quand) >= 60) {
- sql_updateq("spip_auteurs", array("en_ligne" => $date), "id_auteur=" .$row['id_auteur']);
+ if (abs(strtotime($date) - $connect_quand) >= 60) {
+ sql_updateq('spip_auteurs', array('en_ligne' => $date), 'id_auteur=' . intval($row['id_auteur']));
$row['en_ligne'] = $date;
}
- pipeline('trig_auth_trace',array('args'=>array('row'=>$row,'date'=>$date)));
+ pipeline('trig_auth_trace', array('args' => array('row' => $row, 'date' => $date)));
}
*/
/**
- * Fonction aiguillage, privee
+ * Fonction privée d'aiguillage des fonctions d'authentification
+ *
+ * Charge une fonction d'authentification présente dans un répertoire `auth/`.
+ * Ainsi, utiliser `auth_administrer('informer_login', array('spip', ...)` appellera
+ * `auth_spip_informer_login()` de `ecrire/auth/spip.php`.
+ *
+ * @uses charger_fonction()
+ *
* @param string $fonction
+ * Nom de la fonction d'authentification
* @param array $args
+ * Le premier élément du tableau doit être le nom du système d'authentification
+ * choisi, tel que `spip` (par défaut) ou encore `ldap`.
* @param mixed $defaut
* @return mixed
*/
-function auth_administrer($fonction,$args,$defaut=false){
+function auth_administrer($fonction, $args, $defaut = false) {
$auth_methode = array_shift($args);
$auth_methode = $auth_methode ? $auth_methode : 'spip'; // valeur par defaut au cas ou
- if ($auth = charger_fonction($auth_methode,'auth',true)
- AND function_exists($f="auth_{$auth_methode}_$fonction")
- )
- return call_user_func_array($f, $args);
- else
- return $defaut;
+ if ($auth = charger_fonction($auth_methode, 'auth', true)
+ and function_exists($f = "auth_{$auth_methode}_$fonction")
+ ) {
+ $res = call_user_func_array($f, $args);
+ } else {
+ $res = $defaut;
+ }
+ $res = pipeline(
+ 'auth_administrer',
+ array(
+ 'args' => array(
+ 'fonction' => $fonction,
+ 'methode' => $auth_methode,
+ 'args' => $args
+ ),
+ 'data' => $res
+ )
+ );
+ return $res;
}
/**
* @param array $flux
* @return array
*/
-function auth_formulaire_login($flux){
- foreach ($GLOBALS['liste_des_authentifications'] as $methode)
- $flux = auth_administrer('formulaire_login',array($methode,$flux),$flux);
+function auth_formulaire_login($flux) {
+ foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
+ $flux = auth_administrer('formulaire_login', array($methode, $flux), $flux);
+ }
+
return $flux;
}
-
/**
* Retrouver le login interne lie a une info login saisie
* la saisie peut correspondre a un login delegue
* @param string $serveur
* @return string/bool
*/
-function auth_retrouver_login($login, $serveur=''){
+function auth_retrouver_login($login, $serveur = '') {
if (!spip_connect($serveur)) {
include_spip('inc/minipres');
- echo minipres(_T('info_travaux_titre'),
- _T('titre_probleme_technique'));
+ echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique'));
exit;
}
foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
- if ($auteur = auth_administrer('retrouver_login',array($methode, $login, $serveur))) {
+ if ($auteur = auth_administrer('retrouver_login', array($methode, $login, $serveur))) {
return $auteur;
}
}
+
return false;
}
-
/**
* informer sur un login
* Ce dernier transmet le tableau ci-dessous a la fonction JS informer_auteur
* @param string $serveur
* @return array
*/
-function auth_informer_login($login, $serveur=''){
+function auth_informer_login($login, $serveur = '') {
if (!$login
- OR !$login = auth_retrouver_login($login, $serveur)
- OR !$row = sql_fetsel('*','spip_auteurs','login='.sql_quote($login,$serveur,'text'),'','','','',$serveur)
- )
- return array();
+ or !$login_base = auth_retrouver_login($login, $serveur)
+ or !$row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur)
+ ) {
+
+ // generer de fausses infos, mais credibles, pour eviter une attaque
+ // https://core.spip.net/issues/1758 + https://core.spip.net/issues/3691
+ include_spip('inc/securiser_action');
+ $fauxalea1 = md5('fauxalea' . secret_du_site() . $login . floor(date('U') / 86400));
+ $fauxalea2 = md5('fauxalea' . secret_du_site() . $login . ceil(date('U') / 86400));
+
+ $row = array(
+ 'login' => $login,
+ 'cnx' => '0',
+ 'logo' => '',
+ 'alea_actuel' => substr_replace($fauxalea1, '.', 24, 0),
+ 'alea_futur' => substr_replace($fauxalea2, '.', 24, 0)
+ );
+
+ // permettre d'autoriser l'envoi de password non crypte lorsque
+ // l'auteur n'est pas (encore) declare dans SPIP, par exemple pour les cas
+ // de premiere authentification via SPIP a une autre application.
+ if (defined('_AUTORISER_AUTH_FAIBLE') and _AUTORISER_AUTH_FAIBLE) {
+ $row['alea_actuel'] = '';
+ $row['alea_futur'] = '';
+ }
+
+ return $row;
+ }
$prefs = unserialize($row['prefs']);
$infos = array(
- 'id_auteur'=>$row['id_auteur'],
- 'login'=>$row['login'],
+ 'id_auteur' => $row['id_auteur'],
+ 'login' => $row['login'],
'cnx' => ($prefs['cnx'] == 'perma') ? '1' : '0',
'logo' => recuperer_fond('formulaires/inc-logo_auteur', $row),
);
// desactiver le hash md5 si pas auteur spip ?
- if ($row['source']!=='spip'){
- $row['alea_actuel']= '';
- $row['alea_futur']= '';
+ if ($row['source'] !== 'spip') {
+ $row['alea_actuel'] = '';
+ $row['alea_futur'] = '';
}
verifier_visiteur();
- return auth_administrer('informer_login',array($row['source'],$infos, $row, $serveur),$infos);
+ return auth_administrer('informer_login', array($row['source'], $infos, $row, $serveur), $infos);
}
* @param string $serveur
* @return mixed
*/
-function auth_identifier_login($login, $password, $serveur=''){
- $erreur = "";
+function auth_identifier_login($login, $password, $serveur = '') {
+ $erreur = '';
foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
- if ($auth = charger_fonction($methode, 'auth',true)){
+ if ($auth = charger_fonction($methode, 'auth', true)) {
$auteur = $auth($login, $password, $serveur);
- if (is_array($auteur) AND count($auteur)) {
+ if (is_array($auteur) and count($auteur)) {
spip_log("connexion de $login par methode $methode");
$auteur['auth'] = $methode;
return $auteur;
- }
- elseif (is_string($auteur))
+ } elseif (is_string($auteur)) {
$erreur .= "$auteur ";
+ }
}
}
+
return $erreur;
}
* @param string $serveur
* @return string
*/
-function auth_url_retour_login($auth_methode, $login, $redirect='', $serveur=''){
- $securiser_action = charger_fonction('securiser_action','inc');
+function auth_url_retour_login($auth_methode, $login, $redirect = '', $serveur = '') {
+ $securiser_action = charger_fonction('securiser_action', 'inc');
return $securiser_action('auth', "$auth_methode/$login", $redirect, true);
}
-function auth_terminer_identifier_login($auth_methode, $login, $serveur=''){
+/**
+ * Terminer l'action d'authentification d'un auteur
+ *
+ * @uses auth_administrer()
+ *
+ * @param string $auth_methode
+ * @param string $login
+ * @param string $serveur
+ * @return mixed
+ */
+function auth_terminer_identifier_login($auth_methode, $login, $serveur = '') {
$args = func_get_args();
- $auteur = auth_administrer('terminer_identifier_login',$args);
+ $auteur = auth_administrer('terminer_identifier_login', $args);
return $auteur;
}
* @param array $auteur
* @return bool
*/
-function auth_loger($auteur){
- if (!is_array($auteur) OR !count($auteur))
+function auth_loger($auteur) {
+ if (!is_array($auteur) or !count($auteur)) {
return false;
+ }
// initialiser et poser le cookie de session
unset($_COOKIE['spip_session']);
- auth_init_droits($auteur);
+ if (auth_init_droits($auteur) === false) {
+ return false;
+ }
// initialiser les prefs
$p = $GLOBALS['visiteur_session']['prefs'];
- $p['cnx'] = ($auteur['cookie'] == 'oui') ? 'perma' : '';
+ $p['cnx'] = (isset($auteur['cookie']) and $auteur['cookie'] == 'oui') ? 'perma' : '';
- sql_updateq('spip_auteurs',
- array('prefs' => serialize($p)),
- "id_auteur=" . $auteur['id_auteur']);
-
- // Si on est admin, poser le cookie de correspondance
- include_spip('inc/cookie');
- if ($auteur['statut'] == '0minirezo') {
- spip_setcookie('spip_admin', '@'.$auteur['login'],
- time() + 7 * 24 * 3600);
- }
- // sinon le supprimer ...
- else {
- spip_setcookie('spip_admin', '',1);
- }
+ sql_updateq(
+ 'spip_auteurs',
+ array('prefs' => serialize($p)),
+ 'id_auteur=' . intval($auteur['id_auteur'])
+ );
// bloquer ici le visiteur qui tente d'abuser de ses droits
verifier_visiteur();
return true;
}
-
-function auth_deloger(){
- $logout = charger_fonction('logout','action');
+/**
+ * Déconnexion de l'auteur
+ *
+ * @uses action_logout_dist()
+ * return void
+ **/
+function auth_deloger() {
+ $logout = charger_fonction('logout', 'action');
$logout();
}
/**
- * Tester la possibilite de modifier le login d'authentification
- * pour la methode donnee
+ * Tester la possibilité de modifier le login d'authentification
+ * pour la méthode donnée
+ *
+ * @uses auth_administrer()
*
* @param string $auth_methode
* @param string $serveur
* @return bool
*/
-function auth_autoriser_modifier_login($auth_methode, $serveur=''){
+function auth_autoriser_modifier_login($auth_methode, $serveur = '') {
$args = func_get_args();
- return auth_administrer('autoriser_modifier_login',$args);
+ return auth_administrer('autoriser_modifier_login', $args);
}
/**
* @return string
* message d'erreur ou chaine vide si pas d'erreur
*/
-function auth_verifier_login($auth_methode, $new_login, $id_auteur=0, $serveur=''){
+function auth_verifier_login($auth_methode, $new_login, $id_auteur = 0, $serveur = '') {
$args = func_get_args();
- return auth_administrer('verifier_login',$args,'');
+ return auth_administrer('verifier_login', $args, '');
}
/**
* @param string $serveur
* @return bool
*/
-function auth_modifier_login($auth_methode, $new_login, $id_auteur, $serveur=''){
+function auth_modifier_login($auth_methode, $new_login, $id_auteur, $serveur = '') {
$args = func_get_args();
- return auth_administrer('modifier_login',$args);
+ return auth_administrer('modifier_login', $args);
}
/**
- * Tester la possibilite de modifier le pass
- * pour la methode donnee
+ * Tester la possibilité de modifier le pass
+ * pour la méthode donnée
+ *
+ * @uses auth_administrer()
*
* @param string $auth_methode
* @param string $serveur
* @return bool
- * succes ou echec
+ * succès ou échec
*/
-function auth_autoriser_modifier_pass($auth_methode, $serveur=''){
+function auth_autoriser_modifier_pass($auth_methode, $serveur = '') {
$args = func_get_args();
- return auth_administrer('autoriser_modifier_pass',$args);
+ return auth_administrer('autoriser_modifier_pass', $args);
}
/**
* @param int $id_auteur
* @param string $serveur
* @return string
- * message d'erreur ou chaine vide si pas d'erreur
+ * message d'erreur ou chaine vide si pas d'erreur
*/
-function auth_verifier_pass($auth_methode, $login, $new_pass, $id_auteur=0, $serveur=''){
+function auth_verifier_pass($auth_methode, $login, $new_pass, $id_auteur = 0, $serveur = '') {
$args = func_get_args();
- return auth_administrer('verifier_pass',$args,'');
+ return auth_administrer('verifier_pass', $args, '');
}
/**
* @param int $id_auteur
* @param string $serveur
* @return bool
- * succes ou echec
+ * succes ou echec
*/
-function auth_modifier_pass($auth_methode, $login, $new_pass, $id_auteur, $serveur=''){
+function auth_modifier_pass($auth_methode, $login, $new_pass, $id_auteur, $serveur = '') {
$args = func_get_args();
- return auth_administrer('modifier_pass',$args);
+ return auth_administrer('modifier_pass', $args);
}
/**
* Synchroniser un compte sur une base distante pour la methode
- * donnee lorsque des modifications sont faites dans la base auteur
+ * donnée lorsque des modifications sont faites dans la base auteur
*
* @param string|bool $auth_methode
* ici true permet de forcer la synchronisation de tous les acces pour toutes les methodes
* @param string $serveur
* @return void
*/
-function auth_synchroniser_distant($auth_methode=true, $id_auteur=0, $champs=array(), $options = array(), $serveur=''){
+function auth_synchroniser_distant(
+ $auth_methode = true,
+ $id_auteur = 0,
+ $champs = array(),
+ $options = array(),
+ $serveur = ''
+) {
$args = func_get_args();
- if ($auth_methode===true OR (isset($options['all']) AND $options['all']==true)){
+ if ($auth_methode === true or (isset($options['all']) and $options['all'] == true)) {
$options['all'] = true; // ajouter une option all=>true pour chaque auth
$args = array(true, $id_auteur, $champs, $options, $serveur);
foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
array_shift($args);
- array_unshift($args,$methode);
- auth_administrer('synchroniser_distant',$args);
+ array_unshift($args, $methode);
+ auth_administrer('synchroniser_distant', $args);
}
+ } else {
+ auth_administrer('synchroniser_distant', $args);
}
- else
- auth_administrer('synchroniser_distant',$args);
}
/**
+ * Vérifier si l'auteur est bien authentifié
*
* @param string $login
* @param string $pw
* @param string $serveur
- * @return array
+ * @return array|bool
*/
-function lire_php_auth($login, $pw, $serveur=''){
+function lire_php_auth($login, $pw, $serveur = '') {
+ if (
+ !$login
+ or !$login = auth_retrouver_login($login, $serveur)
+ ) {
+ return false;
+ }
- $row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login,$serveur,'text'),'','','','',$serveur);
+ $row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login, $serveur, 'text'), '', '', '', '', $serveur);
if (!$row) {
if (spip_connect_ldap($serveur)
- AND $auth_ldap = charger_fonction('ldap', 'auth', true))
+ and $auth_ldap = charger_fonction('ldap', 'auth', true)
+ ) {
return $auth_ldap($login, $pw, $serveur, true);
+ }
+
return false;
}
// su pas de source definie
// ou auth/xxx introuvable, utiliser 'spip'
if (!$auth_methode = $row['source']
- OR !$auth = charger_fonction($auth_methode, 'auth', true))
+ or !$auth = charger_fonction($auth_methode, 'auth', true)
+ ) {
$auth = charger_fonction('spip', 'auth', true);
+ }
- $auteur='';
- if ($auth)
+ $auteur = '';
+ if ($auth) {
$auteur = $auth($login, $pw, $serveur, true);
+ }
// verifier que ce n'est pas un message d'erreur
- if (is_array($auteur) AND count($auteur))
+ if (is_array($auteur) and count($auteur)) {
return $auteur;
+ }
+
return false;
}
/**
- * entete php_auth (est-encore utilise ?)
+ * entête php_auth (est-encore utilisé ?)
+ *
+ * @uses minipres()
*
* @param string $pb
* @param string $raison
* @param string $re
* @param string $lien
*/
-function ask_php_auth($pb, $raison, $retour='', $url='', $re='', $lien='') {
- @Header("WWW-Authenticate: Basic realm=\"espace prive\"");
- @Header("HTTP/1.0 401 Unauthorized");
- $corps = "";
+function ask_php_auth($pb, $raison, $retour = '', $url = '', $re = '', $lien = '') {
+ @Header('WWW-Authenticate: Basic realm="espace prive"');
+ @Header('HTTP/1.0 401 Unauthorized');
+ $corps = '';
$public = generer_url_public();
$ecrire = generer_url_ecrire();
- $retour = $retour?$retour:_T('icone_retour');
+ $retour = $retour ? $retour : _T('icone_retour');
$corps .= "<p>$raison</p>[<a href='$public'>$retour</a>] ";
if ($url) {
- $corps .= "[<a href='" . generer_url_action('cookie',"essai_auth_http=oui&$url") . "'>$re</a>]";
+ $corps .= "[<a href='" . generer_url_action('cookie', "essai_auth_http=oui&$url") . "'>$re</a>]";
}
- if ($lien)
- $corps .= " [<a href='$ecrire'>"._T('login_espace_prive')."</a>]";
+ if ($lien) {
+ $corps .= " [<a href='$ecrire'>" . _T('login_espace_prive') . '</a>]';
+ }
include_spip('inc/minipres');
- echo minipres($pb,$corps);
+ echo minipres($pb, $corps);
exit;
}
-?>