From a5bcaa7b4a22ba8f564b467d610e92c3b19e09fe Mon Sep 17 00:00:00 2001
From: Matthieu Marcillaud <marcimat@rezo.net>
Date: Wed, 8 Feb 2017 16:33:08 +0000
Subject: [PATCH] =?UTF-8?q?Correction=20diff=C3=A9rente=20pour=20#3386=20(?=
 =?UTF-8?q?Cerdic)=20afin=20de=20regrouper=20les=20choses=20autour=20de=20?=
 =?UTF-8?q?HTTP=5FX=5FFORWARDED=20au=20m=C3=AAme=20endroit.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc/utils.php   | 18 +-----------------
 ecrire/inc_version.php |  8 ++++++++
 2 files changed, 9 insertions(+), 17 deletions(-)

diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index faa42dc2bd..2f22f27220 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -1736,16 +1736,6 @@ function test_valeur_serveur($truc) {
  *     racine de SPIP : par exemple, sur ecrire/ elle vaut 1, sur sedna/ 1, et à
  *     la racine 0. Sur url/perso/ elle vaut 2
  *
- * @note
- *     Le test indiquant une connexion 'https' repose sur plusieurs éléments en fonction
- *     des serveurs / reverse proxy. Dans certains cas il faut compléter en indiquant à SPIP
- *     que le port 80 d'arrivée est aussi utilisé pour https, sinon il ajoutera :80 aux urls calculées.
- *
- *     ```
- *     // Nginx:443 => Apache:80 => SPIP…
- *     define('_PORT_HTTPS_STANDARD', '443,80');
- *     ```
- *
  * @param int|boo|array $profondeur
  *    - si non renseignée : retourne l'url pour la profondeur $GLOBALS['profondeur_url']
  *    - si int : indique que l'on veut l'url pour la profondeur indiquée
@@ -1772,7 +1762,7 @@ function url_de_base($profondeur = null) {
 	}
 
 	$http = 'http';
-	// plusieurs configurations serveurs peuvent indiquer une connexion https
+
 	if (
 		isset($_SERVER["SCRIPT_URI"])
 		and substr($_SERVER["SCRIPT_URI"], 0, 5) == 'https'
@@ -1783,12 +1773,6 @@ function url_de_base($profondeur = null) {
 		and test_valeur_serveur($_SERVER['HTTPS'])
 	) {
 		$http = 'https';
-	} elseif (
-		isset($_SERVER['HTTP_X_FORWARDED_PROTO'])
-		AND $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'
-		AND strncmp($GLOBALS['meta']['adresse_site'], 'https', 5) == 0)
-	{
-		$http = 'https';
 	}
 
 	// note : HTTP_HOST contient le :port si necessaire
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index 88fda3bed4..0a7eae0f50 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -209,6 +209,14 @@ $debut_date_publication = null;
 //
 // Prendre en compte les entetes HTTP_X_FORWARDED_XX
 //
+if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) and $_SERVER['HTTP_X_FORWARDED_PROTO']==='https'){
+	if (empty($_SERVER['HTTP_X_FORWARDED_HOST'])) {
+		$_SERVER['HTTP_X_FORWARDED_HOST'] = $_SERVER['HTTP_HOST'];
+	}
+	if (empty($_SERVER['HTTP_X_FORWARDED_PORT'])) {
+		$_SERVER['HTTP_X_FORWARDED_PORT'] = 443;
+	}
+}
 if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])){
 	if (isset($_SERVER['HTTP_X_FORWARDED_PORT']) and is_numeric($_SERVER['HTTP_X_FORWARDED_PORT'])){
 		$_SERVER['SERVER_PORT'] = $_SERVER['HTTP_X_FORWARDED_PORT'];
-- 
GitLab