Add mailman check

This commit is contained in:
Philipp Lang 2023-06-01 17:19:24 +02:00
parent a15b54f98d
commit 0dcb3b7d5b
3 changed files with 27 additions and 2 deletions

View File

@ -4,6 +4,7 @@ namespace App\Mailgateway\Actions;
use App\Mailgateway\Models\Mailgateway; use App\Mailgateway\Models\Mailgateway;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
use Lorisleiva\Actions\ActionRequest; use Lorisleiva\Actions\ActionRequest;
use Lorisleiva\Actions\Concerns\AsAction; use Lorisleiva\Actions\Concerns\AsAction;
@ -13,6 +14,10 @@ class StoreAction
public function handle(array $input) public function handle(array $input)
{ {
if (!(new $input['type']['cls']($input['type']['params']))->works()) {
throw ValidationException::withMessages(['erorr' => 'Verbindung fehlgeschlagen.']);
}
Mailgateway::create($input); Mailgateway::create($input);
} }
@ -22,7 +27,7 @@ class StoreAction
'name' => 'required|string|max:255', 'name' => 'required|string|max:255',
'domain' => 'required|string|max:255', 'domain' => 'required|string|max:255',
'type.cls' => ['required', 'string', 'max:255', Rule::in(app('mail-gateways'))], 'type.cls' => ['required', 'string', 'max:255', Rule::in(app('mail-gateways'))],
'type.params' => 'present', ...collect(request()->input('type.cls')::rules('storeValidator'))->mapWithKeys(fn ($rules, $key) => ["type.params.{$key}" => $rules]),
]; ];
} }

View File

@ -2,8 +2,21 @@
namespace App\Mailgateway\Types; namespace App\Mailgateway\Types;
use App\Mailman\Support\MailmanService;
class MailmanType extends Type class MailmanType extends Type
{ {
public string $url;
public string $user;
public string $password;
public function __construct($params)
{
$this->url = data_get($params, 'url');
$this->user = data_get($params, 'user');
$this->password = data_get($params, 'password');
}
public static function name(): string public static function name(): string
{ {
return 'Mailman'; return 'Mailman';
@ -11,7 +24,7 @@ class MailmanType extends Type
public function works(): bool public function works(): bool
{ {
return true; return app(MailmanService::class)->setCredentials($this->url, $this->user, $this->password)->check();
} }
public static function fields(): array public static function fields(): array

View File

@ -16,4 +16,11 @@ abstract class Type
$field['name'] => $field['default'], $field['name'] => $field['default'],
])->toArray(); ])->toArray();
} }
public static function rules(string $validator): array
{
return collect(static::fields())->mapWithKeys(fn ($field) => [
$field['name'] => $field[$validator],
])->toArray();
}
} }