Dépôt officiel du core SPIP
Les plugins-dist faisant partie de la distribution SPIP sont présents dans https://git.spip.net/spip/[nom du plugin dist]
https://www.spip.net
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
4.4 KiB
150 lines
4.4 KiB
<?php |
|
|
|
/***************************************************************************\ |
|
* SPIP, Système de publication pour l'internet * |
|
* * |
|
* Copyright © avec tendresse depuis 2001 * |
|
* Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James * |
|
* * |
|
* Ce programme est un logiciel libre distribué sous licence GNU/GPL. * |
|
* Pour plus de détails voir le fichier COPYING.txt ou l'aide en ligne. * |
|
\***************************************************************************/ |
|
|
|
if (!defined('_ECRIRE_INC_VERSION')) { |
|
return; |
|
} |
|
include_spip('inc/presentation'); |
|
include_spip('inc/config'); |
|
|
|
function formulaires_configurer_relayeur_charger_dist() { |
|
$valeurs = [ |
|
'http_proxy' => no_password_proxy_url(lire_config('http_proxy', '')), |
|
'http_noproxy' => lire_config('http_noproxy', ''), |
|
'test_proxy' => 'https://www.spip.net/', |
|
]; |
|
|
|
return $valeurs; |
|
} |
|
|
|
function formulaires_configurer_relayeur_verifier_dist() { |
|
$erreurs = []; |
|
$http_proxy = relayeur_saisie_ou_config(_request('http_proxy'), lire_config('http_proxy', '')); |
|
$http_noproxy = _request('http_noproxy'); |
|
|
|
if ($http_proxy and !tester_url_absolue($http_proxy)) { |
|
$erreurs['http_proxy'] = _T('info_url_proxy_pas_conforme'); |
|
} |
|
|
|
if (!isset($erreurs['http_proxy']) and _request('tester_proxy')) { |
|
if (!$http_proxy) { |
|
$erreurs['http_proxy'] = _T('info_obligatoire'); |
|
} else { |
|
include_spip('inc/distant'); |
|
$test_proxy = _request('test_proxy'); |
|
$t = parse_url($test_proxy); |
|
if (!@$t['host']) { |
|
$erreurs['test_proxy'] = _T('info_adresse_non_indiquee'); |
|
} else { |
|
include_spip('inc/texte'); // pour aide, couper, lang |
|
$info = ''; |
|
if (!need_proxy($t['host'], $http_proxy, $http_noproxy)) { |
|
$info = '<strong>' . _T('page_pas_proxy') . '</strong><br />'; |
|
} |
|
|
|
// il faut fausser le proxy actuel pour faire le test ! |
|
$cur_http_proxy = $GLOBALS['meta']['http_proxy']; |
|
$cur_http_noproxy = $GLOBALS['meta']['http_noproxy']; |
|
$GLOBALS['meta']['http_proxy'] = $http_proxy; |
|
$GLOBALS['meta']['http_noproxy'] = $http_noproxy; |
|
$page = recuperer_url($test_proxy, ['transcoder' => true]); |
|
$page = $page['page'] ?? ''; |
|
$GLOBALS['meta']['http_proxy'] = $cur_http_proxy; |
|
$GLOBALS['meta']['http_noproxy'] = $cur_http_noproxy; |
|
if ($page) { |
|
$erreurs['message_ok'] = _T('info_proxy_ok') . "<br />$info\n<tt>" . couper(entites_html($page), 300) . '</tt>'; |
|
$erreurs['message_erreur'] = ''; |
|
} else { |
|
$erreurs['message_erreur'] = $info . _T( |
|
'info_impossible_lire_page', |
|
['test_proxy' => "<tt>$test_proxy</tt>"] |
|
) |
|
. ' <b><tt>' . no_password_proxy_url($http_proxy) . '</tt></b>.' |
|
. aider('confhttpproxy'); |
|
} |
|
} |
|
} |
|
} |
|
|
|
return $erreurs; |
|
} |
|
|
|
function formulaires_configurer_relayeur_traiter_dist() { |
|
$res = ['editable' => true]; |
|
|
|
$http_proxy = relayeur_saisie_ou_config(_request('http_proxy'), lire_config('http_proxy', '')); |
|
$http_noproxy = _request('http_noproxy'); |
|
if ($http_proxy !== null) { |
|
ecrire_meta('http_proxy', $http_proxy); |
|
} |
|
|
|
if ($http_noproxy !== null) { |
|
ecrire_meta('http_noproxy', $http_noproxy); |
|
} |
|
|
|
$res['message_ok'] = _T('config_info_enregistree'); |
|
|
|
return $res; |
|
} |
|
|
|
function relayeur_saisie_ou_config($http_proxy, $default) { |
|
// http_proxy : ne pas prendre en compte la modif si le password est '****' |
|
if (preg_match(',:\*\*\*\*@,', $http_proxy)) { |
|
$http_proxy = $default; |
|
} |
|
|
|
return $http_proxy; |
|
} |
|
|
|
// Function glue_url : le pendant de parse_url |
|
function glue_url($url) { |
|
if (!is_array($url)) { |
|
return false; |
|
} |
|
// scheme |
|
$uri = (!empty($url['scheme'])) ? $url['scheme'] . '://' : ''; |
|
// user & pass |
|
if (!empty($url['user'])) { |
|
$uri .= $url['user'] . ':' . $url['pass'] . '@'; |
|
} |
|
// host |
|
$uri .= $url['host']; |
|
// port |
|
$port = (!empty($url['port'])) ? ':' . $url['port'] : ''; |
|
$uri .= $port; |
|
// path |
|
$uri .= $url['path']; |
|
// fragment or query |
|
if (isset($url['fragment'])) { |
|
$uri .= '#' . $url['fragment']; |
|
} elseif (isset($url['query'])) { |
|
$uri .= '?' . $url['query']; |
|
} |
|
|
|
return $uri; |
|
} |
|
|
|
|
|
// Ne pas afficher la partie 'password' du proxy |
|
function no_password_proxy_url($http_proxy) { |
|
if ( |
|
$http_proxy |
|
and $p = @parse_url($http_proxy) |
|
and isset($p['pass']) |
|
and $p['pass'] |
|
) { |
|
$p['pass'] = '****'; |
|
$http_proxy = glue_url($p); |
|
} |
|
|
|
return $http_proxy; |
|
}
|
|
|