1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/spip_ynh.git synced 2024-09-03 20:25:59 +02:00
spip_ynh/sources/ecrire/action/cookie.php
2015-04-28 17:10:23 +02:00

99 lines
3.3 KiB
PHP

<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2014 *
* 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('inc/actions');
include_spip('inc/cookie');
// http://doc.spip.org/@action_cookie_dist
function action_cookie_dist($set_cookie_admin=null, $change_session = null) {
$redirect_echec = $redirect = null;
$test_echec_cookie = null;
$url = "";
if (is_null($set_cookie_admin)){
$set_cookie_admin = _request('cookie_admin');
$change_session = _request('change_session');
$test_echec_cookie = _request('test_echec_cookie');
// La cible de notre operation de connexion
$url = securiser_redirect_action(_request('url'));
$redirect = $url ? $url : generer_url_ecrire('accueil');
$redirect_echec = _request('url_echec');
if (!isset($redirect_echec)) {
if (strpos($redirect,_DIR_RESTREINT_ABS)!==false)
$redirect_echec = generer_url_public('login','',true);
else
$redirect_echec = $redirect;
}
}
// rejoue le cookie pour renouveler spip_session
if ($change_session == 'oui') {
$session = charger_fonction('session', 'inc');
$session(true);
spip_log("statut 204 pour " . $_SERVER['REQUEST_URI']);
http_status(204); // No Content
return;
}
// tentative de connexion en auth_http
if (_request('essai_auth_http') AND !$GLOBALS['ignore_auth_http']) {
include_spip('inc/auth');
if (@$_SERVER['PHP_AUTH_USER']
AND @$_SERVER['PHP_AUTH_PW']
AND $auteur = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])){
auth_loger($auteur);
redirige_par_entete(parametre_url($redirect,'t',time(),'&'));
}
else {
ask_php_auth(_T('info_connexion_refusee'),
_T('login_login_pass_incorrect'),
_T('login_retour_site'),
"url=".rawurlencode($redirect),
_T('login_nouvelle_tentative'),
(strpos($url,_DIR_RESTREINT_ABS)!==false));
}
}
else {
// en cas de login sur bonjour=oui, on tente de poser un cookie
// puis de passer au login qui diagnostiquera l'echec de cookie
// le cas echeant.
if ($test_echec_cookie == 'oui') {
spip_setcookie('spip_session', 'test_echec_cookie');
if ($redirect)
$redirect = parametre_url(parametre_url($redirect_echec,'var_echec_cookie','oui','&'),'url',rawurlencode($redirect),'&');
}
else {
$cook = isset($_COOKIE['spip_admin']) ? $_COOKIE['spip_admin'] : '';
// Suppression cookie d'admin ?
if ($set_cookie_admin == "non") {
if ($cook)
spip_setcookie('spip_admin', $cook, time() - 3600 * 24);
}
// Ajout de cookie d'admin
else if ($set_cookie_admin) {
spip_setcookie('spip_admin', $set_cookie_admin,
time() + 14 * 24 * 3600);
}
}
}
// Redirection finale
if ($redirect)
redirige_par_entete($redirect, true);
}
?>