Rechtebechebung für User mit Sudorechte
parent
b80ff05a0a
commit
033ae32538
|
|
@ -2,8 +2,10 @@
|
|||
|
||||
namespace App\Observers;
|
||||
|
||||
use App\Models\DkimKey;
|
||||
use App\Models\Domain;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Process;
|
||||
|
||||
class DomainObserver
|
||||
{
|
||||
|
|
@ -41,33 +43,87 @@ class DomainObserver
|
|||
/**
|
||||
* Beim Löschen alle DKIM-Selector dieser Domain aus OpenDKIM entfernen.
|
||||
*/
|
||||
|
||||
public function deleted(Domain $domain): void
|
||||
public function deleting(Domain $domain): void
|
||||
{
|
||||
try {
|
||||
$svc = app(\App\Services\DkimService::class);
|
||||
|
||||
foreach ($domain->dkimKeys as $key) {
|
||||
$svc->removeForDomain($domain, $key->selector);
|
||||
// Selector VOR dem Delete einsammeln (Relation oder direkte Query)
|
||||
$selectors = DkimKey::where('domain_id', $domain->id)->pluck('selector')->all();
|
||||
$selectors = $selectors ?: ['mwl1'];
|
||||
|
||||
foreach ($selectors as $sel) {
|
||||
$cmd = ['sudo','-n','/usr/local/sbin/mailwolt-remove-dkim', $domain->domain, $sel];
|
||||
$res = Process::timeout(30)->run($cmd);
|
||||
Log::info('DKIM remove exit', [
|
||||
'domain' => $domain->domain,
|
||||
'selector' => $sel,
|
||||
'exit' => $res->exitCode(),
|
||||
'out' => $res->output(),
|
||||
'err' => $res->errorOutput(),
|
||||
]);
|
||||
if ($res->failed()) {
|
||||
throw new \RuntimeException('OpenDKIM-Remove fehlgeschlagen: '.$res->errorOutput());
|
||||
}
|
||||
}
|
||||
|
||||
// Local storage wegräumen (kein Root nötig)
|
||||
// lokale Backups unter storage/… löschen (App-User, kein sudo nötig)
|
||||
$path = storage_path("app/private/dkim/{$domain->domain}");
|
||||
if (is_dir($path)) {
|
||||
\Illuminate\Support\Facades\File::deleteDirectory($path);
|
||||
}
|
||||
|
||||
Log::info("Domain deleted + DKIM cleaned", ['domain' => $domain->domain]);
|
||||
// OpenDKIM neu laden (best effort)
|
||||
Process::run(['sudo','-n','/bin/systemctl','reload','opendkim']);
|
||||
} catch (\Throwable $e) {
|
||||
Log::error("Domain delete cleanup failed", ['domain'=>$domain->domain,'error'=>$e->getMessage()]);
|
||||
Log::error('Domain deleting cleanup failed', [
|
||||
'domain' => $domain->domain,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
// Optional: Exception werfen, um das Löschen vollständig abzubrechen
|
||||
// throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/** Nur noch Info-Log NACH dem Löschen (kein Cleanup mehr hier) */
|
||||
public function deleted(Domain $domain): void
|
||||
{
|
||||
Log::info('Domain deleted', ['domain' => $domain->domain]);
|
||||
}
|
||||
|
||||
/** Für forceDelete bei SoftDeletes */
|
||||
public function forceDeleted(Domain $domain): void
|
||||
{
|
||||
$this->deleted($domain);
|
||||
}
|
||||
|
||||
|
||||
// public function deleted(Domain $domain): void
|
||||
// {
|
||||
// try {
|
||||
// $svc = app(\App\Services\DkimService::class);
|
||||
//
|
||||
// foreach ($domain->dkimKeys as $key) {
|
||||
// $svc->removeForDomain($domain, $key->selector);
|
||||
// }
|
||||
//
|
||||
// // Local storage wegräumen (kein Root nötig)
|
||||
// $path = storage_path("app/private/dkim/{$domain->domain}");
|
||||
// if (is_dir($path)) {
|
||||
// \Illuminate\Support\Facades\File::deleteDirectory($path);
|
||||
// }
|
||||
//
|
||||
// Log::info("Domain deleted + DKIM cleaned", ['domain' => $domain->domain]);
|
||||
// } catch (\Throwable $e) {
|
||||
// Log::error("Domain delete cleanup failed", ['domain'=>$domain->domain,'error'=>$e->getMessage()]);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public function forceDeleted(Domain $domain): void
|
||||
// {
|
||||
// $this->deleted($domain);
|
||||
// }
|
||||
|
||||
// public function created(Domain $domain): void
|
||||
// {
|
||||
// if ($domain->is_server) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue