remove mailing list
continuous-integration/drone/push Build is failing Details

This commit is contained in:
philipp lang 2023-07-17 17:08:07 +02:00
parent 9e00eed6c1
commit 07839767c4
6 changed files with 19 additions and 9 deletions

View File

@ -12,6 +12,7 @@ class DestroyAction
public function handle(Maildispatcher $maildispatcher): void
{
$maildispatcher->gateway->type->deleteList($maildispatcher->name, $maildispatcher->gateway->domain);
$maildispatcher->delete();
}

View File

@ -20,15 +20,6 @@ class Maildispatcher extends Model
'filter' => 'json',
];
public static function booted(): void
{
static::deleting(function ($dispatcher) {
foreach ($dispatcher->gateway->type->list($dispatcher->name, $dispatcher->gateway->domain) as $email) {
$dispatcher->gateway->type->remove($dispatcher->name, $dispatcher->gateway->domain, $email->email);
}
});
}
/**
* @return BelongsTo<Mailgateway, self>
*/

View File

@ -57,6 +57,10 @@ class LocalType extends Type
{
}
public function deleteList(string $name, string $domain): void
{
}
public function remove(string $name, string $domain, string $email): void
{
Localmaildispatcher::where('from', "{$name}@{$domain}")->where('to', $email)->delete();

View File

@ -113,6 +113,11 @@ class MailmanType extends Type
$this->service()->createList("{$name}@{$domain}");
}
public function deleteList(string $name, string $domain): void
{
$this->service()->deleteList("{$name}@{$domain}");
}
private function getList(string $name, string $domain): MailingList
{
$list = $this->service()->getLists()->first(fn ($list) => $list->fqdnListname === "{$name}@{$domain}");

View File

@ -22,6 +22,8 @@ abstract class Type
abstract public function createList(string $name, string $domain): void;
abstract public function deleteList(string $name, string $domain): void;
abstract public function remove(string $name, string $domain, string $email): void;
/**

View File

@ -59,6 +59,13 @@ class MailmanService
return $list;
}
public function deleteList(string $mailAddress): void
{
$list = $this->getLists()->first(fn ($list) => $list->fqdnListname === $mailAddress);
$response = $this->http()->delete("/lists/{$list->listId}");
throw_unless(204 === $response->status(), MailmanServiceException::class, 'Deleting list failed');
}
public function check(): bool
{
try {