diff --git a/app/Events/ChangedPiggyBankAmount.php b/app/Events/ChangedPiggyBankAmount.php index 84743f4e91..e93b4c4903 100644 --- a/app/Events/ChangedPiggyBankAmount.php +++ b/app/Events/ChangedPiggyBankAmount.php @@ -1,8 +1,8 @@ . */ +declare(strict_types=1); + namespace FireflyIII\Events; use FireflyIII\Models\PiggyBank; diff --git a/app/Handlers/Events/PiggyBankEventHandler.php b/app/Handlers/Events/PiggyBankEventHandler.php index ee7ecedc9a..dc4edf6cbf 100644 --- a/app/Handlers/Events/PiggyBankEventHandler.php +++ b/app/Handlers/Events/PiggyBankEventHandler.php @@ -1,8 +1,8 @@ . */ +declare(strict_types=1); + namespace FireflyIII\Handlers\Events; use Carbon\Carbon; diff --git a/app/Http/Controllers/Budget/EditController.php b/app/Http/Controllers/Budget/EditController.php index e72561074e..66cb21d983 100644 --- a/app/Http/Controllers/Budget/EditController.php +++ b/app/Http/Controllers/Budget/EditController.php @@ -40,10 +40,8 @@ use Illuminate\View\View; */ class EditController extends Controller { - /** @var AttachmentHelperInterface Helper for attachments. */ - private $attachments; - /** @var BudgetRepositoryInterface The budget repository */ - private $repository; + private AttachmentHelperInterface $attachments; + private BudgetRepositoryInterface $repository; /** * EditController constructor. diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 90f7fb65bb..5dbc366ee1 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -176,12 +176,14 @@ class Kernel extends HttpKernel CreateFreshApiToken::class, ], + // full API authentication 'api' => [ EnsureFrontendRequestsAreStateful::class, 'auth:api,sanctum', 'bindings', ], - 'apiY' => [ + // do only bindings, no auth + 'api_basic' => [ 'bindings', ], ]; diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 341c605609..ba3d72b53d 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -29,8 +29,8 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\User; use Illuminate\Auth\AuthenticationException; use Illuminate\Contracts\Auth\Factory as Auth; -use Illuminate\Database\QueryException; use Illuminate\Http\Request; +use Log; /** * Class Authenticate @@ -47,7 +47,7 @@ class Authenticate /** * Create a new middleware instance. * - * @param Auth $auth + * @param Auth $auth * * @return void */ @@ -59,9 +59,9 @@ class Authenticate /** * Handle an incoming request. * - * @param Request $request - * @param Closure $next - * @param string[] ...$guards + * @param Request $request + * @param Closure $next + * @param string[] ...$guards * * @return mixed * @@ -78,8 +78,8 @@ class Authenticate /** * Determine if the user is logged in to any of the given guards. * - * @param mixed $request - * @param array $guards + * @param mixed $request + * @param array $guards * * @return mixed * @throws FireflyException @@ -87,21 +87,26 @@ class Authenticate */ protected function authenticate($request, array $guards) { - - if (empty($guards)) { - try { - // go for default guard: + Log::debug(sprintf('Now in %s', __METHOD__)); + if (0 === count($guards)) { + Log::debug('No guards present.'); + // go for default guard: + /** @noinspection PhpUndefinedMethodInspection */ + if ($this->auth->check()) { + Log::debug('Default guard says user is authenticated.'); + // do an extra check on user object. /** @noinspection PhpUndefinedMethodInspection */ - if ($this->auth->check()) { - - // do an extra check on user object. - /** @noinspection PhpUndefinedMethodInspection */ - /** @var User $user */ - $user = $this->auth->authenticate(); - if (1 === (int) $user->blocked) { - $message = (string) trans('firefly.block_account_logout'); + /** @var User $user */ + $user = $this->auth->authenticate(); + if (null === $user) { + Log::warning('User is null, throw exception?'); + } + if (null !== $user) { + Log::debug(get_class($user)); + if (1 === (int)$user->blocked) { + $message = (string)trans('firefly.block_account_logout'); if ('email_changed' === $user->blocked_code) { - $message = (string) trans('firefly.email_changed_logout'); + $message = (string)trans('firefly.email_changed_logout'); } app('session')->flash('logoutMessage', $message); /** @noinspection PhpUndefinedMethodInspection */ @@ -110,23 +115,16 @@ class Authenticate throw new AuthenticationException('Blocked account.', $guards); } } - } catch (QueryException $e) { - - throw new FireflyException( - sprintf( - 'It seems the database has not yet been initialized. Did you run the correct upgrade or installation commands? Error: %s', - $e->getMessage() - ), 0, $e - ); - } /** @noinspection PhpUndefinedMethodInspection */ return $this->auth->authenticate(); } - + Log::debug('Guard array is not empty.'); foreach ($guards as $guard) { + Log::debug(sprintf('Now in guard loop, guard is "%s"', $guard)); + $this->auth->guard($guard)->authenticate(); if ($this->auth->guard($guard)->check()) { /** @noinspection PhpVoidFunctionResultUsedInspection */ return $this->auth->shouldUse($guard); // @phpstan-ignore-line @@ -134,6 +132,5 @@ class Authenticate } throw new AuthenticationException('Unauthenticated.', $guards); - } } diff --git a/app/Models/Account.php b/app/Models/Account.php index 652ef27de7..5575ab5631 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -26,6 +26,7 @@ use Carbon\Carbon; use Eloquent; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -290,4 +291,16 @@ class Account extends Model { return $this->belongsTo(User::class); } + + /** + * Get the virtual balance + * + * @return Attribute + */ + protected function virtualBalance(): Attribute + { + return Attribute::make( + get: fn($value) => (string) $value, + ); + } } diff --git a/app/Models/AutoBudget.php b/app/Models/AutoBudget.php index b7ef5bcbe8..432471dc33 100644 --- a/app/Models/AutoBudget.php +++ b/app/Models/AutoBudget.php @@ -25,6 +25,7 @@ declare(strict_types=1); namespace FireflyIII\Models; use Eloquent; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; @@ -88,4 +89,14 @@ class AutoBudget extends Model { return $this->belongsTo(TransactionCurrency::class); } + + /** + * @return Attribute + */ + protected function amount(): Attribute + { + return Attribute::make( + get: fn($value) => (string) $value, + ); + } } diff --git a/app/Models/AvailableBudget.php b/app/Models/AvailableBudget.php index 8685e4ceb7..8d82bf9069 100644 --- a/app/Models/AvailableBudget.php +++ b/app/Models/AvailableBudget.php @@ -1,4 +1,5 @@ check()) { - $availableBudgetId = (int) $value; + $availableBudgetId = (int)$value; /** @var User $user */ $user = auth()->user(); /** @var AvailableBudget $availableBudget */ @@ -125,4 +127,14 @@ class AvailableBudget extends Model { return $this->belongsTo(User::class); } + + /** + * @return Attribute + */ + protected function amount(): Attribute + { + return Attribute::make( + get: fn ($value) => (string)$value, + ); + } } diff --git a/app/Models/CurrencyExchangeRate.php b/app/Models/CurrencyExchangeRate.php index 6929f4c470..bf0edb99d3 100644 --- a/app/Models/CurrencyExchangeRate.php +++ b/app/Models/CurrencyExchangeRate.php @@ -25,6 +25,7 @@ namespace FireflyIII\Models; use Eloquent; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Support\Carbon; @@ -99,4 +100,24 @@ class CurrencyExchangeRate extends Model { return $this->belongsTo(User::class); } + + /** + * @return Attribute + */ + protected function rate(): Attribute + { + return Attribute::make( + get: fn($value) => (string) $value, + ); + } + + /** + * @return Attribute + */ + protected function userRate(): Attribute + { + return Attribute::make( + get: fn($value) => (string) $value, + ); + } } diff --git a/app/Models/RecurrenceTransaction.php b/app/Models/RecurrenceTransaction.php index 9617e13a2b..28670826ea 100644 --- a/app/Models/RecurrenceTransaction.php +++ b/app/Models/RecurrenceTransaction.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Models; use Eloquent; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -164,4 +165,24 @@ class RecurrenceTransaction extends Model { return $this->belongsTo(TransactionType::class); } + + /** + * @return Attribute + */ + protected function amount(): Attribute + { + return Attribute::make( + get: fn($value) => (string) $value, + ); + } + + /** + * @return Attribute + */ + protected function foreignAmount(): Attribute + { + return Attribute::make( + get: fn($value) => (string) $value, + ); + } } diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index d27004ea11..cf1d311aa4 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -58,7 +58,7 @@ class RouteServiceProvider extends ServiceProvider ->group(base_path('routes/api.php')); Route::prefix('api/v1/cron') - ->middleware('apiY') + ->middleware('api_basic') ->namespace($this->namespace) ->group(base_path('routes/api-noauth.php')); diff --git a/app/Support/Authentication/RemoteUserGuard.php b/app/Support/Authentication/RemoteUserGuard.php index 825aadfa3c..b5b0235b62 100644 --- a/app/Support/Authentication/RemoteUserGuard.php +++ b/app/Support/Authentication/RemoteUserGuard.php @@ -30,6 +30,7 @@ use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\Guard; use Illuminate\Contracts\Auth\UserProvider; use Illuminate\Contracts\Foundation\Application; +use Illuminate\Http\Request; use Log; /** @@ -38,38 +39,52 @@ use Log; class RemoteUserGuard implements Guard { protected Application $application; - protected $provider; - protected $user; + protected $provider; + protected $user; /** * Create a new authentication guard. * - * @param UserProvider $provider - * @param Application $app + * @param UserProvider $provider + * @param Application $app */ // @phpstan-ignore-next-line public function __construct(UserProvider $provider, Application $app) // @phpstan-ignore-line { + /** @var Request $request */ + $request = $app->get('request'); + Log::debug(sprintf('Created RemoteUserGuard for "%s"', $request?->getRequestUri())); $this->application = $app; $this->provider = $provider; $this->user = null; } + /** + * @return bool + */ + public function viaRemember(): bool + { + Log::debug(sprintf('Now at %s', __METHOD__)); + return false; + } + /** * */ public function authenticate(): void { Log::debug(sprintf('Now at %s', __METHOD__)); - if (!is_null($this->user)) { - Log::debug('User is found.'); + if (null !== $this->user) { + Log::debug(sprintf('%s is found: #%d, "%s".', get_class($this->user), $this->user->id, $this->user->email)); return; } // Get the user identifier from $_SERVER or apache filtered headers $header = config('auth.guard_header', 'REMOTE_USER'); - $userID = request()->server($header) ?? apache_request_headers()[$header] ?? null; - + $userID = request()->server($header) ?? null; + if (function_exists('apache_request_headers')) { + $userID = request()->server($header) ?? apache_request_headers()[$header] ?? null; + } if (null === $userID) { Log::error(sprintf('No user in header "%s".', $header)); throw new FireflyException('The guard header was unexpectedly empty. See the logs.'); @@ -82,7 +97,7 @@ class RemoteUserGuard implements Guard $header = config('auth.guard_email'); if (null !== $header) { - $emailAddress = (string) (request()->server($header) ?? apache_request_headers()[$header] ?? null); + $emailAddress = (string)(request()->server($header) ?? apache_request_headers()[$header] ?? null); $preference = app('preferences')->getForUser($retrievedUser, 'remote_guard_alt_email'); if ('' !== $emailAddress && null === $preference && $emailAddress !== $userID) { @@ -103,6 +118,7 @@ class RemoteUserGuard implements Guard */ public function guest(): bool { + Log::debug(sprintf('Now at %s', __METHOD__)); return !$this->check(); } @@ -111,6 +127,7 @@ class RemoteUserGuard implements Guard */ public function check(): bool { + Log::debug(sprintf('Now at %s', __METHOD__)); return !is_null($this->user()); } @@ -119,6 +136,8 @@ class RemoteUserGuard implements Guard */ public function user(): ?User { + Log::debug(sprintf('Now at %s', __METHOD__)); + //$this->authenticate(); return $this->user; } @@ -127,6 +146,7 @@ class RemoteUserGuard implements Guard */ public function hasUser() { + Log::debug(sprintf('Now at %s', __METHOD__)); // TODO: Implement hasUser() method. } @@ -135,6 +155,7 @@ class RemoteUserGuard implements Guard */ public function id(): ?User { + Log::debug(sprintf('Now at %s', __METHOD__)); return $this->user; } @@ -143,6 +164,7 @@ class RemoteUserGuard implements Guard */ public function setUser(Authenticatable $user) { + Log::debug(sprintf('Now at %s', __METHOD__)); $this->user = $user; } @@ -151,6 +173,7 @@ class RemoteUserGuard implements Guard */ public function validate(array $credentials = []) { + Log::debug(sprintf('Now at %s', __METHOD__)); throw new FireflyException('Did not implement RemoteUserGuard::validate()'); } } diff --git a/changelog.md b/changelog.md index 2ea5cab1bc..48bd10e092 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,12 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## 5.7.18 - 2023-01-03 + +### Fixed +- [Issue 6775](https://github.com/firefly-iii/firefly-iii/issues/6775) OAuth authentication was broken for Authelia and other remote user providers. +- [Issue 6787](https://github.com/firefly-iii/firefly-iii/issues/6787) SQLite value conversion broke several functions + ## 5.7.17 - 2022-12-30 ### Fixed diff --git a/composer.json b/composer.json index 8047f4709c..c29ffc0664 100644 --- a/composer.json +++ b/composer.json @@ -100,7 +100,7 @@ "pragmarx/google2fa": "^8.0", "predis/predis": "^2.0", "psr/log": "<4", - "ramsey/uuid": "^4.6", + "ramsey/uuid": "^4.7", "rcrowe/twigbridge": "^0.14", "spatie/data-transfer-object": "^3.9", "spatie/laravel-ignition": "^1.5", diff --git a/composer.lock b/composer.lock index 634f884fe0..cdd8b066e0 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "886b33fcd05646c0a07a1e03ef929365", + "content-hash": "aa2338cf980bee39c1e9ab48ace47a04", "packages": [ { "name": "bacon/bacon-qr-code", @@ -807,31 +807,33 @@ }, { "name": "doctrine/lexer", - "version": "1.2.3", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.0", "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9.0", + "doctrine/coding-standard": "^9 || ^10", "phpstan/phpstan": "^1.3", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -863,7 +865,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" + "source": "https://github.com/doctrine/lexer/tree/2.1.0" }, "funding": [ { @@ -879,7 +881,7 @@ "type": "tidelift" } ], - "time": "2022-02-28T11:07:21+00:00" + "time": "2022-12-14T08:49:07+00:00" }, { "name": "dragonmantank/cron-expression", @@ -944,20 +946,20 @@ }, { "name": "egulias/email-validator", - "version": "3.2.1", + "version": "3.2.4", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715" + "reference": "5f35e41eba05fdfbabd95d72f83795c835fb7ed2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715", - "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/5f35e41eba05fdfbabd95d72f83795c835fb7ed2", + "reference": "5f35e41eba05fdfbabd95d72f83795c835fb7ed2", "shasum": "" }, "require": { - "doctrine/lexer": "^1.2", + "doctrine/lexer": "^1.2|^2", "php": ">=7.2", "symfony/polyfill-intl-idn": "^1.15" }, @@ -1000,7 +1002,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/3.2.1" + "source": "https://github.com/egulias/EmailValidator/tree/3.2.4" }, "funding": [ { @@ -1008,7 +1010,7 @@ "type": "github" } ], - "time": "2022-06-18T20:57:19+00:00" + "time": "2022-12-30T14:09:25+00:00" }, { "name": "facade/ignition-contracts", @@ -3415,16 +3417,16 @@ }, { "name": "nesbot/carbon", - "version": "2.64.0", + "version": "2.64.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "889546413c97de2d05063b8cb7b193c2531ea211" + "reference": "f2e59963f4c4f4fdfb9fcfd752e8d2e2b79a4e2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/889546413c97de2d05063b8cb7b193c2531ea211", - "reference": "889546413c97de2d05063b8cb7b193c2531ea211", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/f2e59963f4c4f4fdfb9fcfd752e8d2e2b79a4e2c", + "reference": "f2e59963f4c4f4fdfb9fcfd752e8d2e2b79a4e2c", "shasum": "" }, "require": { @@ -3513,7 +3515,7 @@ "type": "tidelift" } ], - "time": "2022-11-26T17:36:00+00:00" + "time": "2023-01-01T23:17:36+00:00" }, { "name": "nette/schema", @@ -5118,23 +5120,23 @@ }, { "name": "ramsey/uuid", - "version": "4.7.0", + "version": "4.7.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "5ed9ad582647bbc3864ef78db34bdc1afdcf9b49" + "reference": "a1acf96007170234a8399586a6e2ab8feba109d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/5ed9ad582647bbc3864ef78db34bdc1afdcf9b49", - "reference": "5ed9ad582647bbc3864ef78db34bdc1afdcf9b49", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/a1acf96007170234a8399586a6e2ab8feba109d1", + "reference": "a1acf96007170234a8399586a6e2ab8feba109d1", "shasum": "" }, "require": { "brick/math": "^0.8.8 || ^0.9 || ^0.10", "ext-json": "*", "php": "^8.0", - "ramsey/collection": "^1.2" + "ramsey/collection": "^1.2 || ^2.0" }, "replace": { "rhumsaa/uuid": "self.version" @@ -5194,7 +5196,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.0" + "source": "https://github.com/ramsey/uuid/tree/4.7.1" }, "funding": [ { @@ -5206,7 +5208,7 @@ "type": "tidelift" } ], - "time": "2022-12-19T22:30:49+00:00" + "time": "2022-12-31T22:20:34+00:00" }, { "name": "rcrowe/twigbridge", @@ -6451,16 +6453,16 @@ }, { "name": "symfony/http-kernel", - "version": "v6.0.17", + "version": "v6.0.18", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ce1a8d268d9bc32b806f3afa33e157b1df79214c" + "reference": "71b52f9e5740b124894b454244fa0db48bb15814" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ce1a8d268d9bc32b806f3afa33e157b1df79214c", - "reference": "ce1a8d268d9bc32b806f3afa33e157b1df79214c", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/71b52f9e5740b124894b454244fa0db48bb15814", + "reference": "71b52f9e5740b124894b454244fa0db48bb15814", "shasum": "" }, "require": { @@ -6540,7 +6542,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.0.17" + "source": "https://github.com/symfony/http-kernel/tree/v6.0.18" }, "funding": [ { @@ -6556,7 +6558,7 @@ "type": "tidelift" } ], - "time": "2022-12-28T14:55:51+00:00" + "time": "2022-12-29T18:58:12+00:00" }, { "name": "symfony/mailer", @@ -8821,30 +8823,30 @@ }, { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", "phpbench/phpbench": "^0.16 || ^1", "phpstan/phpstan": "^1.4", "phpstan/phpstan-phpunit": "^1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", "autoload": { @@ -8871,7 +8873,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { @@ -8887,7 +8889,7 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { "name": "fakerphp/faker", diff --git a/config/firefly.php b/config/firefly.php index ebee83dabf..d38be2908d 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -101,7 +101,7 @@ return [ 'webhooks' => false, 'handle_debts' => true, ], - 'version' => '5.7.17', + 'version' => '5.7.18', 'api_version' => '1.5.6', 'db_version' => 18, diff --git a/sonar-project.properties b/sonar-project.properties index 3794c80449..85d485d55b 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -12,6 +12,6 @@ sonar.organization=firefly-iii #sonar.sourceEncoding=UTF-8 -sonar.projectVersion=5.7.17 +sonar.projectVersion=5.7.18 sonar.sources=app,bootstrap,database,resources/assets,resources/views,routes,tests sonar.sourceEncoding=UTF-8 diff --git a/yarn.lock b/yarn.lock index 2ad5658d5a..4ddb25fb69 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1109,9 +1109,9 @@ integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.31": - version "4.17.31" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz#a1139efeab4e7323834bb0226e62ac019f474b2f" - integrity sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q== + version "4.17.32" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz#93dda387f5516af616d8d3f05f2c4c79d81e1b82" + integrity sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA== dependencies: "@types/node" "*" "@types/qs" "*" @@ -1246,9 +1246,9 @@ integrity sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug== "@types/ws@^8.5.1": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + version "8.5.4" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" + integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== dependencies: "@types/node" "*" @@ -2148,9 +2148,9 @@ cookie@0.5.0: integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== core-js-compat@^3.25.1: - version "3.27.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.27.0.tgz#e2c58a89df6432a5f36f3fa34097e9e83e709fb6" - integrity sha512-spN2H4E/wocMML7XtbKuqttHHM+zbF3bAdl9mT4/iyFaF33bowQGjxiWNWyvUJGH9F+hTgnhWziiLtwu3oC/Qg== + version "3.27.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.27.1.tgz#b5695eb25c602d72b1d30cbfba3cb7e5e4cf0a67" + integrity sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA== dependencies: browserslist "^4.21.4" @@ -2722,9 +2722,9 @@ fastest-levenshtein@^1.0.12: integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.14.0.tgz#107f69d7295b11e0fccc264e1fc6389f623731ce" - integrity sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg== + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" @@ -3328,16 +3328,16 @@ json-schema-traverse@^1.0.0: integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" json5@^2.1.2, json5@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.2.tgz#64471c5bdcc564c18f7c1d4df2e2297f2457c5ab" - integrity sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ== + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^6.0.1: version "6.1.0"