Initial commit
This commit is contained in:
+164
@@ -0,0 +1,164 @@
|
||||
<?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;
|
||||
Reference in New Issue
Block a user