Auto commit for release 'develop' on 2024-10-14

This commit is contained in:
github-actions
2024-10-14 05:14:52 +02:00
parent 9463285ac9
commit e0c446dd13
26 changed files with 3613 additions and 3503 deletions

View File

@@ -143,7 +143,6 @@ class MFAHandler
} }
} }
public function sendBackupNoLeftMail(MFABackupNoLeft $event): void public function sendBackupNoLeftMail(MFABackupNoLeft $event): void
{ {
app('log')->debug(sprintf('Now in %s', __METHOD__)); app('log')->debug(sprintf('Now in %s', __METHOD__));

View File

@@ -223,7 +223,7 @@ class TwoFactorController extends Controller
private function addToMFAFailureCounter(): void private function addToMFAFailureCounter(): void
{ {
$preference = (int) app('preferences')->get('mfa_failure_count', 0)->data; $preference = (int) app('preferences')->get('mfa_failure_count', 0)->data;
$preference++; ++$preference;
Log::channel('audit')->info(sprintf('MFA failure count is set to %d.', $preference)); Log::channel('audit')->info(sprintf('MFA failure count is set to %d.', $preference));
app('preferences')->set('mfa_failure_count', $preference); app('preferences')->set('mfa_failure_count', $preference);
} }
@@ -232,6 +232,7 @@ class TwoFactorController extends Controller
{ {
$value = (int) app('preferences')->get('mfa_failure_count', 0)->data; $value = (int) app('preferences')->get('mfa_failure_count', 0)->data;
Log::channel('audit')->info(sprintf('MFA failure count is %d.', $value)); Log::channel('audit')->info(sprintf('MFA failure count is %d.', $value));
return $value; return $value;
} }

View File

@@ -23,7 +23,6 @@ declare(strict_types=1);
namespace FireflyIII\Http\Controllers\Profile; namespace FireflyIII\Http\Controllers\Profile;
use FireflyIII\Events\ActuallyLoggedIn;
use FireflyIII\Events\Security\DisabledMFA; use FireflyIII\Events\Security\DisabledMFA;
use FireflyIII\Events\Security\EnabledMFA; use FireflyIII\Events\Security\EnabledMFA;
use FireflyIII\Events\Security\MFANewBackupCodes; use FireflyIII\Events\Security\MFANewBackupCodes;
@@ -40,9 +39,6 @@ use Illuminate\Http\Request;
use Illuminate\Routing\Redirector; use Illuminate\Routing\Redirector;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\View\View; use Illuminate\View\View;
use PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException;
use PragmaRX\Google2FA\Exceptions\InvalidCharactersException;
use PragmaRX\Google2FA\Exceptions\SecretKeyTooShortException;
use PragmaRX\Recovery\Recovery; use PragmaRX\Recovery\Recovery;
/** /**
@@ -83,7 +79,7 @@ class MfaController extends Controller
} }
public function index(): Factory | RedirectResponse | View public function index(): Factory|RedirectResponse|View
{ {
if (!$this->internalAuth) { if (!$this->internalAuth) {
request()->session()->flash('error', trans('firefly.external_user_mgt_disabled')); request()->session()->flash('error', trans('firefly.external_user_mgt_disabled'));
@@ -94,10 +90,11 @@ class MfaController extends Controller
$subTitle = (string)trans('firefly.mfa_index_title'); $subTitle = (string)trans('firefly.mfa_index_title');
$subTitleIcon = 'fa-calculator'; $subTitleIcon = 'fa-calculator';
$enabledMFA = null !== auth()->user()->mfa_secret; $enabledMFA = null !== auth()->user()->mfa_secret;
return view('profile.mfa.index')->with(compact('subTitle', 'subTitleIcon','enabledMFA'));
return view('profile.mfa.index')->with(compact('subTitle', 'subTitleIcon', 'enabledMFA'));
} }
public function disableMFA(Request $request): Factory | RedirectResponse | View public function disableMFA(Request $request): Factory|RedirectResponse|View
{ {
if (!$this->internalAuth) { if (!$this->internalAuth) {
request()->session()->flash('error', trans('firefly.external_user_mgt_disabled')); request()->session()->flash('error', trans('firefly.external_user_mgt_disabled'));
@@ -105,20 +102,21 @@ class MfaController extends Controller
return redirect(route('profile.index')); return redirect(route('profile.index'));
} }
$enabledMFA = null !== auth()->user()->mfa_secret; $enabledMFA = null !== auth()->user()->mfa_secret;
if(false === $enabledMFA){ if (false === $enabledMFA) {
request()->session()->flash('info',trans('firefly.mfa_already_disabled')); request()->session()->flash('info', trans('firefly.mfa_already_disabled'));
return redirect(route('profile.index')); return redirect(route('profile.index'));
} }
$subTitle = (string)trans('firefly.mfa_index_title'); $subTitle = (string)trans('firefly.mfa_index_title');
$subTitleIcon = 'fa-calculator'; $subTitleIcon = 'fa-calculator';
return view('profile.mfa.disable-mfa')->with(compact('subTitle', 'subTitleIcon','enabledMFA')); return view('profile.mfa.disable-mfa')->with(compact('subTitle', 'subTitleIcon', 'enabledMFA'));
} }
/** /**
* Delete 2FA routine. * Delete 2FA routine.
*/ */
public function disableMFAPost(ExistingTokenFormRequest $request): Redirector | RedirectResponse public function disableMFAPost(ExistingTokenFormRequest $request): Redirector|RedirectResponse
{ {
if (!$this->internalAuth) { if (!$this->internalAuth) {
$request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); $request->session()->flash('error', trans('firefly.external_user_mgt_disabled'));
@@ -154,7 +152,7 @@ class MfaController extends Controller
/** /**
* Enable 2FA screen. * Enable 2FA screen.
*/ */
public function enableMFA(Request $request): Redirector | RedirectResponse | View public function enableMFA(Request $request): Redirector|RedirectResponse|View
{ {
if (!$this->internalAuth) { if (!$this->internalAuth) {
$request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); $request->session()->flash('error', trans('firefly.external_user_mgt_disabled'));
@@ -186,15 +184,17 @@ class MfaController extends Controller
} }
public function backupCodesPost(ExistingTokenFormRequest $request): Redirector | RedirectResponse | View { public function backupCodesPost(ExistingTokenFormRequest $request): Redirector|RedirectResponse|View
{
if (!$this->internalAuth) { if (!$this->internalAuth) {
$request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); $request->session()->flash('error', trans('firefly.external_user_mgt_disabled'));
return redirect(route('profile.index')); return redirect(route('profile.index'));
} }
$enabledMFA = null !== auth()->user()->mfa_secret; $enabledMFA = null !== auth()->user()->mfa_secret;
if(false === $enabledMFA){ if (false === $enabledMFA) {
request()->session()->flash('info',trans('firefly.mfa_not_enabled')); request()->session()->flash('info', trans('firefly.mfa_not_enabled'));
return redirect(route('profile.index')); return redirect(route('profile.index'));
} }
// generate recovery codes: // generate recovery codes:
@@ -203,7 +203,8 @@ class MfaController extends Controller
->setCount(8) // Generate 8 codes ->setCount(8) // Generate 8 codes
->setBlocks(2) // Every code must have 2 blocks ->setBlocks(2) // Every code must have 2 blocks
->setChars(6) // Each block must have 6 chars ->setChars(6) // Each block must have 6 chars
->toArray(); ->toArray()
;
$codes = implode("\r\n", $recoveryCodes); $codes = implode("\r\n", $recoveryCodes);
app('preferences')->set('mfa_recovery', $recoveryCodes); app('preferences')->set('mfa_recovery', $recoveryCodes);
@@ -217,10 +218,11 @@ class MfaController extends Controller
return view('profile.mfa.backup-codes-post')->with(compact('codes')); return view('profile.mfa.backup-codes-post')->with(compact('codes'));
} }
/** /**
* @throws FireflyException * @throws FireflyException
*/ */
public function backupCodes(Request $request): Factory | RedirectResponse | View public function backupCodes(Request $request): Factory|RedirectResponse|View
{ {
if (!$this->internalAuth) { if (!$this->internalAuth) {
$request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); $request->session()->flash('error', trans('firefly.external_user_mgt_disabled'));
@@ -228,8 +230,9 @@ class MfaController extends Controller
return redirect(route('profile.index')); return redirect(route('profile.index'));
} }
$enabledMFA = null !== auth()->user()->mfa_secret; $enabledMFA = null !== auth()->user()->mfa_secret;
if(false === $enabledMFA){ if (false === $enabledMFA) {
request()->session()->flash('info',trans('firefly.mfa_not_enabled')); request()->session()->flash('info', trans('firefly.mfa_not_enabled'));
return redirect(route('profile.index')); return redirect(route('profile.index'));
} }
@@ -258,6 +261,7 @@ class MfaController extends Controller
$password = $request->get('password'); $password = $request->get('password');
if (!auth()->validate(['email' => $user->email, 'password' => $password])) { if (!auth()->validate(['email' => $user->email, 'password' => $password])) {
session()->flash('error', 'Bad user pw, no MFA for you!'); session()->flash('error', 'Bad user pw, no MFA for you!');
return redirect(route('profile.mfa.index')); return redirect(route('profile.mfa.index'));
} }
@@ -295,7 +299,6 @@ class MfaController extends Controller
return redirect(route('profile.mfa.backup-codes')); return redirect(route('profile.mfa.backup-codes'));
} }
/** /**
* TODO duplicate code. * TODO duplicate code.
* *
@@ -336,5 +339,4 @@ class MfaController extends Controller
} }
app('preferences')->set('mfa_history', $newHistory); app('preferences')->set('mfa_history', $newHistory);
} }
} }

View File

@@ -30,7 +30,6 @@ use FireflyIII\Http\Middleware\IsDemoUser;
use FireflyIII\Http\Requests\DeleteAccountFormRequest; use FireflyIII\Http\Requests\DeleteAccountFormRequest;
use FireflyIII\Http\Requests\EmailFormRequest; use FireflyIII\Http\Requests\EmailFormRequest;
use FireflyIII\Http\Requests\ProfileFormRequest; use FireflyIII\Http\Requests\ProfileFormRequest;
use FireflyIII\Http\Requests\TokenFormRequest;
use FireflyIII\Models\Preference; use FireflyIII\Models\Preference;
use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\Support\Http\Controllers\CreateStuff; use FireflyIII\Support\Http\Controllers\CreateStuff;
@@ -45,10 +44,6 @@ use Illuminate\Routing\Redirector;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\View\View; use Illuminate\View\View;
use Laravel\Passport\ClientRepository; use Laravel\Passport\ClientRepository;
use PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException;
use PragmaRX\Google2FA\Exceptions\InvalidCharactersException;
use PragmaRX\Google2FA\Exceptions\SecretKeyTooShortException;
use PragmaRX\Recovery\Recovery;
/** /**
* Class ProfileController. * Class ProfileController.

View File

@@ -23,7 +23,6 @@ declare(strict_types=1);
namespace FireflyIII\Notifications\Security; namespace FireflyIII\Notifications\Security;
use FireflyIII\Models\Bill;
use FireflyIII\Support\Notifications\UrlValidator; use FireflyIII\Support\Notifications\UrlValidator;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;

View File

@@ -152,6 +152,7 @@ class Preferences
public function beginsWith(User $user, string $search): Collection public function beginsWith(User $user, string $search): Collection
{ {
$value = sprintf('%s%%', $search); $value = sprintf('%s%%', $search);
return Preference::where('user_id', $user->id)->whereLike('name', $value)->get(); return Preference::where('user_id', $user->id)->whereLike('name', $value)->get();
} }

View File

@@ -77,8 +77,9 @@ class FireflyValidator extends Validator
return (bool) \Google2FA::verifyKey((string) $secret, $value); return (bool) \Google2FA::verifyKey((string) $secret, $value);
} }
public function validateExistingMfaCode($attribute, $value): bool
{ public function validateExistingMfaCode($attribute, $value): bool
{
if (!is_string($value) || 6 !== strlen($value)) { if (!is_string($value) || 6 !== strlen($value)) {
return false; return false;
} }
@@ -91,7 +92,7 @@ public function validateExistingMfaCode($attribute, $value): bool
$secret = (string)$user->mfa_secret; $secret = (string)$user->mfa_secret;
return (bool) \Google2FA::verifyKey($secret, $value); return (bool) \Google2FA::verifyKey($secret, $value);
} }
/** /**
* @param mixed $attribute * @param mixed $attribute
@@ -202,7 +203,7 @@ public function validateExistingMfaCode($attribute, $value): bool
// take // take
$first = substr($value, 0, 4); $first = substr($value, 0, 4);
$last = substr($value, 4); $last = substr($value, 4);
$iban = $last . $first; $iban = $last.$first;
$iban = trim(str_replace($search, $replace, $iban)); $iban = trim(str_replace($search, $replace, $iban));
if ('' === $iban) { if ('' === $iban) {
return false; return false;
@@ -526,7 +527,7 @@ public function validateExistingMfaCode($attribute, $value): bool
private function validateByAccountTypeString(string $value, array $parameters, string $type): bool private function validateByAccountTypeString(string $value, array $parameters, string $type): bool
{ {
/** @var null|array $search */ /** @var null|array $search */
$search = \Config::get('firefly.accountTypeByIdentifier.' . $type); $search = \Config::get('firefly.accountTypeByIdentifier.'.$type);
if (null === $search) { if (null === $search) {
return false; return false;
@@ -539,7 +540,8 @@ public function validateExistingMfaCode($attribute, $value): bool
/** @var null|Account $result */ /** @var null|Account $result */
$result = auth()->user()->accounts()->whereIn('account_type_id', $accountTypeIds)->where('id', '!=', $ignore) $result = auth()->user()->accounts()->whereIn('account_type_id', $accountTypeIds)->where('id', '!=', $ignore)
->where('name', $value) ->where('name', $value)
->first(); ->first()
;
return null === $result; return null === $result;
} }
@@ -556,7 +558,8 @@ public function validateExistingMfaCode($attribute, $value): bool
/** @var null|Account $result */ /** @var null|Account $result */
$result = auth()->user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore) $result = auth()->user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore)
->where('name', $value) ->where('name', $value)
->first(); ->first()
;
return null === $result; return null === $result;
} }
@@ -574,7 +577,8 @@ public function validateExistingMfaCode($attribute, $value): bool
$entry = auth()->user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore) $entry = auth()->user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore)
->where('name', $value) ->where('name', $value)
->first(); ->first()
;
return null === $entry; return null === $entry;
} }
@@ -592,7 +596,8 @@ public function validateExistingMfaCode($attribute, $value): bool
$entry = auth()->user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore) $entry = auth()->user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore)
->where('name', $value) ->where('name', $value)
->first(); ->first()
;
return null === $entry; return null === $entry;
} }
@@ -620,7 +625,8 @@ public function validateExistingMfaCode($attribute, $value): bool
->whereNull('accounts.deleted_at') ->whereNull('accounts.deleted_at')
->where('accounts.user_id', auth()->user()->id) ->where('accounts.user_id', auth()->user()->id)
->where('account_meta.name', 'account_number') ->where('account_meta.name', 'account_number')
->where('account_meta.data', json_encode($value)); ->where('account_meta.data', json_encode($value))
;
if ($accountId > 0) { if ($accountId > 0) {
// exclude current account from check. // exclude current account from check.
@@ -727,7 +733,8 @@ public function validateExistingMfaCode($attribute, $value): bool
->where('response', $response) ->where('response', $response)
->where('delivery', $delivery) ->where('delivery', $delivery)
->where('id', '!=', $existingId) ->where('id', '!=', $existingId)
->where('url', $url)->count(); ->where('url', $url)->count()
;
} }
return false; return false;
@@ -763,7 +770,8 @@ public function validateExistingMfaCode($attribute, $value): bool
$result = \DB::table($table)->where('user_id', auth()->user()->id)->whereNull('deleted_at') $result = \DB::table($table)->where('user_id', auth()->user()->id)->whereNull('deleted_at')
->where('id', '!=', $exclude) ->where('id', '!=', $exclude)
->where($field, $value) ->where($field, $value)
->first([$field]); ->first([$field])
;
if (null === $result) { if (null === $result) {
return true; // not found, so true. return true; // not found, so true.
} }
@@ -785,7 +793,8 @@ public function validateExistingMfaCode($attribute, $value): bool
$query = \DB::table('object_groups') $query = \DB::table('object_groups')
->whereNull('object_groups.deleted_at') ->whereNull('object_groups.deleted_at')
->where('object_groups.user_id', auth()->user()->id) ->where('object_groups.user_id', auth()->user()->id)
->where('object_groups.title', $value); ->where('object_groups.title', $value)
;
if (null !== $exclude) { if (null !== $exclude) {
$query->where('object_groups.id', '!=', (int) $exclude); $query->where('object_groups.id', '!=', (int) $exclude);
} }
@@ -804,7 +813,8 @@ public function validateExistingMfaCode($attribute, $value): bool
{ {
$exclude = $parameters[0] ?? null; $exclude = $parameters[0] ?? null;
$query = \DB::table('piggy_banks')->whereNull('piggy_banks.deleted_at') $query = \DB::table('piggy_banks')->whereNull('piggy_banks.deleted_at')
->leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id')->where('accounts.user_id', auth()->user()->id); ->leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id')->where('accounts.user_id', auth()->user()->id)
;
if (null !== $exclude) { if (null !== $exclude) {
$query->where('piggy_banks.id', '!=', (int) $exclude); $query->where('piggy_banks.id', '!=', (int) $exclude);
} }

139
composer.lock generated
View File

@@ -755,16 +755,16 @@
}, },
{ {
"name": "dragonmantank/cron-expression", "name": "dragonmantank/cron-expression",
"version": "v3.3.3", "version": "v3.4.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/dragonmantank/cron-expression.git", "url": "https://github.com/dragonmantank/cron-expression.git",
"reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" "reference": "8c784d071debd117328803d86b2097615b457500"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500",
"reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", "reference": "8c784d071debd117328803d86b2097615b457500",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -777,10 +777,14 @@
"require-dev": { "require-dev": {
"phpstan/extension-installer": "^1.0", "phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^1.0", "phpstan/phpstan": "^1.0",
"phpstan/phpstan-webmozart-assert": "^1.0",
"phpunit/phpunit": "^7.0|^8.0|^9.0" "phpunit/phpunit": "^7.0|^8.0|^9.0"
}, },
"type": "library", "type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.x-dev"
}
},
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Cron\\": "src/Cron/" "Cron\\": "src/Cron/"
@@ -804,7 +808,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/dragonmantank/cron-expression/issues", "issues": "https://github.com/dragonmantank/cron-expression/issues",
"source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0"
}, },
"funding": [ "funding": [
{ {
@@ -812,7 +816,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2023-08-10T19:36:49+00:00" "time": "2024-10-09T13:47:03+00:00"
}, },
{ {
"name": "egulias/email-validator", "name": "egulias/email-validator",
@@ -1996,16 +2000,16 @@
}, },
{ {
"name": "laravel-json-api/eloquent", "name": "laravel-json-api/eloquent",
"version": "v4.2.0", "version": "v4.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel-json-api/eloquent.git", "url": "https://github.com/laravel-json-api/eloquent.git",
"reference": "35ccb634bd605697df3700660dedc0c292ac86ec" "reference": "05644f31eb086e4d640f15eac7d03752ffcde99f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel-json-api/eloquent/zipball/35ccb634bd605697df3700660dedc0c292ac86ec", "url": "https://api.github.com/repos/laravel-json-api/eloquent/zipball/05644f31eb086e4d640f15eac7d03752ffcde99f",
"reference": "35ccb634bd605697df3700660dedc0c292ac86ec", "reference": "05644f31eb086e4d640f15eac7d03752ffcde99f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2054,9 +2058,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/laravel-json-api/eloquent/issues", "issues": "https://github.com/laravel-json-api/eloquent/issues",
"source": "https://github.com/laravel-json-api/eloquent/tree/v4.2.0" "source": "https://github.com/laravel-json-api/eloquent/tree/v4.3.0"
}, },
"time": "2024-08-26T08:11:13+00:00" "time": "2024-10-13T12:53:07+00:00"
}, },
{ {
"name": "laravel-json-api/encoder-neomerx", "name": "laravel-json-api/encoder-neomerx",
@@ -2543,16 +2547,16 @@
}, },
{ {
"name": "laravel/framework", "name": "laravel/framework",
"version": "v11.26.0", "version": "v11.27.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/framework.git", "url": "https://github.com/laravel/framework.git",
"reference": "b8cb8998701d5b3cfe68539d3c3da1fc59ddd82b" "reference": "a51d1f2b771c542324a3d9b76a98b1bbc75c0ee9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/b8cb8998701d5b3cfe68539d3c3da1fc59ddd82b", "url": "https://api.github.com/repos/laravel/framework/zipball/a51d1f2b771c542324a3d9b76a98b1bbc75c0ee9",
"reference": "b8cb8998701d5b3cfe68539d3c3da1fc59ddd82b", "reference": "a51d1f2b771c542324a3d9b76a98b1bbc75c0ee9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2748,7 +2752,7 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2024-10-01T14:29:34+00:00" "time": "2024-10-09T04:17:35+00:00"
}, },
{ {
"name": "laravel/passport", "name": "laravel/passport",
@@ -3204,38 +3208,38 @@
}, },
{ {
"name": "lcobucci/jwt", "name": "lcobucci/jwt",
"version": "5.3.0", "version": "5.4.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/lcobucci/jwt.git", "url": "https://github.com/lcobucci/jwt.git",
"reference": "08071d8d2c7f4b00222cc4b1fb6aa46990a80f83" "reference": "aac4fd512681fd5cb4b77d2105ab7ec700c72051"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/lcobucci/jwt/zipball/08071d8d2c7f4b00222cc4b1fb6aa46990a80f83", "url": "https://api.github.com/repos/lcobucci/jwt/zipball/aac4fd512681fd5cb4b77d2105ab7ec700c72051",
"reference": "08071d8d2c7f4b00222cc4b1fb6aa46990a80f83", "reference": "aac4fd512681fd5cb4b77d2105ab7ec700c72051",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-openssl": "*", "ext-openssl": "*",
"ext-sodium": "*", "ext-sodium": "*",
"php": "~8.1.0 || ~8.2.0 || ~8.3.0", "php": "~8.2.0 || ~8.3.0 || ~8.4.0",
"psr/clock": "^1.0" "psr/clock": "^1.0"
}, },
"require-dev": { "require-dev": {
"infection/infection": "^0.27.0", "infection/infection": "^0.29",
"lcobucci/clock": "^3.0", "lcobucci/clock": "^3.2",
"lcobucci/coding-standard": "^11.0", "lcobucci/coding-standard": "^11.0",
"phpbench/phpbench": "^1.2.9", "phpbench/phpbench": "^1.2",
"phpstan/extension-installer": "^1.2", "phpstan/extension-installer": "^1.2",
"phpstan/phpstan": "^1.10.7", "phpstan/phpstan": "^1.10.7",
"phpstan/phpstan-deprecation-rules": "^1.1.3", "phpstan/phpstan-deprecation-rules": "^1.1.3",
"phpstan/phpstan-phpunit": "^1.3.10", "phpstan/phpstan-phpunit": "^1.3.10",
"phpstan/phpstan-strict-rules": "^1.5.0", "phpstan/phpstan-strict-rules": "^1.5.0",
"phpunit/phpunit": "^10.2.6" "phpunit/phpunit": "^11.1"
}, },
"suggest": { "suggest": {
"lcobucci/clock": ">= 3.0" "lcobucci/clock": ">= 3.2"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -3261,7 +3265,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/lcobucci/jwt/issues", "issues": "https://github.com/lcobucci/jwt/issues",
"source": "https://github.com/lcobucci/jwt/tree/5.3.0" "source": "https://github.com/lcobucci/jwt/tree/5.4.0"
}, },
"funding": [ "funding": [
{ {
@@ -3273,7 +3277,7 @@
"type": "patreon" "type": "patreon"
} }
], ],
"time": "2024-04-11T23:07:54+00:00" "time": "2024-10-08T22:06:45+00:00"
}, },
{ {
"name": "league/commonmark", "name": "league/commonmark",
@@ -3465,16 +3469,16 @@
}, },
{ {
"name": "league/csv", "name": "league/csv",
"version": "9.16.0", "version": "9.17.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/thephpleague/csv.git", "url": "https://github.com/thephpleague/csv.git",
"reference": "998280c6c34bd67d8125fdc8b45bae28d761b440" "reference": "8cab815fb11ec93aa2f7b8a57b3daa1f1a364011"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/thephpleague/csv/zipball/998280c6c34bd67d8125fdc8b45bae28d761b440", "url": "https://api.github.com/repos/thephpleague/csv/zipball/8cab815fb11ec93aa2f7b8a57b3daa1f1a364011",
"reference": "998280c6c34bd67d8125fdc8b45bae28d761b440", "reference": "8cab815fb11ec93aa2f7b8a57b3daa1f1a364011",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -3482,17 +3486,16 @@
"php": "^8.1.2" "php": "^8.1.2"
}, },
"require-dev": { "require-dev": {
"doctrine/collections": "^2.2.2",
"ext-dom": "*", "ext-dom": "*",
"ext-xdebug": "*", "ext-xdebug": "*",
"friendsofphp/php-cs-fixer": "^3.57.1", "friendsofphp/php-cs-fixer": "^3.64.0",
"phpbench/phpbench": "^1.2.15", "phpbench/phpbench": "^1.3.1",
"phpstan/phpstan": "^1.11.1", "phpstan/phpstan": "^1.12.5",
"phpstan/phpstan-deprecation-rules": "^1.2.0", "phpstan/phpstan-deprecation-rules": "^1.2.1",
"phpstan/phpstan-phpunit": "^1.4.0", "phpstan/phpstan-phpunit": "^1.4.0",
"phpstan/phpstan-strict-rules": "^1.6.0", "phpstan/phpstan-strict-rules": "^1.6.1",
"phpunit/phpunit": "^10.5.16 || ^11.1.3", "phpunit/phpunit": "^10.5.16 || ^11.4.0",
"symfony/var-dumper": "^6.4.6 || ^7.0.7" "symfony/var-dumper": "^6.4.8 || ^7.1.5"
}, },
"suggest": { "suggest": {
"ext-dom": "Required to use the XMLConverter and the HTMLConverter classes", "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes",
@@ -3510,7 +3513,7 @@
"src/functions_include.php" "src/functions_include.php"
], ],
"psr-4": { "psr-4": {
"League\\Csv\\": "src" "League\\Csv\\": "src/"
} }
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@@ -3549,7 +3552,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2024-05-24T11:04:54+00:00" "time": "2024-10-10T10:30:28+00:00"
}, },
{ {
"name": "league/event", "name": "league/event",
@@ -3607,16 +3610,16 @@
}, },
{ {
"name": "league/flysystem", "name": "league/flysystem",
"version": "3.29.0", "version": "3.29.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/thephpleague/flysystem.git", "url": "https://github.com/thephpleague/flysystem.git",
"reference": "0adc0d9a51852e170e0028a60bd271726626d3f0" "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/0adc0d9a51852e170e0028a60bd271726626d3f0", "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319",
"reference": "0adc0d9a51852e170e0028a60bd271726626d3f0", "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -3684,9 +3687,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/thephpleague/flysystem/issues", "issues": "https://github.com/thephpleague/flysystem/issues",
"source": "https://github.com/thephpleague/flysystem/tree/3.29.0" "source": "https://github.com/thephpleague/flysystem/tree/3.29.1"
}, },
"time": "2024-09-29T11:59:11+00:00" "time": "2024-10-08T08:58:34+00:00"
}, },
{ {
"name": "league/flysystem-local", "name": "league/flysystem-local",
@@ -11490,16 +11493,16 @@
}, },
{ {
"name": "nikic/php-parser", "name": "nikic/php-parser",
"version": "v5.3.0", "version": "v5.3.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nikic/PHP-Parser.git", "url": "https://github.com/nikic/PHP-Parser.git",
"reference": "3abf7425cd284141dc5d8d14a9ee444de3345d1a" "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3abf7425cd284141dc5d8d14a9ee444de3345d1a", "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b",
"reference": "3abf7425cd284141dc5d8d14a9ee444de3345d1a", "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -11542,9 +11545,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/nikic/PHP-Parser/issues", "issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v5.3.0" "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1"
}, },
"time": "2024-09-29T13:56:26+00:00" "time": "2024-10-08T18:51:32+00:00"
}, },
{ {
"name": "phar-io/manifest", "name": "phar-io/manifest",
@@ -11912,16 +11915,16 @@
}, },
{ {
"name": "phpstan/phpdoc-parser", "name": "phpstan/phpdoc-parser",
"version": "1.32.0", "version": "1.33.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git", "url": "https://github.com/phpstan/phpdoc-parser.git",
"reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4" "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6ca22b154efdd9e3c68c56f5d94670920a1c19a4", "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140",
"reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4", "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -11953,9 +11956,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types", "description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": { "support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues", "issues": "https://github.com/phpstan/phpdoc-parser/issues",
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.32.0" "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0"
}, },
"time": "2024-09-26T07:23:32+00:00" "time": "2024-10-13T11:25:22+00:00"
}, },
{ {
"name": "phpstan/phpstan", "name": "phpstan/phpstan",
@@ -12434,16 +12437,16 @@
}, },
{ {
"name": "phpunit/phpunit", "name": "phpunit/phpunit",
"version": "10.5.35", "version": "10.5.36",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git", "url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "7ac8b4e63f456046dcb4c9787da9382831a1874b" "reference": "aa0a8ce701ea7ee314b0dfaa8970dc94f3f8c870"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7ac8b4e63f456046dcb4c9787da9382831a1874b", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/aa0a8ce701ea7ee314b0dfaa8970dc94f3f8c870",
"reference": "7ac8b4e63f456046dcb4c9787da9382831a1874b", "reference": "aa0a8ce701ea7ee314b0dfaa8970dc94f3f8c870",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -12515,7 +12518,7 @@
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues", "issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy", "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
"source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.35" "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.36"
}, },
"funding": [ "funding": [
{ {
@@ -12531,7 +12534,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-19T10:52:21+00:00" "time": "2024-10-08T15:36:51+00:00"
}, },
{ {
"name": "sebastian/cli-parser", "name": "sebastian/cli-parser",

View File

@@ -110,7 +110,7 @@ return [
'running_balance_column' => env('USE_RUNNING_BALANCE', false), 'running_balance_column' => env('USE_RUNNING_BALANCE', false),
// see cer.php for exchange rates feature flag. // see cer.php for exchange rates feature flag.
], ],
'version' => 'develop/2024-10-07', 'version' => 'develop/2024-10-14',
'api_version' => '2.1.0', 'api_version' => '2.1.0',
'db_version' => 24, 'db_version' => 24,

782
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -844,7 +844,7 @@ Route::group(
Route::post('backup-codes', ['uses' => 'Profile\MfaController@backupCodesPost', 'as' => 'backup-codes.post']); Route::post('backup-codes', ['uses' => 'Profile\MfaController@backupCodesPost', 'as' => 'backup-codes.post']);
// enable MFA // enable MFA
// Route::get('2fa/code', ['uses' => 'Profile\MfaController@code', 'as' => 'code']); // Route::get('2fa/code', ['uses' => 'Profile\MfaController@code', 'as' => 'code']);
// disable MFA // disable MFA
Route::get('/disableMFA', ['uses' => 'Profile\MfaController@disableMFA', 'as' => 'disableMFA']); Route::get('/disableMFA', ['uses' => 'Profile\MfaController@disableMFA', 'as' => 'disableMFA']);
@@ -853,7 +853,7 @@ Route::group(
} }
); );
// Recurring Transactions Controller. // Recurring Transactions Controller.
Route::group( Route::group(
['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'recurring', 'as' => 'recurring.'], ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'recurring', 'as' => 'recurring.'],