[SPIP] v3.2.1-->v3.2.2
[lhc/web/www.git] / www / ecrire / action / cookie.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2019 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 /**
14 * Gestion de l'action cookie
15 *
16 * @package SPIP\Core\Inscription
17 */
18
19 if (!defined('_ECRIRE_INC_VERSION')) {
20 return;
21 }
22
23 include_spip('inc/actions');
24 include_spip('inc/cookie');
25
26 /**
27 * Cette fonction traite les cookies posés au moment de l'authentification standard
28 * ou vérifie que l'authentification HTTP est correcte
29 *
30 * @global bool ignore_auth_http
31 * @param string|null $set_cookie_admin
32 * @param string|null $change_session
33 * @return void
34 */
35 function action_cookie_dist($set_cookie_admin = null, $change_session = null) {
36 $redirect_echec = $redirect = null;
37 $test_echec_cookie = null;
38 $url = "";
39 if (is_null($set_cookie_admin)) {
40 $set_cookie_admin = _request('cookie_admin');
41 $change_session = _request('change_session');
42 $test_echec_cookie = _request('test_echec_cookie');
43
44 // La cible de notre operation de connexion
45 $url = securiser_redirect_action(_request('url'));
46 $redirect = $url ? $url : generer_url_ecrire('accueil');
47 $redirect_echec = _request('url_echec');
48 if (!isset($redirect_echec)) {
49 if (strpos($redirect, _DIR_RESTREINT_ABS) !== false) {
50 $redirect_echec = generer_url_public('login', '', true);
51 } else {
52 $redirect_echec = $redirect;
53 }
54 }
55 }
56
57
58 // rejoue le cookie pour renouveler spip_session
59 if ($change_session == 'oui') {
60 $session = charger_fonction('session', 'inc');
61 $session(true);
62 spip_log("statut 204 pour " . $_SERVER['REQUEST_URI']);
63 http_status(204); // No Content
64 return;
65 }
66
67 // tentative de connexion en auth_http
68 if (_request('essai_auth_http') and !$GLOBALS['ignore_auth_http']) {
69 include_spip('inc/auth');
70 if (@$_SERVER['PHP_AUTH_USER']
71 and @$_SERVER['PHP_AUTH_PW']
72 and $auteur = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])
73 ) {
74 auth_loger($auteur);
75 redirige_par_entete(parametre_url($redirect, 't', time(), '&'));
76 } else {
77 ask_php_auth(_T('info_connexion_refusee'),
78 _T('login_login_pass_incorrect'),
79 _T('login_retour_site'),
80 "url=" . rawurlencode($redirect),
81 _T('login_nouvelle_tentative'),
82 (strpos($url, _DIR_RESTREINT_ABS) !== false));
83 }
84 } else {
85
86 // en cas de login sur bonjour=oui, on tente de poser un cookie
87 // puis de passer au login qui diagnostiquera l'echec de cookie
88 // le cas echeant.
89 if ($test_echec_cookie == 'oui') {
90 spip_setcookie('spip_session', 'test_echec_cookie');
91 if ($redirect) {
92 $redirect = parametre_url(parametre_url($redirect_echec, 'var_echec_cookie', 'oui', '&'), 'url',
93 rawurlencode($redirect), '&');
94 }
95 } else {
96
97 $cook = isset($_COOKIE['spip_admin']) ? $_COOKIE['spip_admin'] : '';
98 // Suppression cookie d'admin ?
99 if ($set_cookie_admin == "non") {
100 if ($cook) {
101 spip_setcookie('spip_admin', $cook, time() - 3600 * 24);
102 }
103 } // Ajout de cookie d'admin
104 else {
105 if ($set_cookie_admin and _DUREE_COOKIE_ADMIN) {
106 spip_setcookie('spip_admin', $set_cookie_admin, time() + max(_DUREE_COOKIE_ADMIN, 2 * _RENOUVELLE_ALEA));
107 }
108 }
109 }
110 }
111
112 // Redirection finale
113 if ($redirect) {
114 redirige_par_entete($redirect, true);
115 }
116 }