Create one and see its secret once, send a test, change the secret, and read each delivery with what the other end answered. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
47 lines
1.4 KiB
PHP
47 lines
1.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Http\Requests\Api\V1;
|
|
|
|
use App\Models\Webhook;
|
|
use App\Rules\PublicHttpsUrl;
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class WebhookRequest extends FormRequest
|
|
{
|
|
public function authorize(): bool
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function rules(): array
|
|
{
|
|
$creating = ! $this->route('webhook') instanceof Webhook;
|
|
$sometimes = $creating ? 'required' : 'sometimes';
|
|
|
|
return [
|
|
'name' => [$sometimes, 'string', 'max:120'],
|
|
'url' => [
|
|
$sometimes,
|
|
'string',
|
|
'url',
|
|
'max:2048',
|
|
// Refused now rather than at the first delivery; checked
|
|
// again at every delivery all the same.
|
|
new PublicHttpsUrl,
|
|
],
|
|
'events' => [$sometimes, 'array', 'min:1'],
|
|
'events.*' => ['string', 'distinct', Rule::in(['*', ...Webhook::EVENTS])],
|
|
'secret' => [$creating ? 'sometimes' : 'prohibited', 'nullable', 'string', 'min:16', 'max:255'],
|
|
'rotate_secret' => [$creating ? 'prohibited' : 'sometimes', 'boolean'],
|
|
'include_personal_data' => ['sometimes', 'boolean'],
|
|
'is_active' => ['sometimes', 'boolean'],
|
|
];
|
|
}
|
|
}
|