From e9b793ca7906d37699243f05520a971718b8262c Mon Sep 17 00:00:00 2001
From: vince
Date: Sat, 4 Dec 2021 16:49:14 +0100
Subject: [PATCH] ajoute le form de config avec auth
---
index.php | 340 ++++++++++++++++++++++++++++++++++++++++----------------------
1 file changed, 222 insertions(+), 118 deletions(-)
diff --git a/index.php b/index.php
index 147ba6f..4b72012 100644
--- a/index.php
+++ b/index.php
@@ -8,102 +8,168 @@ define('DATA_FILE', __DIR__ . DIRECTORY_SEPARATOR . 'data.php');
if (file_exists(CONFIG_FILE)) require_once CONFIG_FILE;
if (!isset($config)) $config = [];
+$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : null;
+
+$hasSupplier = isset($_REQUEST['supplier']) and !empty($_REQUEST['supplier']);
$supplier = $_REQUEST['supplier'];
-if (!isset($config[$supplier]))
- $config[$supplier] = [];
+if ($hasSupplier) {
+
+ if (!isset($config[$supplier]))
+ $config[$supplier] = [];
-$config[$supplier] = array_merge(
- [
- 'title' => '%supplier% %event%',
- 'description' => '',
- 'choices' => [],
- 'start' => 'now 00:00:00',
- 'end' => '+1 year',
- 'frequency' => '1 day',
+ $config[$supplier] = array_merge(
+ [
+ 'title' => '%supplier% %event%',
+ 'description' => '',
+ 'choices' => [],
+ 'start' => 'now 00:00:00',
+ 'frequency' => '1 day',
+ 'password' => '',
- ],
- $config[$supplier]
-);
+ ],
+ $config[$supplier]
+ );
-$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : null;
+ $hasPassword = !empty($config[$supplier]['password']);
-$hasEvent = isset($_REQUEST['event']);
-if (!$hasEvent) {
- $now = new \DateTime('now');
- $current = new \DateTime($config[$supplier]['start']);
- $frequency = \DateInterval::createFromDateString($config[$supplier]['frequency']);
- $maxIterations = 1000;
- while (
- ($current->getTimestamp() < $now->getTimestamp())
- and ($maxIterations-- > 0)
- ) $current->add($frequency);
- $nextEvent = $current->format('Y-m-d');
- header(sprintf('Location: %s?supplier=%s&event=%s', $requestUrl, $supplier, $nextEvent));
- die();
-}
+ if ($action === 'config') {
+ if ($hasPassword) {
+ if (!isset($_SERVER['PHP_AUTH_USER'])) {
+ header(sprintf('WWW-Authenticate: Basic realm="mon-panier-bio config %s"', $supplier));
+ header('HTTP/1.0 401 Unauthorized');
+ printf('Cette config est protégée par mot de passe !');
+ exit;
+ } elseif (
+ ($_SERVER['PHP_AUTH_USER'] !== $supplier)
+ or ($_SERVER['PHP_AUTH_PW'] !== $config[$supplier]['password'])
+ ) {
+ header('HTTP/1.0 403 Forbidden');
+ printf('Cette config est protégée par mot de passe !');
+ exit;
+ }
+ }
-$event = $_REQUEST['event'];
-
-switch ($action) {
-case 'insert' :
-case 'delete' :
- $isBeginning = (!file_exists(DATA_FILE) or in_array(filesize(DATA_FILE), [ false, 0 ]));
- $output = fopen(DATA_FILE, 'a+');
- if (!$output) break;
- if (!flock($output, LOCK_EX)) break;
- if ($isBeginning)
- fwrite($output, ' $prevItem)
- if ($prevItem['hash'] === $item['hash'])
- unset($items[$index]);
+ $config[$supplier]['choices'] = array_map('trim', $config[$supplier]['choices']);
+}
+
+$isConfig = false;
+if ($action === 'config') {
+ $output = fopen(CONFIG_FILE, 'w+');
+ if ($output) {
+ if (flock($output, LOCK_EX)) {
+ fwrite($output, 'getTimestamp() < $now->getTimestamp())
+ and ($maxIterations-- > 0)
+ ) $current->add($frequency);
+ $nextEvent = $current->format('Y-m-d');
+ header(sprintf('Location: %s?supplier=%s&event=%s', $requestUrl, $supplier, $nextEvent));
+ die();
+ }
+
+ $event = $_REQUEST['event'];
+
+ switch ($action) {
+ case 'insert' :
+ case 'delete' :
+ $isBeginning = (!file_exists(DATA_FILE) or in_array(filesize(DATA_FILE), [ false, 0 ]));
+ $output = fopen(DATA_FILE, 'a+');
+ if (!$output) break;
+ if (!flock($output, LOCK_EX)) break;
+ if ($isBeginning)
+ fwrite($output, ' $prevItem)
+ if ($prevItem['hash'] === $item['hash'])
+ unset($items[$index]);
+ }
+ }
+
+ while (preg_match('/%([^%]+)%/i', $config[$supplier]['title'], $match))
+ $config[$supplier]['title'] = str_replace(
+ $match[0],
+ ${$match[1]},
+ $config[$supplier]['title']
+ );
+}
?>
@@ -113,44 +179,82 @@ while (preg_match('/%([^%]+)%/i', $config[$supplier]['title'], $match))
-
-
-
-
-
-
-
+
+ config
+
+
+
+
+
+
+