. */ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests\Models\Webhook; use FireflyIII\Models\Webhook; use FireflyIII\Rules\IsBoolean; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; /** * Class CreateRequest */ class CreateRequest extends FormRequest { use ChecksLogin; use ConvertsDataTypes; public function getData(): array { $triggers = Webhook::getTriggersForValidation(); $responses = Webhook::getResponsesForValidation(); $deliveries = Webhook::getDeliveriesForValidation(); $fields = [ 'title' => ['title', 'convertString'], 'active' => ['active', 'boolean'], 'trigger' => ['trigger', 'convertString'], 'response' => ['response', 'convertString'], 'delivery' => ['delivery', 'convertString'], 'url' => ['url', 'convertString'], ]; // this is the way. $return = $this->getAllData($fields); $return['trigger'] = $triggers[$return['trigger']] ?? (int)$return['trigger']; $return['response'] = $responses[$return['response']] ?? (int)$return['response']; $return['delivery'] = $deliveries[$return['delivery']] ?? (int)$return['delivery']; return $return; } /** * Rules for this request. */ public function rules(): array { $triggers = implode(',', array_keys(Webhook::getTriggersForValidation())); $responses = implode(',', array_keys(Webhook::getResponsesForValidation())); $deliveries = implode(',', array_keys(Webhook::getDeliveriesForValidation())); $validProtocols = config('firefly.valid_url_protocols'); return [ 'title' => 'required|between:1,512|uniqueObjectForUser:webhooks,title', 'active' => [new IsBoolean()], 'trigger' => sprintf('required|in:%s', $triggers), 'response' => sprintf('required|in:%s', $responses), 'delivery' => sprintf('required|in:%s', $deliveries), 'url' => ['required', sprintf('url:%s', $validProtocols), 'uniqueWebhook'], ]; } }