165 lines
6.0 KiB
PHP
165 lines
6.0 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* Ustawienia integracji formularzy z api.softspm.pl/send_email_api.php
|
|
*
|
|
* Sekretów NIE trzymamy w tym pliku ani nigdzie w katalogu strony.
|
|
* Kolejność szukania klucza API i sekretu podpisu (wygrywa pierwsze znalezione):
|
|
*
|
|
* 1. zmienne środowiskowe SOFTSPM_MAIL_API_KEY i SOFTSPM_FORM_SECRET
|
|
* 2. wspólna konfiguracja serwera: /etc/hydronexis/config.php
|
|
* - stałe SOFTSPM_MAIL_API_KEY / SOFTSPM_FORM_SECRET, albo
|
|
* - klucze softspm_mail_api_key / softspm_form_secret w zwracanej tablicy
|
|
* 3. api/config.local.php (wzór: config.local.sample.php) - na potrzeby dev
|
|
*
|
|
* Ścieżkę wspólnej konfiguracji można zmienić zmienną SOFTSPM_SHARED_CONFIG.
|
|
*/
|
|
|
|
$config = [
|
|
// --- API wysyłki (patrz doc/manual_send_email.html) ---------------------
|
|
'api_url' => '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;
|