From 961a7986cfe2df92f1e0cabf068d018477bbcde0 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Sat, 16 Jun 2007 09:24:39 +0000 Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20de=20#961=20:=20il=20est?= =?UTF-8?q?=20maintenant=20possible=20de=20sp=C3=A9cifier=20des=20machines?= =?UTF-8?q?=20ou=20des=20domaines=20pour=20lesquels=20le=20proxy=20ne=20do?= =?UTF-8?q?it=20pas=20etre=20utilis=C3=A9.=20On=20en=20profite=20pour=20al?= =?UTF-8?q?ler=20jusqu'au=20bout=20de=20l'usage=20d'Ajax=20dans=20ce=20cas?= =?UTF-8?q?=20de=20configuraiton,=20mais=20=C3=A7a=20marche=20toujours=20s?= =?UTF-8?q?ans=20Ajax=20(mais=20comment=20on=20n'a=20pu=20supporter=20si?= =?UTF-8?q?=20longtemps=20une=20lenteur=20pareille=20dans=20ce=20cas=3F).?= =?UTF-8?q?=20On=20en=20profite=20aussi=20pour=20revoir=20les=20libell?= =?UTF-8?q?=C3=A9s,=20d'une=20part=20pour=20signaler=20que=20c'est=20n?= =?UTF-8?q?=C3=A9cessaire=20=C3=A0=20l'acc=C3=A8s=20=C3=A0=20la=20document?= =?UTF-8?q?ation=20(on=20aurait=20du=20le=20faire=20depuis=20longtemps)=20?= =?UTF-8?q?et=20pour=20que=20la=20validation=20en=20mode=20Ajax=20soit=20s?= =?UTF-8?q?uivie=20d'une=20diff=C3=A9rence=20graphique=20(sinon,=20on=20av?= =?UTF-8?q?ait=20l'impression=20que=20rien=20ne=20s'=C3=A9tait=20pass?= =?UTF-8?q?=C3=A9).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Attention, il y a un gros Hack pour forcer ces modifications dans les libellés, il faut une intégration propre à terme. --- .gitattributes | 2 + ecrire/action/configurer_relayeur.php | 37 +++++++++++ ecrire/configuration/relayeur.php | 91 +++++++++++++++++++++++---- ecrire/exec/config_fonctions.php | 2 +- ecrire/exec/configurer_relayeur.php | 20 ++++++ ecrire/inc/config.php | 44 +------------ ecrire/inc/distant.php | 19 +++--- 7 files changed, 155 insertions(+), 60 deletions(-) create mode 100644 ecrire/action/configurer_relayeur.php create mode 100644 ecrire/exec/configurer_relayeur.php diff --git a/.gitattributes b/.gitattributes index d85f9c01ed..5c6048b502 100644 --- a/.gitattributes +++ b/.gitattributes @@ -347,6 +347,7 @@ dist/win_width.htc -text ecrire/action/acceder_document.php -text ecrire/action/activer_plugins.php -text ecrire/action/configurer.php -text +ecrire/action/configurer_relayeur.php -text ecrire/action/converser.php -text ecrire/action/copier_local.php -text ecrire/action/dater.php -text @@ -464,6 +465,7 @@ ecrire/exec/config_lang.php -text ecrire/exec/config_multilang.php -text ecrire/exec/configuration.php -text ecrire/exec/configurer.php -text +ecrire/exec/configurer_relayeur.php -text ecrire/exec/controle_forum.php -text ecrire/exec/controle_petition.php -text ecrire/exec/convert_sql_utf8.php -text diff --git a/ecrire/action/configurer_relayeur.php b/ecrire/action/configurer_relayeur.php new file mode 100644 index 0000000000..8aa2c0797c --- /dev/null +++ b/ecrire/action/configurer_relayeur.php @@ -0,0 +1,37 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2007 * + * 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; + +// Mise a jour de l'option de configuration du proxy + +include_spip('configuration/relayeur'); + +function action_configurer_relayeur_dist() { + + $securiser_action = charger_fonction('securiser_action', 'inc'); + $arg = $securiser_action(); + + $http_proxy = _request('http_proxy'); + $http_noproxy = _request('http_noproxy'); + $test_proxy = _request('test_proxy'); + $tester_proxy = _request('tester_proxy'); + + $test = configuration_relayeur_post($http_proxy, $http_noproxy, $test_proxy, $tester_proxy); + + // message a afficher dans l'exec de retour + + $r = rawurldecode(_request('redirect')); + $r = parametre_url($r, 'retour_proxy', $test, "&"); + redirige_par_entete($r); +} +?> diff --git a/ecrire/configuration/relayeur.php b/ecrire/configuration/relayeur.php index 269e5674ff..63bb886113 100644 --- a/ecrire/configuration/relayeur.php +++ b/ecrire/configuration/relayeur.php @@ -13,15 +13,34 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/presentation'); -include_spip('inc/config'); -function configuration_relayeur_dist() +/// A PASSER DANS LES FICHIERS DE LANGUE + +_T('texte_test_proxy'); // force le chargement du fichier de langue +// pour ecraser la valeur ci-dessous ensuite +$GLOBALS[$GLOBALS['idx_lang']]['texte_proxy'] = 'Dans certains cas + (intranet, réseaux protégés...), + les sites distants + (documentation de SPIP, sites syndiqués etc.) + ne sont accessibles qu\'à travers un + <i>proxy HTTP</i>. + Le cas échéant, + indiquez ci-dessous son adresse, sous la forme + @proxy_en_cours@. + En général, vous laisserez cette case vide.'; +// et un nouveau, gaffe au _L implicite +$GLOBALS[$GLOBALS['idx_lang']]['pas_de_proxy_pour'] = 'Au besoin, indiquez les machines ou domaines pour lesquels ce proxy ne doit pas s\'appliquer (par exemple: @exemple@) :'; + +function configuration_relayeur_dist($retour_proxy) { - global $spip_lang_right, $spip_lang_left; + global $spip_lang_left; $res = $submit = ''; - if ($http_proxy = $GLOBALS['meta']["http_proxy"]) { + $http_proxy = $GLOBALS['meta']["http_proxy"]; + $http_noproxy = $GLOBALS['meta']["http_noproxy"]; + + if ($http_proxy) { include_spip('inc/distant'); // Masquer un eventuel password authentifiant $http_proxy=entites_html(no_password_proxy_url($http_proxy)); @@ -33,10 +52,7 @@ function configuration_relayeur_dist() . "<input type='text' name='test_proxy' value='http://www.spip.net/' size='40' class='forml' />" . "</p>"; - // ce retour_proxy provient soit de l'url, si on est en ajax, - // soit des globales si on est en mode sans javascript. Joli :( - if($retour_proxy = _request('retour_proxy') - OR $retour_proxy = $GLOBALS['retour_proxy']) { + if($retour_proxy) { $res .= debut_boite_info(true) . $retour_proxy . fin_boite_info(true); @@ -46,18 +62,71 @@ function configuration_relayeur_dist() } } + $encours = $http_proxy ? $http_proxy : "http://proxy:8080"; + $exemple = $http_noproxy ? $http_noproxy : "127.0.0.1 .mondomaine.net"; $res = "\n<div class='verdana2'>" - . propre(_T('texte_proxy')) + . propre(_T('texte_proxy', array('proxy_en_cours' => "<b><tt><html>$encours</html></tt></b>"))) . "</div>" . "\n<div class='verdana2'>" . "<input type='text' name='http_proxy' size='40' class='forml' value='$http_proxy' />" + . "<br />" + . propre(_T('pas_de_proxy_pour', array('exemple' => "<b><tt><html>$exemple</html></tt></b>"))) + . "<input type='text' name='http_noproxy' size='40' class='forml' value='$http_noproxy' />" . $res . "</div>"; $res = debut_cadre_trait_couleur("base-24.gif", true, "", _T('info_sites_proxy').aide ("confhttpproxy")) - . ajax_action_post('configurer', 'relayeur', 'config_fonctions', '', $res, $submit) + . ajax_action_post('configurer_relayeur', 0, 'config_fonctions', '', $res, $submit) . fin_cadre_trait_couleur(true); - return ajax_action_greffe("configurer-relayeur", '', $res); + return ajax_action_greffe("configurer_relayeur", 0, $res); +} + +function configuration_relayeur_post ($http_proxy, $http_noproxy, $test_proxy, $tester_proxy) +{ + // http_proxy : ne pas prendre en compte la modif si le password est '****' + if (preg_match(',:\*\*\*\*@,', $http_proxy)) + $http_proxy = $GLOBALS['meta']['http_proxy']; + + $retour_proxy = ''; + if ($tester_proxy AND $http_proxy) { + if (!$test_proxy) { + $retour_proxy = _T('info_adresse_non_indiquee'); + } else { + include_spip('inc/texte'); // pour aide, couper, lang + if (strncmp("http://", $http_proxy,7)!=0) + $page = ''; + else { + include_spip('inc/distant'); + $page = recuperer_page($test_proxy, true); + } + if ($page) + $retour_proxy = "<p>"._T('info_proxy_ok')."</p>\n<tt>".couper(entites_html($page),300)."</tt>"; + else + $retour_proxy = _T('info_impossible_lire_page', array('test_proxy' => $test_proxy)) + . " <tt>".no_password_proxy_url($http_proxy)."</tt>." + . aide('confhttpproxy'); + } + } + if ($t = ($http_proxy !== NULL)) { + ecrire_meta('http_proxy', $http_proxy); + } + if ($http_noproxy !== NULL) { + ecrire_meta('http_noproxy', $http_noproxy); + $t = true; + } + if ($t) ecrire_metas(); + return $retour_proxy; +} + +// Ne pas afficher la partie 'password' du proxy +// http://doc.spip.org/@no_password_proxy_url +function no_password_proxy_url($http_proxy) { + if ($p = @parse_url($http_proxy) + AND $p['pass']) { + $p['pass'] = '****'; + $http_proxy = glue_url($p); + } + return $http_proxy; } ?> diff --git a/ecrire/exec/config_fonctions.php b/ecrire/exec/config_fonctions.php index 3710590fa7..b62a695c21 100644 --- a/ecrire/exec/config_fonctions.php +++ b/ecrire/exec/config_fonctions.php @@ -67,7 +67,7 @@ function exec_config_fonctions_dist() $previsualiseur(), // Previsualisation sur le site public - $relayeur(); // Proxy pour lire syndication & doc + $relayeur(_request('retour_proxy')); // Proxy pour syndication & doc // // Choix supplementaires proposees par les plugins // diff --git a/ecrire/exec/configurer_relayeur.php b/ecrire/exec/configurer_relayeur.php new file mode 100644 index 0000000000..0e37e9a147 --- /dev/null +++ b/ecrire/exec/configurer_relayeur.php @@ -0,0 +1,20 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2007 * + * 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; + +function exec_configurer_relayeur_dist() +{ + $relayeur = charger_fonction('relayeur', 'configuration'); + ajax_retour($relayeur(_request('retour_proxy'))); +} +?> diff --git a/ecrire/inc/config.php b/ecrire/inc/config.php index 3461c1addf..7d0e3f0c4f 100644 --- a/ecrire/inc/config.php +++ b/ecrire/inc/config.php @@ -153,10 +153,10 @@ function afficher_choix($nom, $valeur_actuelle, $valeurs, $sep = "<br />") { // http://doc.spip.org/@appliquer_modifs_config function appliquer_modifs_config() { - global $email_webmaster, $descriptif_site, $email_envoi, $post_dates, $tester_proxy, $test_proxy, $http_proxy, $activer_moteur; + global $email_webmaster, $descriptif_site, $email_envoi, $post_dates; global $forums_publics, $forums_publics_appliquer; global $charset, $charset_custom, $langues_auth; - global $retour_proxy, $envoi_now; + global $envoi_now, $activer_moteur; if (_request('adresse_site')) $_POST['adresse_site'] = preg_replace(",/?\s*$,", "", _request('adresse_site')); @@ -183,32 +183,7 @@ function appliquer_modifs_config() { ecrire_meta('accepter_visiteurs', 'oui'); // Test du proxy : $tester_proxy est le bouton "submit" - - // http_proxy : ne pas prendre en compte la modif si le password est '****' - if (preg_match(',:\*\*\*\*@,', $http_proxy)) - $http_proxy = $GLOBALS['meta']['http_proxy']; - - // Un globale qui servira soit en ajax soit en direct pour afficher un - // message de statut du proxy. - // Cf. action/configurer et configuration/relayeur - $retour_proxy = ''; - if ($tester_proxy) { - if (!$test_proxy) { - $retour_proxy = _T('info_adresse_non_indiquee'); - } else { - include_spip('inc/texte'); // pour aide, couper, lang - if (strncmp("http://", $http_proxy,7)!=0) - $page = ''; - else { - include_spip('inc/distant'); - $page = recuperer_page($test_proxy, true); - } - if ($page) - $retour_proxy = "<p>"._T('info_proxy_ok')."</p>\n<tt>".couper(entites_html($page),300)."</tt>"; - else - $retour_proxy = _T('info_impossible_lire_page', array('test_proxy' => $test_proxy))." <tt>".no_password_proxy_url($http_proxy)."</tt>.".aide('confhttpproxy'); - } - } + configuration_relayeur_post(_request('http_proxy'), _request('http_noproxy'), _request('test_proxy'), _request('tester_proxy')); // Activer le moteur : dresser la liste des choses a indexer if ($activer_moteur == 'oui' AND ($activer_moteur != $GLOBALS['meta']["activer_moteur"])) { @@ -256,7 +231,6 @@ function appliquer_modifs_config() { 'activer_syndic', 'visiter_sites', 'moderation_sites', - 'http_proxy', 'forums_publics', 'accepter_inscriptions', @@ -318,18 +292,6 @@ function appliquer_modifs_config() { } } -// Ne pas afficher la partie 'password' du proxy -// http://doc.spip.org/@no_password_proxy_url -function no_password_proxy_url($http_proxy) { - if ($p = @parse_url($http_proxy) - AND $p['pass']) { - $p['pass'] = '****'; - $http_proxy = glue_url($p); - } - return $http_proxy; -} - - // Function glue_url : le pendant de parse_url // http://doc.spip.org/@glue_url function glue_url ($url){ diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php index 3a4b4059a4..e24ce0d5c9 100644 --- a/ecrire/inc/distant.php +++ b/ecrire/inc/distant.php @@ -408,13 +408,6 @@ function recuperer_infos_distantes($source, $max=0) { // http://doc.spip.org/@init_http function init_http($get, $url, $refuse_gz=false, $uri_referer = '') { $via_proxy = ''; $proxy_user = ''; $fopen = false; - $http_proxy = $GLOBALS['meta']["http_proxy"]; - if (strncmp("http://", $http_proxy,7)!=0) - $http_proxy = ''; - else - $via_proxy = " (proxy $http_proxy)"; - - spip_log("http $get $url$via_proxy"); $t = @parse_url($url); $host = $t['host']; @@ -427,6 +420,18 @@ function init_http($get, $url, $refuse_gz=false, $uri_referer = '') { $query = $t['query']; if (!isset($t['path']) || !($path = $t['path'])) $path = "/"; + $http_proxy = $GLOBALS['meta']["http_proxy"]; + $http_noproxy = $GLOBALS['meta']["http_noproxy"]; + + if (strncmp("http://", $http_proxy,7)!=0 + OR (strpos(" $http_noproxy ", " $host ") !== false) + OR (strpos(" $http_noproxy ", ' ' . substr($host,(strpos($host,'.')) . ' ')) !== false)) + $http_proxy = ''; + else + $via_proxy = " (proxy $http_proxy)"; + + spip_log("http $get $url$via_proxy"); + if ($http_proxy) { $t2 = @parse_url($http_proxy); $proxy_host = $t2['host']; -- GitLab