diff --git a/app/Api/V1/Requests/Models/Webhook/CreateRequest.php b/app/Api/V1/Requests/Models/Webhook/CreateRequest.php index 242ad7d9e2..8b72dc591c 100644 --- a/app/Api/V1/Requests/Models/Webhook/CreateRequest.php +++ b/app/Api/V1/Requests/Models/Webhook/CreateRequest.php @@ -23,6 +23,7 @@ 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; @@ -40,9 +41,10 @@ class CreateRequest extends FormRequest */ public function getData(): array { - $triggers = array_flip(config('firefly.webhooks.triggers')); - $responses = array_flip(config('firefly.webhooks.responses')); - $deliveries = array_flip(config('firefly.webhooks.deliveries')); + + $triggers = array_flip(Webhook::getTriggers()); + $responses = array_flip(Webhook::getResponses()); + $deliveries = array_flip(Webhook::getDeliveries()); $fields = [ 'title' => ['title', 'convertString'], @@ -69,9 +71,9 @@ class CreateRequest extends FormRequest */ public function rules(): array { - $triggers = implode(',', array_values(config('firefly.webhooks.triggers'))); - $responses = implode(',', array_values(config('firefly.webhooks.responses'))); - $deliveries = implode(',', array_values(config('firefly.webhooks.deliveries'))); + $triggers = implode(',', Webhook::getTriggers()); + $responses = implode(',', Webhook::getResponses()); + $deliveries = implode(',', Webhook::getDeliveries()); return [ 'title' => 'required|between:1,512|uniqueObjectForUser:webhooks,title', @@ -79,7 +81,9 @@ class CreateRequest extends FormRequest 'trigger' => sprintf('required|in:%s', $triggers), 'response' => sprintf('required|in:%s', $responses), 'delivery' => sprintf('required|in:%s', $deliveries), - 'url' => ['required', 'url', 'starts_with:https://', 'uniqueWebhook'], + 'url' => ['required', 'url', 'uniqueWebhook'], ]; } + + } diff --git a/app/Api/V1/Requests/Models/Webhook/UpdateRequest.php b/app/Api/V1/Requests/Models/Webhook/UpdateRequest.php index 7330cebfe4..22e40ff597 100644 --- a/app/Api/V1/Requests/Models/Webhook/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Webhook/UpdateRequest.php @@ -23,6 +23,7 @@ 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; @@ -40,9 +41,9 @@ class UpdateRequest extends FormRequest */ public function getData(): array { - $triggers = array_flip(config('firefly.webhooks.triggers')); - $responses = array_flip(config('firefly.webhooks.responses')); - $deliveries = array_flip(config('firefly.webhooks.deliveries')); + $triggers = array_flip(Webhook::getTriggers()); + $responses = array_flip(Webhook::getResponses()); + $deliveries = array_flip(Webhook::getDeliveries()); $fields = [ 'title' => ['title', 'convertString'], @@ -79,9 +80,10 @@ class UpdateRequest extends FormRequest */ public function rules(): array { - $triggers = implode(',', array_values(config('firefly.webhooks.triggers'))); - $responses = implode(',', array_values(config('firefly.webhooks.responses'))); - $deliveries = implode(',', array_values(config('firefly.webhooks.deliveries'))); + + $triggers = implode(',', array_values(Webhook::getTriggers())); + $responses = implode(',', array_values(Webhook::getResponses())); + $deliveries = implode(',', array_values(Webhook::getDeliveries())); $webhook = $this->route()->parameter('webhook'); return [ diff --git a/app/Api/V2/Controllers/Model/Budget/ListController.php b/app/Api/V2/Controllers/Model/Budget/ListController.php index 2d84fb5b58..99cfcfc017 100644 --- a/app/Api/V2/Controllers/Model/Budget/ListController.php +++ b/app/Api/V2/Controllers/Model/Budget/ListController.php @@ -1,4 +1,5 @@ hasMany(WebhookMessage::class); } + + /** + * @return array + */ + public static function getTriggers(): array + { + $array = []; + $set = WebhookTrigger::cases(); + foreach ($set as $item) { + $array[$item->value] = $item->name; + } + return $array; + } + /** + * @return array + */ + public static function getResponses(): array + { + $array = []; + $set = WebhookResponse::cases(); + foreach ($set as $item) { + $array[$item->value] = $item->name; + } + return $array; + } + + /** + * @return array + */ + public static function getDeliveries(): array + { + $array = []; + $set = WebhookDelivery::cases(); + foreach ($set as $item) { + $array[$item->value] = $item->name; + } + return $array; + } } diff --git a/app/Transformers/WebhookTransformer.php b/app/Transformers/WebhookTransformer.php index bc43d58c6c..add97a29c5 100644 --- a/app/Transformers/WebhookTransformer.php +++ b/app/Transformers/WebhookTransformer.php @@ -24,6 +24,9 @@ declare(strict_types=1); namespace FireflyIII\Transformers; +use FireflyIII\Enums\WebhookDelivery; +use FireflyIII\Enums\WebhookResponse; +use FireflyIII\Enums\WebhookTrigger; use FireflyIII\Models\Webhook; /** @@ -38,8 +41,6 @@ class WebhookTransformer extends AbstractTransformer */ public function __construct() { - // array merge kills the keys - $this->enums = config('firefly.webhooks.triggers') + config('firefly.webhooks.responses') + config('firefly.webhooks.deliveries'); } /** @@ -58,9 +59,9 @@ class WebhookTransformer extends AbstractTransformer 'active' => $webhook->active, 'title' => $webhook->title, 'secret' => $webhook->secret, - 'trigger' => $this->getEnum($webhook->trigger), - 'response' => $this->getEnum($webhook->response), - 'delivery' => $this->getEnum($webhook->delivery), + 'trigger' => $this->getEnum('trigger', $webhook->trigger), + 'response' => $this->getEnum('response', $webhook->response), + 'delivery' => $this->getEnum('delivery', $webhook->delivery), 'url' => $webhook->url, 'links' => [ [ @@ -71,8 +72,19 @@ class WebhookTransformer extends AbstractTransformer ]; } - private function getEnum(int $value) + /** + * @param string $type + * @param int $value + * @return string + */ + private function getEnum(string $type, int $value): string { - return $this->enums[$value] ?? 'UNKNOWN_VALUE'; + if ('trigger' === $type) { + return WebhookTrigger::from($value)->name; + } + if ('response' === $type) { + return WebhookResponse::from($value)->name; + } + return WebhookDelivery::from($value)->name; } } diff --git a/app/Validation/FireflyValidator.php b/app/Validation/FireflyValidator.php index f0bced142e..ede0faeb16 100644 --- a/app/Validation/FireflyValidator.php +++ b/app/Validation/FireflyValidator.php @@ -814,10 +814,10 @@ class FireflyValidator extends Validator public function validateUniqueWebhook($value, $parameters): bool { if (auth()->check()) { - // possible values - $triggers = array_flip(config('firefly.webhooks.triggers')); - $responses = array_flip(config('firefly.webhooks.responses')); - $deliveries = array_flip(config('firefly.webhooks.deliveries')); + + $triggers = array_flip(Webhook::getTriggers()); + $responses = array_flip(Webhook::getResponses()); + $deliveries = array_flip(Webhook::getDeliveries()); // integers $trigger = $triggers[$this->data['trigger']] ?? 0; diff --git a/config/firefly.php b/config/firefly.php index 9b91d316fb..037f40c6c6 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -82,6 +82,9 @@ use FireflyIII\TransactionRules\Actions\SetNotes; use FireflyIII\TransactionRules\Actions\SetSourceAccount; use FireflyIII\TransactionRules\Actions\UpdatePiggybank; use FireflyIII\User; +use FireflyIII\Enums\WebhookResponse as WebhookResponseEnum; +use FireflyIII\Enums\WebhookDelivery as WebhookDeliveryEnum; +use FireflyIII\Enums\WebhookTrigger as WebhookTriggerEnum; /* @@ -727,20 +730,7 @@ return [ 'recurrence_total', 'recurrence_count', ], 'webhooks' => [ - 'max_attempts' => env('WEBHOOK_MAX_ATTEMPTS', 3), - 'triggers' => [ - Webhook::TRIGGER_STORE_TRANSACTION => 'TRIGGER_STORE_TRANSACTION', - Webhook::TRIGGER_UPDATE_TRANSACTION => 'TRIGGER_UPDATE_TRANSACTION', - Webhook::TRIGGER_DESTROY_TRANSACTION => 'TRIGGER_DESTROY_TRANSACTION', - ], - 'responses' => [ - Webhook::RESPONSE_TRANSACTIONS => 'RESPONSE_TRANSACTIONS', - Webhook::RESPONSE_ACCOUNTS => 'RESPONSE_ACCOUNTS', - Webhook::RESPONSE_NONE => 'RESPONSE_NONE', - ], - 'deliveries' => [ - Webhook::DELIVERY_JSON => 'DELIVERY_JSON', - ], + 'max_attempts' => env('WEBHOOK_MAX_ATTEMPTS', 3) ], 'can_have_virtual_amounts' => [AccountType::ASSET], 'can_have_opening_balance' => [AccountType::ASSET, AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::CREDITCARD], diff --git a/database/migrations/2022_08_21_104626_add_user_groups.php b/database/migrations/2022_08_21_104626_add_user_groups.php index 7c9636067c..55a249959e 100644 --- a/database/migrations/2022_08_21_104626_add_user_groups.php +++ b/database/migrations/2022_08_21_104626_add_user_groups.php @@ -1,4 +1,5 @@