diff --git a/app/Api/V1/Controllers/Autocomplete/BudgetController.php b/app/Api/V1/Controllers/Autocomplete/BudgetController.php index ed09d195c4..97fa37418a 100644 --- a/app/Api/V1/Controllers/Autocomplete/BudgetController.php +++ b/app/Api/V1/Controllers/Autocomplete/BudgetController.php @@ -73,6 +73,6 @@ class BudgetController extends Controller } ); - return response()->api($filtered); + return response()->api($filtered->toArray()); } } diff --git a/app/Api/V1/Controllers/Autocomplete/CategoryController.php b/app/Api/V1/Controllers/Autocomplete/CategoryController.php index 6c0e281236..39085c1f06 100644 --- a/app/Api/V1/Controllers/Autocomplete/CategoryController.php +++ b/app/Api/V1/Controllers/Autocomplete/CategoryController.php @@ -73,6 +73,6 @@ class CategoryController extends Controller } ); - return response()->api($filtered); + return response()->api($filtered->toArray()); } } diff --git a/app/Api/V1/Controllers/Controller.php b/app/Api/V1/Controllers/Controller.php index a6bbeec865..d232533b27 100644 --- a/app/Api/V1/Controllers/Controller.php +++ b/app/Api/V1/Controllers/Controller.php @@ -157,7 +157,15 @@ abstract class Controller extends BaseController $value = null; } if (null !== $value) { - $bag->set($integer, (int) $value); + $value = (int) $value; + if ($value < 1) { + $value = 1; + } + if ($value > 2 ** 16) { + $value = 2 ** 16; + } + + $bag->set($integer, $value); } if (null === $value && 'limit' === $integer // @phpstan-ignore-line diff --git a/app/Api/V1/Requests/Autocomplete/AutocompleteRequest.php b/app/Api/V1/Requests/Autocomplete/AutocompleteRequest.php index be28d487e7..f37aba9f8d 100644 --- a/app/Api/V1/Requests/Autocomplete/AutocompleteRequest.php +++ b/app/Api/V1/Requests/Autocomplete/AutocompleteRequest.php @@ -58,6 +58,7 @@ class AutocompleteRequest extends FormRequest public function rules(): array { return [ + 'date' => 'date|after:1900-01-01|before:2099-12-31' ]; } } diff --git a/app/Api/V1/Requests/Data/DateRequest.php b/app/Api/V1/Requests/Data/DateRequest.php index 209332f776..b7acb62a1a 100644 --- a/app/Api/V1/Requests/Data/DateRequest.php +++ b/app/Api/V1/Requests/Data/DateRequest.php @@ -25,6 +25,7 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests\Data; use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Exceptions\ValidationException; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; @@ -49,7 +50,7 @@ class DateRequest extends FormRequest $start->startOfDay(); $end->endOfDay(); if ($start->diffInYears($end, true) > 5) { - throw new FireflyException('Date range out of range.'); + throw new ValidationException('Date range out of range.'); } return [ diff --git a/app/Api/V1/Requests/System/CronRequest.php b/app/Api/V1/Requests/System/CronRequest.php index 9b76e11239..f88e770acb 100644 --- a/app/Api/V1/Requests/System/CronRequest.php +++ b/app/Api/V1/Requests/System/CronRequest.php @@ -57,6 +57,10 @@ class CronRequest extends FormRequest if ($this->has('date')) { $data['date'] = $this->getCarbonDate('date'); } + // catch NULL. + if(null === $data['date']) { + $data['date'] = today(config('app.timezone')); + } return $data; } diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 9e5b7f03c1..af70410cbc 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -133,6 +133,13 @@ class Handler extends ExceptionHandler return response()->json(['message' => $e->getMessage(), 'exception' => 'BadHttpHeaderException'], $e->statusCode); } + if($e instanceof ValidationException && $expectsJson) { + $errorCode = 422; + return response()->json( + ['message' => sprintf('Validation exception: %s', $e->getMessage()), 'errors' => ['date' => 'Date is invalid']], + $errorCode + ); + } if ($expectsJson) { $errorCode = 500; diff --git a/app/Jobs/CreateRecurringTransactions.php b/app/Jobs/CreateRecurringTransactions.php index bf392a3462..207ba625af 100644 --- a/app/Jobs/CreateRecurringTransactions.php +++ b/app/Jobs/CreateRecurringTransactions.php @@ -419,7 +419,9 @@ class CreateRecurringTransactions implements ShouldQueue /** @var RecurrenceTransaction $transaction */ foreach ($transactions as $index => $transaction) { $single = [ - 'type' => null === $transaction->transactionType->type ? strtolower($recurrence->transactionType->type) : strtolower($transaction->transactionType->type), + 'type' => null === $transaction?->transactionType?->type ? + strtolower($recurrence->transactionType->type) : + strtolower($transaction->transactionType->type), 'date' => $date, 'user' => $recurrence->user_id, 'currency_id' => $transaction->transaction_currency_id,