From 187952ce85e73b52c2753f2d54fc2c44807b8f79 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Wed, 14 Aug 2019 17:03:38 +0200
Subject: [PATCH] centraliser les tests identiques c'est plus simple a
 mainteanir

---
 ecrire/inc/meta.php             |  2 +-
 ecrire/inc/securiser_action.php | 18 ++++++++++--------
 ecrire/inc/utils.php            | 16 +++++++++++++---
 ecrire/index.php                | 32 +++++++++++++++++---------------
 4 files changed, 41 insertions(+), 27 deletions(-)

diff --git a/ecrire/inc/meta.php b/ecrire/inc/meta.php
index 55d3a323fd..ee27199260 100644
--- a/ecrire/inc/meta.php
+++ b/ecrire/inc/meta.php
@@ -32,7 +32,7 @@ function inc_meta_dist($table = 'meta') {
 	// en cas d'install ne pas faire confiance au meta_cache eventuel
 	$cache = cache_meta($table);
 
-	if ((_request('exec') !== 'install' or !test_espace_prive())
+	if ((!$exec = _request('exec') or !autoriser_sans_cookie($exec))
 		and $new = jeune_fichier($cache, _META_CACHE_TIME)
 		and lire_fichier_securise($cache, $meta)
 		and $meta = @unserialize($meta)
diff --git a/ecrire/inc/securiser_action.php b/ecrire/inc/securiser_action.php
index 385fcb5c5c..5869ae6c5a 100644
--- a/ecrire/inc/securiser_action.php
+++ b/ecrire/inc/securiser_action.php
@@ -184,14 +184,16 @@ function caracteriser_auteur($id_auteur = null) {
 function _action_auteur($action, $id_auteur, $pass, $alea) {
 	static $sha = array();
 	if (!isset($sha[$id_auteur . $pass . $alea])) {
-		if (!isset($GLOBALS['meta'][$alea]) and _request('exec') !== 'install') {
-			include_spip('inc/acces');
-			charger_aleas();
-			if (empty($GLOBALS['meta'][$alea])) {
-				include_spip('inc/minipres');
-				echo minipres();
-				spip_log("$alea indisponible");
-				exit;
+		if (!isset($GLOBALS['meta'][$alea])) {
+			if (!$exec = _request('exec') or !autoriser_sans_cookie($exec)){
+				include_spip('inc/acces');
+				charger_aleas();
+				if (empty($GLOBALS['meta'][$alea])){
+					include_spip('inc/minipres');
+					echo minipres();
+					spip_log("$alea indisponible");
+					exit;
+				}
 			}
 		}
 		include_spip('auth/sha256.inc');
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 522a9eb8d9..e786a3aaa6 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -1644,14 +1644,24 @@ function find_all_in_path($dir, $pattern, $recurs = false) {
 
 /**
  * Prédicat sur les scripts de ecrire qui n'authentifient pas par cookie
+ * et beneficient d'une exception
+ *
  * @param string $nom
+ * @param bool $strict
  * @return bool
  */
-function autoriser_sans_cookie($nom) {
+function autoriser_sans_cookie($nom, $strict = false) {
 	static $autsanscookie = array('install', 'base_repair');
-	$nom = preg_replace('/.php[3]?$/', '', basename($nom));
 
-	return in_array($nom, $autsanscookie);
+	if (in_array($nom, $autsanscookie)) {
+		if (test_espace_prive()){
+			include_spip('base/connect_sql');
+			if (!$strict or !spip_connect()){
+				return true;
+			}
+		}
+	}
+	return false;
 }
 
 /**
diff --git a/ecrire/index.php b/ecrire/index.php
index a1f4d9d6e4..ddc116c305 100644
--- a/ecrire/index.php
+++ b/ecrire/index.php
@@ -41,7 +41,7 @@ $reinstall = (!is_null(_request('reinstall'))) ? _request('reinstall') : ($exec
 // Les scripts d'insallation n'authentifient pas, forcement,
 // alors il faut blinder les variables d'URL
 //
-if (autoriser_sans_cookie($exec)) {
+if (autoriser_sans_cookie($exec, false)) {
 	if (!isset($reinstall)) {
 		$reinstall = 'non';
 	}
@@ -64,20 +64,22 @@ $forcer_lang = true;
 
 
 if (_request('action') or _request('var_ajax') or _request('formulaire_action')) {
-	// Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires
-	include_spip('public/aiguiller');
-	if (
-		// cas des appels actions ?action=xxx
-		traiter_appels_actions()
-		or
-		// cas des hits ajax sur les inclusions ajax
-		traiter_appels_inclusions_ajax()
-		or
-		// cas des formulaires charger/verifier/traiter
-		traiter_formulaires_dynamiques()
-	) {
-		exit;
-	} // le hit est fini !
+	if (!autoriser_sans_cookie($exec)){
+		// Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires
+		include_spip('public/aiguiller');
+		if (
+			// cas des appels actions ?action=xxx
+			traiter_appels_actions()
+			or
+			// cas des hits ajax sur les inclusions ajax
+			traiter_appels_inclusions_ajax()
+			or
+			// cas des formulaires charger/verifier/traiter
+			traiter_formulaires_dynamiques()
+		){
+			exit;
+		} // le hit est fini !
+	}
 }
 // securiser les redirect du back-office
 if (_request('redirect')) {
-- 
GitLab