squellete2
[aidenligne_francais_universite.git] / ecrire / action / cookie.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2007 *
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 if (!defined("_ECRIRE_INC_VERSION")) return;
14
15 include_spip('inc/actions');
16 include_spip('inc/cookie');
17
18 // http://doc.spip.org/@auth_http
19 function auth_http($url) {
20
21 if (verifier_php_auth())
22 redirige_par_entete($url);
23 else {
24 ask_php_auth(_T('info_connexion_refusee'),
25 _T('login_login_pass_incorrect'),
26 _T('login_retour_site'),
27 "url=".rawurlencode($url),
28 _T('login_nouvelle_tentative'),
29 (ereg(_DIR_RESTREINT_ABS, $url)));
30 exit;
31 }
32 }
33
34
35 // http://doc.spip.org/@action_cookie_dist
36 function action_cookie_dist()
37 {
38 global
39 $auteur_session,
40 $change_session,
41 $cookie_admin,
42 $cookie_session,
43 $essai_auth_http,
44 $essai_login,
45 $ignore_auth_http,
46 $retour,
47 $session_login,
48 $session_login_hidden,
49 $session_password,
50 $session_password_md5,
51 $session_remember,
52 $spip_admin,
53 $test_echec_cookie,
54 $url,
55 $hash,
56 $var_lang,
57 $var_lang_ecrire;
58
59 // rejoue le cookie pour renouveler spip_session
60 if ($change_session == 'oui') {
61 $session = charger_fonction('session', 'inc');
62 $session(true);
63 envoie_image_vide();
64 return;
65 }
66
67 // tentative de connexion en auth_http
68 if ($essai_auth_http AND !$ignore_auth_http) {
69 auth_http(($url ? $url : _DIR_RESTREINT_ABS), $essai_auth_http);
70 return;
71 }
72
73 // en cas de login sur bonjour=oui, on tente de poser un cookie
74 // puis de passer au login qui diagnostiquera l'echec de cookie
75 // le cas echeant.
76 if ($test_echec_cookie == 'oui') {
77 preg_match(',^[^/]*//[^/]*(.*)/$,',
78 url_de_base(),
79 $r);
80 spip_setcookie('spip_session', 'test_echec_cookie',0,$r[1]);
81 redirige_par_entete(generer_url_public('login',
82 "var_echec_cookie=oui&url="
83 . ($url ? rawurlencode($url) : _DIR_RESTREINT_ABS), true));
84 }
85
86 unset ($cookie_session);
87 $redirect = ($url ? $url : _DIR_RESTREINT_ABS);
88 if ($essai_login == "oui") {
89 // Recuperer le login en champ hidden
90 if ($session_login_hidden AND !$session_login)
91 $session_login = $session_login_hidden;
92
93 $row_auteur = array();
94 spip_connect();
95
96 // Essayer l'authentification par MySQL
97 $auth_spip = charger_fonction('auth_spip', 'inc', true);
98 if ($auth_spip) $row_auteur = $auth_spip($session_login, $session_password);
99
100 // Marche pas: essayer l'authentification par LDAP si present
101 if (!$row_auteur AND $GLOBALS['ldap_present']) {
102 $auth_ldap = charger_fonction('auth_ldap', 'inc', true);
103 if ($auth_ldap) $row_auteur = $auth_ldap($session_login, $session_password);
104 }
105
106 // Marche pas, renvoyer le formulaire avec message d'erreur si 2e fois
107 if (!$row_auteur) {
108 if (ereg(_DIR_RESTREINT_ABS, $redirect))
109 $redirect = generer_url_public('login',
110 "var_login=$session_login", true);
111 if ($session_password || $session_password_md5)
112 $redirect = parametre_url($redirect, 'var_erreur', 'pass', '&');
113 $redirect .= '&url=' . rawurlencode($url);
114 spip_log("echec login: $session_login");
115 } else {
116 spip_log("login de $session_login vers $redirect");
117 // Si on se connecte dans l'espace prive,
118 // ajouter "bonjour" (repere a peu pres les cookies desactives)
119 if (ereg(_DIR_RESTREINT_ABS, $redirect)) {
120 $redirect .= ((false !== strpos($redirect, "?")) ? "&" : "?")
121 . 'bonjour=oui';
122 }
123 if ($row_auteur['statut'] == '0minirezo')
124 $cookie_admin = "@".$session_login;
125
126 $session = charger_fonction('session', 'inc');
127 $cookie_session = $session($row_auteur);
128 preg_match(',^[^/]*//[^/]*(.*)/$,',
129 url_de_base(),
130 $r);
131
132 if ($session_remember == 'oui')
133 spip_setcookie('spip_session', $cookie_session, time() + 3600 * 24 * 14,$r[1]);
134 else
135 spip_setcookie('spip_session', $cookie_session, 0, $r[1]);
136
137 $prefs = ($row_auteur['prefs']) ? unserialize($row_auteur['prefs']) : array();
138 $prefs['cnx'] = ($session_remember == 'oui') ? 'perma' : '';
139
140 spip_query("UPDATE spip_auteurs SET prefs = " . _q(serialize($prefs)) . " WHERE id_auteur = " . $row_auteur['id_auteur']);
141 }
142 }
143
144 // cookie d'admin ?
145 if ($cookie_admin == "non") {
146 if (!$retour)
147 $retour = generer_url_public('login',
148 'url='.rawurlencode($url), true);
149
150 spip_setcookie('spip_admin', $spip_admin, time() - 3600 * 24);
151 $redirect = parametre_url($retour,'var_login','','&');
152 $redirect = parametre_url($redirect,'var_erreur','','&');
153 $redirect .= ((false !== strpos($redirect, "?")) ? "&" : "?")
154 . "var_login=-1";
155 }
156 else if ($cookie_admin AND $spip_admin != $cookie_admin) {
157 spip_setcookie('spip_admin', $cookie_admin, time() + 3600 * 24 * 14);
158 }
159
160 // changement de langue espace public
161 if ($var_lang) {
162 include_spip('inc/lang');
163
164 if (changer_langue($var_lang)) {
165 spip_setcookie('spip_lang', $var_lang, time() + 365 * 24 * 3600);
166 $redirect = parametre_url($redirect,'lang',$var_lang,'&');
167 }
168 }
169
170 // changer de langue espace prive avant le login (i.e. pas authentfie)
171 elseif ($var_lang_ecrire) {
172 include_spip('action/converser');
173 action_converser_post();
174 }
175 redirige_par_entete($redirect, true);
176 }
177 ?>