'https://api.softspm.pl/send_email_api.php', 'api_key' => '', 'timeout' => 15, // --- Sekret do podpisywania tokenów antybotowych (HMAC-SHA256) --------- // Dowolny losowy ciąg, min. 32 znaki. Zmiana unieważnia otwarte formularze. 'token_secret' => '', // --- Adresat zgłoszeń -------------------------------------------------- // Ustawiany wyłącznie po stronie serwera. Nigdy nie pochodzi z formularza - // inaczej endpoint stałby się otwartym przekaźnikiem spamu. // Wartość domyślna; produkcja nadpisuje ją z /etc/hydronexis/config.php. 'recipient' => 'pzators@go2.pl', // Opcjonalnie: inny adres dla wybranego formularza, np. // 'recipients' => ['szkolenia' => 'szkolenia@softspm.com'], 'recipients' => [], 'subject_prefix' => '[softspm.com]', // --- Skąd wolno wysyłać (nagłówek Origin / Referer) -------------------- 'allowed_hosts' => [ 'softspm.com', 'www.softspm.com', 'localhost', '127.0.0.1', ], // --- Zabezpieczenia ---------------------------------------------------- // Minimalny czas od pierwszej interakcji z formularzem do wysyłki. // Człowiek czyta, pisze i przesuwa suwak; skrypt robi wszystko w jednej serii. 'min_fill_seconds' => 3, // Minimalny odstęp między pobraniem tokenu a potwierdzeniem suwakiem. // 0 = wyłączone. Podnoś ostrożnie: ktoś, kto od razu chwyta suwak, robi // obie rzeczy w tej samej sekundzie i zostałby odrzucony niesłusznie. 'min_slide_seconds' => 0, // Po tylu sekundach token formularza wygasa (otwarta karta w tle). 'max_token_age' => 7200, // Po tylu sekundach wygasa samo potwierdzenie suwakiem. 'max_proof_age' => 1800, // Limit zgłoszeń z jednego adresu IP. 'rate_limit' => [ 'per_hour' => 5, 'per_day' => 20, ], // --- Dane robocze (zużyte tokeny, liczniki, log) ------------------------ 'storage_dir' => __DIR__ . '/storage', ]; // --- 1. Zmienne środowiskowe ------------------------------------------------ $fromEnv = [ 'api_key' => getenv('SOFTSPM_MAIL_API_KEY'), 'token_secret' => getenv('SOFTSPM_FORM_SECRET'), ]; foreach ($fromEnv as $key => $value) { if (is_string($value) && $value !== '') { $config[$key] = $value; } } // --- 2. Wspólna konfiguracja serwera --------------------------------------- $sharedPath = getenv('SOFTSPM_SHARED_CONFIG'); if (!is_string($sharedPath) || $sharedPath === '') { $sharedPath = '/etc/hydronexis/config.php'; } if (is_file($sharedPath) && is_readable($sharedPath)) { // Plik wczytujemy w osobnym zasięgu, żeby nie mieszał w zmiennych tego pliku. $shared = (static function (string $file) { /** @psalm-suppress UnresolvableInclude */ return require $file; })($sharedPath); if (!is_array($shared)) { $shared = []; } /** * Jedna wartość może przyjść na dwa sposoby: jako stała zdefiniowana * w /etc/hydronexis/config.php albo jako klucz w tablicy zwracanej przez * ten plik. Zmienna środowiskowa ustawiona wcześniej ma pierwszeństwo. */ $pick = static function (string $constant, string $key) use ($shared) { if (defined($constant)) { $value = constant($constant); if (is_string($value) && $value !== '') { return $value; } if (is_array($value) && $value !== []) { return $value; } } if (isset($shared[$key]) && (is_string($shared[$key]) || is_array($shared[$key])) && $shared[$key] !== '') { return $shared[$key]; } if (isset($shared[$constant]) && (is_string($shared[$constant]) || is_array($shared[$constant])) && $shared[$constant] !== '') { return $shared[$constant]; } return null; }; // Sekrety - tylko jeśli nie przyszły ze zmiennych środowiskowych. if ($config['api_key'] === '') { $value = $pick('SOFTSPM_MAIL_API_KEY', 'softspm_mail_api_key'); if (is_string($value)) { $config['api_key'] = $value; } } if ($config['token_secret'] === '') { $value = $pick('SOFTSPM_FORM_SECRET', 'softspm_form_secret'); if (is_string($value)) { $config['token_secret'] = $value; } } // Adresat zgłoszeń - jeden dla wszystkich formularzy. $value = $pick('SOFTSPM_FORM_RECIPIENT', 'softspm_form_recipient'); if (is_string($value)) { $config['recipient'] = $value; } // Opcjonalnie: adresaci per formularz, tablica id_formularza => adres. $value = $pick('SOFTSPM_FORM_RECIPIENTS', 'softspm_form_recipients'); if (is_array($value)) { $config['recipients'] = $value; } // Opcjonalnie: domeny, z których wolno wysyłać. $value = $pick('SOFTSPM_FORM_HOSTS', 'softspm_form_hosts'); if (is_array($value) && $value !== []) { $config['allowed_hosts'] = $value; } } // --- 3. Konfiguracja lokalna (dev) ------------------------------------------ $local = __DIR__ . '/config.local.php'; if (is_file($local)) { $override = require $local; if (is_array($override)) { $config = array_replace($config, $override); } } return $config;