X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fprive%2Fformulaires%2Flogin.php;fp=www%2Fprive%2Fformulaires%2Flogin.php;h=89ccd48067b28243dc611661dc761fc1872c4982;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/prive/formulaires/login.php b/www/prive/formulaires/login.php new file mode 100644 index 0000000..89ccd48 --- /dev/null +++ b/www/prive/formulaires/login.php @@ -0,0 +1,227 @@ + $login, + 'editable' => !$row, + 'cnx' => $row['cnx'], + 'auth_http' => login_auth_http(), + 'rester_connecte' => ((_RENOUVELLE_ALEA < 12*3600)? '' : ' '), + '_logo' => $row['logo'], + '_alea_actuel' => isset($row['alea_actuel'])?$row['alea_actuel']:'', + '_alea_futur' => isset($row['alea_futur'])?$row['alea_futur']:'', + '_pipeline' => 'affiche_formulaire_login', // faire passer le formulaire dans un pipe dedie pour les methodes auth + ); + + if ($erreur OR !$GLOBALS['visiteur_session']['id_auteur']) + $valeurs['editable'] = true; + + if (is_null($prive) ? is_url_prive($cible) : $prive) { + include_spip('inc/autoriser'); + $loge = autoriser('ecrire'); + } + else + $loge = ($GLOBALS['visiteur_session']['auth'] != ''); + + // Si on est connecte, appeler traiter() + // et lancer la redirection si besoin + if (!$valeurs['editable'] AND $loge) { + $traiter = charger_fonction('traiter','formulaires/login'); + $res = $traiter($cible, $login, $prive); + $valeurs = array_merge($valeurs,$res); + + if ($res['redirect']){ + include_spip('inc/headers'); + # preparer un lien pour quand redirige_formulaire ne fonctionne pas + $valeurs['_deja_loge'] = inserer_attribut( + "" . _T('login_par_ici') . "$m", + 'href', $res['redirect'] + ); + $m = redirige_formulaire($res['redirect']); + } + } + // 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 ($erreur == 'cookie') $valeurs['echec_cookie'] = ' '; + elseif ($erreur){ + // une erreur d'un SSO indique dans la redirection vers ici + // mais il faut se proteger de toute tentative d'injection malveilante + include_spip('inc/texte'); + $valeurs['message_erreur'] = safehtml($erreur); + } + + return $valeurs; +} + + +// Gerer le cas ou un utilisateur ne souhaite pas de cookie +// on propose alors un formulaire pour s'authentifier via http + +function login_auth_http() +{ + if (!$GLOBALS['ignore_auth_http'] + AND _request('var_erreur')=='cookie' + AND $_COOKIE['spip_session'] != 'test_echec_cookie' + AND (($GLOBALS['flag_sapi_name'] AND preg_match(",apache,i", @php_sapi_name())) + OR preg_match(",^Apache.* PHP,", $_SERVER['SERVER_SOFTWARE'])) + // Attention dans le cas 'intranet' la proposition de se loger + // par auth_http peut conduire a l'echec. + AND !(isset($_SERVER['PHP_AUTH_USER']) AND isset($_SERVER['PHP_AUTH_PW']))) + + return generer_url_action('cookie',"",false,true); + else return ''; +} + +function formulaires_login_verifier_dist($cible="",$login="",$prive=null){ + + $session_login = _request('var_login'); + $session_password = _request('password'); + $session_remember = _request('session_remember'); + + if (!$session_login) { + # pas de login saisi ! + return array('var_login' => _T('info_obligatoire')); + } + + // appeler auth_identifier_login qui va : + // - renvoyer un string si echec (message d'erreur) + // - un array decrivant l'auteur identifie si possible + // - rediriger vers un SSO qui renverra in fine sur action/auth qui finira l'authentification + include_spip('inc/auth'); + $auteur = auth_identifier_login($session_login, $session_password); + // on arrive ici si on ne s'est pas identifie avec un SSO + if (!is_array($auteur)) { + $erreurs = array(); + if (is_string($auteur)) + $erreurs['var_login'] = $auteur; + include_spip('inc/cookie'); + spip_setcookie("spip_admin", "", time() - 3600); + if (strlen($session_password)) + $erreurs['password'] = _T('login_erreur_pass'); + // sinon c'est un login en deux passe old style (ou js en panne) + // pas de message d'erreur + else + $erreurs['password'] = ' '; + return + $erreurs; + } + // on a ete authentifie, construire la session + // en gerant la duree demandee pour son cookie + if ($session_remember !== NULL) + $auteur['cookie'] = $session_remember; + auth_loger($auteur); + + return (is_null($prive) ? is_url_prive($cible) : $prive) + ? login_autoriser() : array(); +} + +function login_autoriser() +{ + include_spip('inc/autoriser'); + if (!autoriser('ecrire')){ + $h = generer_url_action('logout','logout=prive&url='.urlencode(self())); + return array('message_erreur' => "

" + ._T('avis_erreur_visiteur') + ."

" + ._T('texte_erreur_visiteur') + ."

[" + ._T('icone_deconnecter')."]

"); + } + return array(); +} + +function formulaires_login_traiter_dist($cible="",$login="",$prive=null){ + $res = array(); + // Si on se connecte dans l'espace prive, + // ajouter "bonjour" (repere a peu pres les cookies desactives) + if (is_null($prive) ? is_url_prive($cible) : $prive) { + $cible = parametre_url($cible, 'bonjour', 'oui', '&'); + } + if ($cible=='@page_auteur') + $cible = generer_url_entite($GLOBALS['auteur_session']['id_auteur'],'auteur'); + + if ($cible) { + $cible = parametre_url($cible, 'var_login', '', '&'); + + // transformer la cible absolue en cible relative + // pour pas echouer quand la meta adresse_site est foireuse + if (strncmp($cible,$u = url_de_base(),strlen($u))==0){ + $cible = "./".substr($cible,strlen($u)); + } + + // si c'est une url absolue, refuser la redirection + // sauf si cette securite est levee volontairement par le webmestre + elseif (tester_url_absolue($cible) AND !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) { + $cible = ""; + } + } + + + // 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 AND ($cible!=self())) { + if (!headers_sent() AND !$_GET['var_mode']) { + include_spip('inc/headers'); + $res['redirect'] = $cible; + } else { + $res['message_ok'] .= inserer_attribut( + "" . _T('login_par_ici') . "", + 'href', $cible + ); + } + } + return $res; +} + +?>