. */ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests\Models\Webhook; use FireflyIII\Enums\WebhookResponse; use FireflyIII\Enums\WebhookTrigger; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Webhook; use FireflyIII\Rules\IsBoolean; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\ValidatesWebhooks; use Illuminate\Contracts\Validation\Validator; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Log; /** * Class UpdateRequest */ class UpdateRequest extends FormRequest { use ChecksLogin; use ConvertsDataTypes; use ValidatesWebhooks; public function getData(): array { $fields = [ 'title' => ['title', 'convertString'], 'active' => ['active', 'boolean'], 'url' => ['url', 'convertString'], ]; $triggers = $this->get('triggers', []); $responses = $this->get('responses', []); $deliveries = $this->get('deliveries', []); if (0 === count($triggers) || 0 === count($responses) || 0 === count($deliveries)) { throw new FireflyException('Unexpectedly got no responses, triggers or deliveries.'); } $return = $this->getAllData($fields); $return['triggers'] = $triggers; $return['responses'] = $responses; $return['deliveries'] = $deliveries; return $return; } /** * Rules for this request. */ public function rules(): array { $triggers = implode(',', array_values(Webhook::getTriggers())); $responses = implode(',', array_values(Webhook::getResponses())); $deliveries = implode(',', array_values(Webhook::getDeliveries())); $validProtocols = config('firefly.valid_url_protocols'); /** @var Webhook $webhook */ $webhook = $this->route()->parameter('webhook'); return [ 'title' => sprintf('min:1|max:255|uniqueObjectForUser:webhooks,title,%d', $webhook->id), 'active' => [new IsBoolean()], 'trigger' => 'prohibited', 'triggers' => 'required|array|min:1|max:10', 'triggers.*' => sprintf('required|in:%s', $triggers), 'response' => 'prohibited', 'responses' => 'required|array|min:1|max:1', 'responses.*' => sprintf('required|in:%s', $responses), 'delivery' => 'prohibited', 'deliveries' => 'required|array|min:1|max:1', 'deliveries.*' => sprintf('required|in:%s', $deliveries), 'url' => [sprintf('url:%s', $validProtocols), sprintf('uniqueExistingWebhook:%d', $webhook->id)], ]; } }