Změna nastavení SMTP Maileru za běhu
- DefenestrationPraha
- Člen | 127
Současná implementace Nette\Mail\SmtpMailer se typicky užívá tak, že uživatelské jméno a heslo se načtou z local.neon a nastaví v rámci konfigurace Nette.
Navrhuji přidat funkci
public function setCredentials(string $username,
#[\SensitiveParameter]
string $password) {
$this->username = $username;
$this->password = $password;
}
která by umožňovala změnu přihlašovacích údajů za běhu. Rád bych totiž umožnil svým uživatelům, aby si heslo k SMTP zkonfigurovali nikoliv v local.neon, ale v rámci nastavení serveru (tj. bylo by uloženo v databázi, ne v local.neon).
Chci tím snížit pravděpodobnost, že někdo třeba omylem commitne do nějakého veřejného úložiště heslo k funkční SMTP službě. Je sice pravda, že local.neon by se obecně měl chránit před cizíma očima, ale prosákne-li, dejme tomu, jen heslo k databázi, celkem snadno jej v případě nutnosti změníte. Databáze bývá místní a dost často ani není dostupná zvenčí. Kdežto SMTP často zvenčí dostupné je a jeden účet může používat více služeb, pak byste to museli měnit u všech naráz.
Editoval DefenestrationPraha (17. 5. 2023 12:12)
- Marek Bartoš
- Nette Blogger | 1274
Co takhle?
services:
mail.mail: YourCustomMailer
class YourCustomMailer implements \Nette\Mail\IMailer
{
public function send(Message $mail): void
{
$mailer = new SmtpMailer(/* ... */);
$mailer->send($mail);
}
}
Editoval Marek Bartoš (17. 5. 2023 12:19)
- DefenestrationPraha
- Člen | 127
Marek Bartoš napsal(a):
Co takhle?
services: mail.mail: YourCustomMailer
class YourCustomMailer implements \Nette\Mail\IMailer { public function send(Message $mail): void { $mailer = new SmtpMailer(/* ... */); $mailer->send($mail); } }
To je chytré.
Už jsem mezitím uvažoval o alternativě, přenastavit tu property pomocí ReflectionProperty::setValue(), to by asi taky šlo?
- Marek Bartoš
- Nette Blogger | 1274
@m.brecher Pokud něco není dostupné bez použití reflexe, tak to není součástí api. Privátní property se může kdykoli přejmenovat.
Reflexe je primárně pro statickou analýzu, generování api dokumentace a všemožné deklarativní enginy, jako je nextras/orm, doctrine, orisai/object-mapper apod.
A ano, bude to pomalejší když se to v runtime s reflexí přežene, ale spadá to do kolonky mikrooptimalizací
Editoval Marek Bartoš (17. 5. 2023 18:34)
- DefenestrationPraha
- Člen | 127
MajklNajt napsal(a):
a to heslo v databázi budeš mať uložené plain? to je trošku z kaluže do blata :D
Ne, to není. Ještě jsem neviděl, že by někdo omylem commitnul obsah lokální databáze do veřejného Gitu, kdežto lokální konfigurační soubory s plaintextovým heslem … to je celkem častý „failure mode“ i u zkušených lidí.