From 734df18f4e66baba4e20fedb853536314072901d Mon Sep 17 00:00:00 2001 From: JC5 Date: Mon, 19 Jan 2026 20:23:36 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=96=20Auto=20commit=20for=20release=20?= =?UTF-8?q?'develop'=20on=202026-01-19?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Security/System/UnknownUserTriedLogin.php | 2 + .../Security/User/UserFailedLoginAttempt.php | 6 +- .../Security/User/UserHasDisabledMFA.php | 4 + .../Security/User/UserHasEnabledMFA.php | 5 +- .../User/UserHasFewMFABackupCodesLeft.php | 4 + .../User/UserHasGeneratedNewBackupCodes.php | 4 + .../User/UserHasNoMFABackupCodesLeft.php | 4 + .../Security/User/UserHasUsedBackupCode.php | 4 + .../Security/User/UserKeepsFailingMFA.php | 5 +- app/Handlers/Events/AdminEventHandler.php | 9 +- app/Handlers/Events/UserEventHandler.php | 37 ++-- app/Http/Controllers/Auth/LoginController.php | 31 +-- .../Controllers/Auth/TwoFactorController.php | 14 +- .../Controllers/Profile/MfaController.php | 46 ++-- .../System/NotifiesOwnerAboutUnknownUser.php | 6 +- .../User/NotifiesUserAboutDisabledMFA.php | 6 +- .../User/NotifiesUserAboutEnabledMFA.php | 5 +- .../User/NotifiesUserAboutFailedLogin.php | 6 +- .../User/NotifiesUserAboutFewCodesLeft.php | 7 +- .../User/NotifiesUserAboutNewBackupCodes.php | 6 +- .../User/NotifiesUserAboutNoCodesLeft.php | 6 +- .../NotifiesUserAboutRepeatedMFAFailures.php | 3 +- .../User/NotifiesUserAboutUsedBackupCode.php | 39 ++-- config/firefly.php | 2 +- package-lock.json | 206 +++++++++--------- resources/assets/v1/src/locales/id.json | 30 +-- 26 files changed, 271 insertions(+), 226 deletions(-) diff --git a/app/Events/Security/System/UnknownUserTriedLogin.php b/app/Events/Security/System/UnknownUserTriedLogin.php index 0706bf537b..23708842e6 100644 --- a/app/Events/Security/System/UnknownUserTriedLogin.php +++ b/app/Events/Security/System/UnknownUserTriedLogin.php @@ -1,4 +1,6 @@ user = $user; + return; } + throw new InvalidArgumentException('User must be an instance of User.'); } } - diff --git a/app/Events/Security/User/UserHasDisabledMFA.php b/app/Events/Security/User/UserHasDisabledMFA.php index c957679e03..f373edebab 100644 --- a/app/Events/Security/User/UserHasDisabledMFA.php +++ b/app/Events/Security/User/UserHasDisabledMFA.php @@ -1,4 +1,6 @@ user = $user; + return; } + throw new InvalidArgumentException('User must be an instance of User.'); } } diff --git a/app/Events/Security/User/UserHasEnabledMFA.php b/app/Events/Security/User/UserHasEnabledMFA.php index 6870978d7b..c30bb819b3 100644 --- a/app/Events/Security/User/UserHasEnabledMFA.php +++ b/app/Events/Security/User/UserHasEnabledMFA.php @@ -1,4 +1,6 @@ user = $user; + return; } + throw new InvalidArgumentException('User must be an instance of User.'); } } - diff --git a/app/Events/Security/User/UserHasFewMFABackupCodesLeft.php b/app/Events/Security/User/UserHasFewMFABackupCodesLeft.php index 39a67b6acd..454030b44c 100644 --- a/app/Events/Security/User/UserHasFewMFABackupCodesLeft.php +++ b/app/Events/Security/User/UserHasFewMFABackupCodesLeft.php @@ -1,4 +1,6 @@ user = $user; + return; } + throw new InvalidArgumentException('User must be an instance of User.'); } } diff --git a/app/Events/Security/User/UserHasGeneratedNewBackupCodes.php b/app/Events/Security/User/UserHasGeneratedNewBackupCodes.php index cebe68efde..21e01fd175 100644 --- a/app/Events/Security/User/UserHasGeneratedNewBackupCodes.php +++ b/app/Events/Security/User/UserHasGeneratedNewBackupCodes.php @@ -1,4 +1,6 @@ user = $user; + return; } + throw new InvalidArgumentException('User must be an instance of User.'); } } diff --git a/app/Events/Security/User/UserHasNoMFABackupCodesLeft.php b/app/Events/Security/User/UserHasNoMFABackupCodesLeft.php index 23ac6fbb89..793463bec4 100644 --- a/app/Events/Security/User/UserHasNoMFABackupCodesLeft.php +++ b/app/Events/Security/User/UserHasNoMFABackupCodesLeft.php @@ -1,4 +1,6 @@ user = $user; + return; } + throw new InvalidArgumentException('User must be an instance of User.'); } } diff --git a/app/Events/Security/User/UserHasUsedBackupCode.php b/app/Events/Security/User/UserHasUsedBackupCode.php index dfdad7ab0a..5b58732a7e 100644 --- a/app/Events/Security/User/UserHasUsedBackupCode.php +++ b/app/Events/Security/User/UserHasUsedBackupCode.php @@ -1,4 +1,6 @@ user = $user; + return; } + throw new InvalidArgumentException('User must be an instance of User.'); } } diff --git a/app/Events/Security/User/UserKeepsFailingMFA.php b/app/Events/Security/User/UserKeepsFailingMFA.php index 665bc83b04..fe0d918343 100644 --- a/app/Events/Security/User/UserKeepsFailingMFA.php +++ b/app/Events/Security/User/UserKeepsFailingMFA.php @@ -1,4 +1,6 @@ user = $user; + return; } + throw new InvalidArgumentException('User must be an instance of User.'); } } - diff --git a/app/Handlers/Events/AdminEventHandler.php b/app/Handlers/Events/AdminEventHandler.php index 3c6486b1fd..22f27d7216 100644 --- a/app/Handlers/Events/AdminEventHandler.php +++ b/app/Handlers/Events/AdminEventHandler.php @@ -68,7 +68,6 @@ class AdminEventHandler } } - /** * Send new version message to admin. */ @@ -117,10 +116,10 @@ class AdminEventHandler break; - // case 'ntfy': - // $class = OwnerTestNotificationNtfy::class; - // - // break; + // case 'ntfy': + // $class = OwnerTestNotificationNtfy::class; + // + // break; case 'pushover': $class = OwnerTestNotificationPushover::class; diff --git a/app/Handlers/Events/UserEventHandler.php b/app/Handlers/Events/UserEventHandler.php index 45482f916e..06a532196f 100644 --- a/app/Handlers/Events/UserEventHandler.php +++ b/app/Handlers/Events/UserEventHandler.php @@ -90,8 +90,8 @@ class UserEventHandler $repository = app(UserRepositoryInterface::class); /** @var User $user */ - $user = $event->user; - $count = $repository->count(); + $user = $event->user; + $count = $repository->count(); // only act when there is 1 user in the system and he has no admin rights. if (1 === $count && !$repository->hasRole($user, 'owner')) { @@ -123,13 +123,13 @@ class UserEventHandler */ public function createGroupMembership(RegisteredUser $event): void { - $user = $event->user; - $groupExists = true; - $groupTitle = $user->email; - $index = 1; + $user = $event->user; + $groupExists = true; + $groupTitle = $user->email; + $index = 1; /** @var null|UserGroup $group */ - $group = null; + $group = null; // create a new group. while ($groupExists) { // @phpstan-ignore-line @@ -139,7 +139,7 @@ class UserEventHandler break; } - $groupTitle = sprintf('%s-%d', $user->email, $index); + $groupTitle = sprintf('%s-%d', $user->email, $index); ++$index; if ($index > 99) { throw new FireflyException('Email address can no longer be used for registrations.'); @@ -147,7 +147,7 @@ class UserEventHandler } /** @var null|UserRole $role */ - $role = UserRole::where('title', UserRoleEnum::OWNER->value)->first(); + $role = UserRole::where('title', UserRoleEnum::OWNER->value)->first(); if (null === $role) { throw new FireflyException('The user role is unexpectedly empty. Did you run all migrations?'); } @@ -171,7 +171,7 @@ class UserEventHandler $repository = app(UserRepositoryInterface::class); /** @var User $user */ - $user = $event->user; + $user = $event->user; if ($repository->hasRole($user, 'demo')) { // set user back to English. Preferences::setForUser($user, 'language', 'en_US'); @@ -296,7 +296,6 @@ class UserEventHandler } } - /** * Send a new password to the user. */ @@ -386,10 +385,10 @@ class UserEventHandler break; - // case 'ntfy': - // $class = UserTestNotificationNtfy::class; - // - // break; + // case 'ntfy': + // $class = UserTestNotificationNtfy::class; + // + // break; case 'pushover': $class = UserTestNotificationPushover::class; @@ -426,7 +425,7 @@ class UserEventHandler public function storeUserIPAddress(ActuallyLoggedIn $event): void { Log::debug('Now in storeUserIPAddress'); - $user = $event->user; + $user = $event->user; if ($user->hasRole('demo')) { Log::debug('Do not log demo user logins'); @@ -443,8 +442,8 @@ class UserEventHandler return; } - $inArray = false; - $ip = request()->ip(); + $inArray = false; + $ip = request()->ip(); Log::debug(sprintf('User logging in from IP address %s', $ip)); // update array if in array @@ -472,7 +471,7 @@ class UserEventHandler $preference = array_values($preference); /** @var bool $send */ - $send = Preferences::getForUser($user, 'notification_user_login', true)->data; + $send = Preferences::getForUser($user, 'notification_user_login', true)->data; Preferences::setForUser($user, 'login_ip_history', $preference); if (false === $inArray && true === $send) { diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 6178c026c6..8380f87c39 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -70,7 +70,7 @@ class LoginController extends Controller protected string $redirectTo = RouteServiceProvider::HOME; private UserRepositoryInterface $repository; - private string $username = 'email'; + private string $username = 'email'; /** * Create a new controller instance. @@ -87,7 +87,7 @@ class LoginController extends Controller * * @throws ValidationException */ - public function login(Request $request): JsonResponse | RedirectResponse + public function login(Request $request): JsonResponse|RedirectResponse { $username = $request->get($this->username()); Log::channel('audit')->info(sprintf('User is trying to login using "%s"', $username)); @@ -105,7 +105,8 @@ class LoginController extends Controller $this->username => trans('auth.failed'), ] ) - ->onlyInput($this->username); + ->onlyInput($this->username) + ; } Log::debug('Login data is present.'); @@ -186,10 +187,10 @@ class LoginController extends Controller /** * Log the user out of the application. */ - public function logout(Request $request): Redirector | RedirectResponse | Response + public function logout(Request $request): Redirector|RedirectResponse|Response { - $authGuard = config('firefly.authentication_guard'); - $logoutUrl = config('firefly.custom_logout_url'); + $authGuard = config('firefly.authentication_guard'); + $logoutUrl = config('firefly.custom_logout_url'); if ('remote_user_guard' === $authGuard && '' !== $logoutUrl) { return redirect($logoutUrl); } @@ -223,13 +224,13 @@ class LoginController extends Controller * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ - public function showLoginForm(Request $request): Factory | Redirector | RedirectResponse | View + public function showLoginForm(Request $request): Factory|Redirector|RedirectResponse|View { Log::channel('audit')->info('Show login form (1.1).'); - $count = DB::table('users')->count(); - $guard = config('auth.defaults.guard'); - $title = (string)trans('firefly.login_page_title'); + $count = DB::table('users')->count(); + $guard = config('auth.defaults.guard'); + $title = (string)trans('firefly.login_page_title'); if (0 === $count && 'web' === $guard) { return redirect(route('register')); @@ -249,15 +250,15 @@ class LoginController extends Controller $allowReset = false; } - $email = $request->old('email'); - $remember = $request->old('remember'); + $email = $request->old('email'); + $remember = $request->old('remember'); - $storeInCookie = config('google2fa.store_in_cookie', false); + $storeInCookie = config('google2fa.store_in_cookie', false); if (false !== $storeInCookie) { $cookieName = config('google2fa.cookie_name', 'google2fa_token'); - Cookie::queue(Cookie::make($cookieName, 'invalid-' . Carbon::now()->getTimestamp())); + Cookie::queue(Cookie::make($cookieName, 'invalid-'.Carbon::now()->getTimestamp())); } - $usernameField = $this->username(); + $usernameField = $this->username(); return view('auth.login', ['allowRegistration' => $allowRegistration, 'email' => $email, 'remember' => $remember, 'allowReset' => $allowReset, 'title' => $title, 'usernameField' => $usernameField]); } diff --git a/app/Http/Controllers/Auth/TwoFactorController.php b/app/Http/Controllers/Auth/TwoFactorController.php index b699790ca6..53270d5d7d 100644 --- a/app/Http/Controllers/Auth/TwoFactorController.php +++ b/app/Http/Controllers/Auth/TwoFactorController.php @@ -24,8 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Auth; use Carbon\Carbon; -use FireflyIII\Events\Security\MFAManyFailedAttempts; -use FireflyIII\Events\Security\MFAUsedBackupCode; use FireflyIII\Events\Security\User\UserHasFewMFABackupCodesLeft; use FireflyIII\Events\Security\User\UserHasNoMFABackupCodesLeft; use FireflyIII\Events\Security\User\UserHasUsedBackupCode; @@ -51,7 +49,7 @@ class TwoFactorController extends Controller /** * What to do if 2FA lost? */ - public function lostTwoFactor(): Factory | View + public function lostTwoFactor(): Factory|View { /** @var User $user */ $user = auth()->user(); @@ -65,11 +63,11 @@ class TwoFactorController extends Controller * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ - public function submitMFA(Request $request): Redirector | RedirectResponse + public function submitMFA(Request $request): Redirector|RedirectResponse { /** @var array $mfaHistory */ - $mfaHistory = Preferences::get('mfa_history', [])->data; - $mfaCode = (string)$request->get('one_time_password'); + $mfaHistory = Preferences::get('mfa_history', [])->data; + $mfaCode = (string)$request->get('one_time_password'); // is in history? then refuse to use it. if ($this->inMFAHistory($mfaCode, $mfaHistory)) { @@ -84,7 +82,7 @@ class TwoFactorController extends Controller // if not OK, save error. if (!$authenticator->isAuthenticated()) { - $user = auth()->user(); + $user = auth()->user(); $this->addToMFAFailureCounter(); $counter = $this->getMFAFailureCounter(); if (3 === $counter || 10 === $counter) { @@ -222,7 +220,7 @@ class TwoFactorController extends Controller */ private function removeFromBackupCodes(string $mfaCode): void { - $list = Preferences::get('mfa_recovery', [])->data; + $list = Preferences::get('mfa_recovery', [])->data; if (!is_array($list)) { $list = []; } diff --git a/app/Http/Controllers/Profile/MfaController.php b/app/Http/Controllers/Profile/MfaController.php index 2d1e54eae6..269b3318ac 100644 --- a/app/Http/Controllers/Profile/MfaController.php +++ b/app/Http/Controllers/Profile/MfaController.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Profile; use Carbon\Carbon; -use FireflyIII\Events\Security\MFANewBackupCodes; use FireflyIII\Events\Security\User\UserHasDisabledMFA; use FireflyIII\Events\Security\User\UserHasEnabledMFA; use FireflyIII\Events\Security\User\UserHasGeneratedNewBackupCodes; @@ -86,7 +85,7 @@ class MfaController extends Controller } - public function backupCodes(Request $request): Factory | RedirectResponse | View + public function backupCodes(Request $request): Factory|RedirectResponse|View { if (!$this->internalAuth) { $request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); @@ -103,14 +102,14 @@ class MfaController extends Controller return view('profile.mfa.backup-codes-intro'); } - public function backupCodesPost(ExistingTokenFormRequest $request): Redirector | RedirectResponse | View + public function backupCodesPost(ExistingTokenFormRequest $request): Redirector|RedirectResponse|View { if (!$this->internalAuth) { $request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); return redirect(route('profile.index')); } - $enabledMFA = null !== auth()->user()->mfa_secret; + $enabledMFA = null !== auth()->user()->mfa_secret; if (false === $enabledMFA) { request()->session()->flash('info', trans('firefly.mfa_not_enabled')); @@ -119,17 +118,18 @@ class MfaController extends Controller // generate recovery codes: $recovery = app(Recovery::class); $recoveryCodes = $recovery->lowercase() - ->setCount(8) // Generate 8 codes - ->setBlocks(2) // Every code must have 2 blocks - ->setChars(6) // Each block must have 6 chars - ->toArray(); + ->setCount(8) // Generate 8 codes + ->setBlocks(2) // Every code must have 2 blocks + ->setChars(6) // Each block must have 6 chars + ->toArray() + ; $codes = implode("\r\n", $recoveryCodes); Preferences::set('mfa_recovery', $recoveryCodes); Preferences::mark(); // send user notification. - $user = auth()->user(); + $user = auth()->user(); Log::channel('audit')->info(sprintf('User "%s" has generated new backup codes.', $user->email)); event(new UserHasGeneratedNewBackupCodes($user)); @@ -137,14 +137,14 @@ class MfaController extends Controller } - public function disableMFA(Request $request): Factory | RedirectResponse | View + public function disableMFA(Request $request): Factory|RedirectResponse|View { if (!$this->internalAuth) { request()->session()->flash('error', trans('firefly.external_user_mgt_disabled')); return redirect(route('profile.index')); } - $enabledMFA = null !== auth()->user()->mfa_secret; + $enabledMFA = null !== auth()->user()->mfa_secret; if (false === $enabledMFA) { request()->session()->flash('info', trans('firefly.mfa_already_disabled')); @@ -159,7 +159,7 @@ class MfaController extends Controller /** * Delete 2FA routine. */ - public function disableMFAPost(ExistingTokenFormRequest $request): Redirector | RedirectResponse + public function disableMFAPost(ExistingTokenFormRequest $request): Redirector|RedirectResponse { if (!$this->internalAuth) { $request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); @@ -171,7 +171,7 @@ class MfaController extends Controller $repository = app(UserRepositoryInterface::class); /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); Preferences::delete('temp-mfa-secret'); Preferences::delete('temp-mfa-codes'); @@ -195,7 +195,7 @@ class MfaController extends Controller /** * Enable 2FA screen. */ - public function enableMFA(Request $request): Redirector | RedirectResponse | View + public function enableMFA(Request $request): Redirector|RedirectResponse|View { if (!$this->internalAuth) { $request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); @@ -215,9 +215,9 @@ class MfaController extends Controller return redirect(route('profile.index')); } - $domain = $this->getDomain(); - $secret = Google2FA::generateSecretKey(); - $image = Google2FA::getQRCodeInline($domain, auth()->user()->email, $secret); + $domain = $this->getDomain(); + $secret = Google2FA::generateSecretKey(); + $image = Google2FA::getQRCodeInline($domain, auth()->user()->email, $secret); Preferences::set('temp-mfa-secret', $secret); @@ -232,7 +232,7 @@ class MfaController extends Controller * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ - public function enableMFAPost(TokenFormRequest $request): Redirector | RedirectResponse + public function enableMFAPost(TokenFormRequest $request): Redirector|RedirectResponse { if (!$this->internalAuth) { $request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); @@ -241,10 +241,10 @@ class MfaController extends Controller } /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); // verify password. - $password = $request->get('password'); + $password = $request->get('password'); if (!auth()->validate(['email' => $user->email, 'password' => $password])) { session()->flash('error', 'Bad user pw, no MFA for you!'); @@ -257,7 +257,7 @@ class MfaController extends Controller if (is_array($secret)) { $secret = null; } - $secret = (string)$secret; + $secret = (string)$secret; $repository->setMFACode($user, $secret); @@ -267,7 +267,7 @@ class MfaController extends Controller Preferences::mark(); // also save the code so replay attack is prevented. - $mfaCode = $request->get('code'); + $mfaCode = $request->get('code'); $this->addToMFAHistory($mfaCode); // make sure MFA is logged out. @@ -327,7 +327,7 @@ class MfaController extends Controller Preferences::set('mfa_history', $newHistory); } - public function index(): Factory | RedirectResponse | View + public function index(): Factory|RedirectResponse|View { if (!$this->internalAuth) { request()->session()->flash('error', trans('firefly.external_user_mgt_disabled')); diff --git a/app/Listeners/Security/System/NotifiesOwnerAboutUnknownUser.php b/app/Listeners/Security/System/NotifiesOwnerAboutUnknownUser.php index af73941ac0..d1763e6c48 100644 --- a/app/Listeners/Security/System/NotifiesOwnerAboutUnknownUser.php +++ b/app/Listeners/Security/System/NotifiesOwnerAboutUnknownUser.php @@ -1,4 +1,6 @@ address)); @@ -50,5 +53,4 @@ class NotifiesOwnerAboutUnknownUser Log::error($e->getTraceAsString()); } } - } diff --git a/app/Listeners/Security/User/NotifiesUserAboutDisabledMFA.php b/app/Listeners/Security/User/NotifiesUserAboutDisabledMFA.php index 2d0d101e69..e8cca7580e 100644 --- a/app/Listeners/Security/User/NotifiesUserAboutDisabledMFA.php +++ b/app/Listeners/Security/User/NotifiesUserAboutDisabledMFA.php @@ -1,4 +1,6 @@ user; @@ -53,5 +56,4 @@ class NotifiesUserAboutDisabledMFA implements ShouldQueue Log::error($e->getTraceAsString()); } } - } diff --git a/app/Listeners/Security/User/NotifiesUserAboutEnabledMFA.php b/app/Listeners/Security/User/NotifiesUserAboutEnabledMFA.php index 8b5e9fe759..aeb3fa86d5 100644 --- a/app/Listeners/Security/User/NotifiesUserAboutEnabledMFA.php +++ b/app/Listeners/Security/User/NotifiesUserAboutEnabledMFA.php @@ -1,4 +1,6 @@ user; diff --git a/app/Listeners/Security/User/NotifiesUserAboutFailedLogin.php b/app/Listeners/Security/User/NotifiesUserAboutFailedLogin.php index b59e6299c3..4755e684ed 100644 --- a/app/Listeners/Security/User/NotifiesUserAboutFailedLogin.php +++ b/app/Listeners/Security/User/NotifiesUserAboutFailedLogin.php @@ -1,4 +1,6 @@ user, new \FireflyIII\Notifications\Security\UserFailedLoginAttempt($event->user)); } catch (Exception $e) { @@ -47,5 +50,4 @@ class NotifiesUserAboutFailedLogin Log::error($e->getTraceAsString()); } } - } diff --git a/app/Listeners/Security/User/NotifiesUserAboutFewCodesLeft.php b/app/Listeners/Security/User/NotifiesUserAboutFewCodesLeft.php index b3f4d989b1..9e91112346 100644 --- a/app/Listeners/Security/User/NotifiesUserAboutFewCodesLeft.php +++ b/app/Listeners/Security/User/NotifiesUserAboutFewCodesLeft.php @@ -1,4 +1,6 @@ user; @@ -54,5 +56,4 @@ class NotifiesUserAboutFewCodesLeft Log::error($e->getTraceAsString()); } } - } diff --git a/app/Listeners/Security/User/NotifiesUserAboutNewBackupCodes.php b/app/Listeners/Security/User/NotifiesUserAboutNewBackupCodes.php index 815ec8213e..52a8b3c630 100644 --- a/app/Listeners/Security/User/NotifiesUserAboutNewBackupCodes.php +++ b/app/Listeners/Security/User/NotifiesUserAboutNewBackupCodes.php @@ -1,4 +1,6 @@ user; @@ -52,5 +55,4 @@ class NotifiesUserAboutNewBackupCodes Log::error($e->getTraceAsString()); } } - } diff --git a/app/Listeners/Security/User/NotifiesUserAboutNoCodesLeft.php b/app/Listeners/Security/User/NotifiesUserAboutNoCodesLeft.php index 3cef29559d..9a1792e0a7 100644 --- a/app/Listeners/Security/User/NotifiesUserAboutNoCodesLeft.php +++ b/app/Listeners/Security/User/NotifiesUserAboutNoCodesLeft.php @@ -1,4 +1,6 @@ user; @@ -52,5 +55,4 @@ class NotifiesUserAboutNoCodesLeft Log::error($e->getTraceAsString()); } } - } diff --git a/app/Listeners/Security/User/NotifiesUserAboutRepeatedMFAFailures.php b/app/Listeners/Security/User/NotifiesUserAboutRepeatedMFAFailures.php index 4d495d6fe2..54fe23569c 100644 --- a/app/Listeners/Security/User/NotifiesUserAboutRepeatedMFAFailures.php +++ b/app/Listeners/Security/User/NotifiesUserAboutRepeatedMFAFailures.php @@ -1,4 +1,6 @@ getTraceAsString()); } } - } diff --git a/app/Listeners/Security/User/NotifiesUserAboutUsedBackupCode.php b/app/Listeners/Security/User/NotifiesUserAboutUsedBackupCode.php index 6b2f1e001b..f1faa6a40e 100644 --- a/app/Listeners/Security/User/NotifiesUserAboutUsedBackupCode.php +++ b/app/Listeners/Security/User/NotifiesUserAboutUsedBackupCode.php @@ -1,4 +1,6 @@ user; + $user = $event->user; - try { - Notification::send($user, new MFAUsedBackupCodeNotification($user)); - } catch (Exception $e) { - $message = $e->getMessage(); - if (str_contains($message, 'Bcc')) { - Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + try { + Notification::send($user, new MFAUsedBackupCodeNotification($user)); + } catch (Exception $e) { + $message = $e->getMessage(); + if (str_contains($message, 'Bcc')) { + Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); - return; + return; + } + if (str_contains($message, 'RFC 2822')) { + Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + + return; + } + Log::error($e->getMessage()); + Log::error($e->getTraceAsString()); } - if (str_contains($message, 'RFC 2822')) { - Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); - - return; - } - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); } } -} diff --git a/config/firefly.php b/config/firefly.php index 29ef9ec1ce..c5b1015df0 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -79,7 +79,7 @@ return [ // see cer.php for exchange rates feature flag. ], 'version' => 'develop/2026-01-19', - 'build_time' => 1768805645, + 'build_time' => 1768850512, 'api_version' => '2.1.0', // field is no longer used. 'db_version' => 28, // field is no longer used. diff --git a/package-lock.json b/package-lock.json index bffeed1879..47a8b39a64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2606,9 +2606,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", - "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.2.tgz", + "integrity": "sha512-21J6xzayjy3O6NdnlO6aXi/urvSRjm6nCI6+nF6ra2YofKruGixN9kfT+dt55HVNwfDmpDHJcaS3JuP/boNnlA==", "cpu": [ "arm" ], @@ -2620,9 +2620,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", - "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.2.tgz", + "integrity": "sha512-eXBg7ibkNUZ+sTwbFiDKou0BAckeV6kIigK7y5Ko4mB/5A1KLhuzEKovsmfvsL8mQorkoincMFGnQuIT92SKqA==", "cpu": [ "arm64" ], @@ -2634,9 +2634,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", - "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.2.tgz", + "integrity": "sha512-UCbaTklREjrc5U47ypLulAgg4njaqfOVLU18VrCrI+6E5MQjuG0lSWaqLlAJwsD7NpFV249XgB0Bi37Zh5Sz4g==", "cpu": [ "arm64" ], @@ -2648,9 +2648,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", - "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.2.tgz", + "integrity": "sha512-dP67MA0cCMHFT2g5XyjtpVOtp7y4UyUxN3dhLdt11at5cPKnSm4lY+EhwNvDXIMzAMIo2KU+mc9wxaAQJTn7sQ==", "cpu": [ "x64" ], @@ -2662,9 +2662,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", - "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.2.tgz", + "integrity": "sha512-WDUPLUwfYV9G1yxNRJdXcvISW15mpvod1Wv3ok+Ws93w1HjIVmCIFxsG2DquO+3usMNCpJQ0wqO+3GhFdl6Fow==", "cpu": [ "arm64" ], @@ -2676,9 +2676,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", - "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.2.tgz", + "integrity": "sha512-Ng95wtHVEulRwn7R0tMrlUuiLVL/HXA8Lt/MYVpy88+s5ikpntzZba1qEulTuPnPIZuOPcW9wNEiqvZxZmgmqQ==", "cpu": [ "x64" ], @@ -2690,9 +2690,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", - "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.2.tgz", + "integrity": "sha512-AEXMESUDWWGqD6LwO/HkqCZgUE1VCJ1OhbvYGsfqX2Y6w5quSXuyoy/Fg3nRqiwro+cJYFxiw5v4kB2ZDLhxrw==", "cpu": [ "arm" ], @@ -2704,9 +2704,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", - "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.2.tgz", + "integrity": "sha512-ZV7EljjBDwBBBSv570VWj0hiNTdHt9uGznDtznBB4Caj3ch5rgD4I2K1GQrtbvJ/QiB+663lLgOdcADMNVC29Q==", "cpu": [ "arm" ], @@ -2718,9 +2718,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", - "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.2.tgz", + "integrity": "sha512-uvjwc8NtQVPAJtq4Tt7Q49FOodjfbf6NpqXyW/rjXoV+iZ3EJAHLNAnKT5UJBc6ffQVgmXTUL2ifYiLABlGFqA==", "cpu": [ "arm64" ], @@ -2732,9 +2732,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", - "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.2.tgz", + "integrity": "sha512-s3KoWVNnye9mm/2WpOZ3JeUiediUVw6AvY/H7jNA6qgKA2V2aM25lMkVarTDfiicn/DLq3O0a81jncXszoyCFA==", "cpu": [ "arm64" ], @@ -2746,9 +2746,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", - "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.2.tgz", + "integrity": "sha512-gi21faacK+J8aVSyAUptML9VQN26JRxe484IbF+h3hpG+sNVoMXPduhREz2CcYr5my0NE3MjVvQ5bMKX71pfVA==", "cpu": [ "loong64" ], @@ -2760,9 +2760,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", - "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.2.tgz", + "integrity": "sha512-qSlWiXnVaS/ceqXNfnoFZh4IiCA0EwvCivivTGbEu1qv2o+WTHpn1zNmCTAoOG5QaVr2/yhCoLScQtc/7RxshA==", "cpu": [ "loong64" ], @@ -2774,9 +2774,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", - "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.2.tgz", + "integrity": "sha512-rPyuLFNoF1B0+wolH277E780NUKf+KoEDb3OyoLbAO18BbeKi++YN6gC/zuJoPPDlQRL3fIxHxCxVEWiem2yXw==", "cpu": [ "ppc64" ], @@ -2788,9 +2788,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", - "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.2.tgz", + "integrity": "sha512-g+0ZLMook31iWV4PvqKU0i9E78gaZgYpSrYPed/4Bu+nGTgfOPtfs1h11tSSRPXSjC5EzLTjV/1A7L2Vr8pJoQ==", "cpu": [ "ppc64" ], @@ -2802,9 +2802,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", - "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.2.tgz", + "integrity": "sha512-i+sGeRGsjKZcQRh3BRfpLsM3LX3bi4AoEVqmGDyc50L6KfYsN45wVCSz70iQMwPWr3E5opSiLOwsC9WB4/1pqg==", "cpu": [ "riscv64" ], @@ -2816,9 +2816,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", - "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.2.tgz", + "integrity": "sha512-C1vLcKc4MfFV6I0aWsC7B2Y9QcsiEcvKkfxprwkPfLaN8hQf0/fKHwSF2lcYzA9g4imqnhic729VB9Fo70HO3Q==", "cpu": [ "riscv64" ], @@ -2830,9 +2830,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", - "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.2.tgz", + "integrity": "sha512-68gHUK/howpQjh7g7hlD9DvTTt4sNLp1Bb+Yzw2Ki0xvscm2cOdCLZNJNhd2jW8lsTPrHAHuF751BygifW4bkQ==", "cpu": [ "s390x" ], @@ -2844,9 +2844,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", - "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.2.tgz", + "integrity": "sha512-1e30XAuaBP1MAizaOBApsgeGZge2/Byd6wV4a8oa6jPdHELbRHBiw7wvo4dp7Ie2PE8TZT4pj9RLGZv9N4qwlw==", "cpu": [ "x64" ], @@ -2858,9 +2858,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", - "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.2.tgz", + "integrity": "sha512-4BJucJBGbuGnH6q7kpPqGJGzZnYrpAzRd60HQSt3OpX/6/YVgSsJnNzR8Ot74io50SeVT4CtCWe/RYIAymFPwA==", "cpu": [ "x64" ], @@ -2872,9 +2872,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", - "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.2.tgz", + "integrity": "sha512-cT2MmXySMo58ENv8p6/O6wI/h/gLnD3D6JoajwXFZH6X9jz4hARqUhWpGuQhOgLNXscfZYRQMJvZDtWNzMAIDw==", "cpu": [ "x64" ], @@ -2886,9 +2886,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", - "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.2.tgz", + "integrity": "sha512-sZnyUgGkuzIXaK3jNMPmUIyJrxu/PjmATQrocpGA1WbCPX8H5tfGgRSuYtqBYAvLuIGp8SPRb1O4d1Fkb5fXaQ==", "cpu": [ "arm64" ], @@ -2900,9 +2900,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", - "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.2.tgz", + "integrity": "sha512-sDpFbenhmWjNcEbBcoTV0PWvW5rPJFvu+P7XoTY0YLGRupgLbFY0XPfwIbJOObzO7QgkRDANh65RjhPmgSaAjQ==", "cpu": [ "arm64" ], @@ -2914,9 +2914,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", - "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.2.tgz", + "integrity": "sha512-GvJ03TqqaweWCigtKQVBErw2bEhu1tyfNQbarwr94wCGnczA9HF8wqEe3U/Lfu6EdeNP0p6R+APeHVwEqVxpUQ==", "cpu": [ "ia32" ], @@ -2928,9 +2928,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", - "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.2.tgz", + "integrity": "sha512-KvXsBvp13oZz9JGe5NYS7FNizLe99Ny+W8ETsuCyjXiKdiGrcz2/J/N8qxZ/RSwivqjQguug07NLHqrIHrqfYw==", "cpu": [ "x64" ], @@ -2942,9 +2942,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", - "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.2.tgz", + "integrity": "sha512-xNO+fksQhsAckRtDSPWaMeT1uIM+JrDRXlerpnWNXhn1TdB3YZ6uKBMBTKP0eX9XtYEP978hHk1f8332i2AW8Q==", "cpu": [ "x64" ], @@ -10089,9 +10089,9 @@ } }, "node_modules/rollup": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", - "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.2.tgz", + "integrity": "sha512-PggGy4dhwx5qaW+CKBilA/98Ql9keyfnb7lh4SR6shQ91QQQi1ORJ1v4UinkdP2i87OBs9AQFooQylcrrRfIcg==", "dev": true, "license": "MIT", "dependencies": { @@ -10105,31 +10105,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.55.1", - "@rollup/rollup-android-arm64": "4.55.1", - "@rollup/rollup-darwin-arm64": "4.55.1", - "@rollup/rollup-darwin-x64": "4.55.1", - "@rollup/rollup-freebsd-arm64": "4.55.1", - "@rollup/rollup-freebsd-x64": "4.55.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", - "@rollup/rollup-linux-arm-musleabihf": "4.55.1", - "@rollup/rollup-linux-arm64-gnu": "4.55.1", - "@rollup/rollup-linux-arm64-musl": "4.55.1", - "@rollup/rollup-linux-loong64-gnu": "4.55.1", - "@rollup/rollup-linux-loong64-musl": "4.55.1", - "@rollup/rollup-linux-ppc64-gnu": "4.55.1", - "@rollup/rollup-linux-ppc64-musl": "4.55.1", - "@rollup/rollup-linux-riscv64-gnu": "4.55.1", - "@rollup/rollup-linux-riscv64-musl": "4.55.1", - "@rollup/rollup-linux-s390x-gnu": "4.55.1", - "@rollup/rollup-linux-x64-gnu": "4.55.1", - "@rollup/rollup-linux-x64-musl": "4.55.1", - "@rollup/rollup-openbsd-x64": "4.55.1", - "@rollup/rollup-openharmony-arm64": "4.55.1", - "@rollup/rollup-win32-arm64-msvc": "4.55.1", - "@rollup/rollup-win32-ia32-msvc": "4.55.1", - "@rollup/rollup-win32-x64-gnu": "4.55.1", - "@rollup/rollup-win32-x64-msvc": "4.55.1", + "@rollup/rollup-android-arm-eabi": "4.55.2", + "@rollup/rollup-android-arm64": "4.55.2", + "@rollup/rollup-darwin-arm64": "4.55.2", + "@rollup/rollup-darwin-x64": "4.55.2", + "@rollup/rollup-freebsd-arm64": "4.55.2", + "@rollup/rollup-freebsd-x64": "4.55.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.55.2", + "@rollup/rollup-linux-arm-musleabihf": "4.55.2", + "@rollup/rollup-linux-arm64-gnu": "4.55.2", + "@rollup/rollup-linux-arm64-musl": "4.55.2", + "@rollup/rollup-linux-loong64-gnu": "4.55.2", + "@rollup/rollup-linux-loong64-musl": "4.55.2", + "@rollup/rollup-linux-ppc64-gnu": "4.55.2", + "@rollup/rollup-linux-ppc64-musl": "4.55.2", + "@rollup/rollup-linux-riscv64-gnu": "4.55.2", + "@rollup/rollup-linux-riscv64-musl": "4.55.2", + "@rollup/rollup-linux-s390x-gnu": "4.55.2", + "@rollup/rollup-linux-x64-gnu": "4.55.2", + "@rollup/rollup-linux-x64-musl": "4.55.2", + "@rollup/rollup-openbsd-x64": "4.55.2", + "@rollup/rollup-openharmony-arm64": "4.55.2", + "@rollup/rollup-win32-arm64-msvc": "4.55.2", + "@rollup/rollup-win32-ia32-msvc": "4.55.2", + "@rollup/rollup-win32-x64-gnu": "4.55.2", + "@rollup/rollup-win32-x64-msvc": "4.55.2", "fsevents": "~2.3.2" } }, diff --git a/resources/assets/v1/src/locales/id.json b/resources/assets/v1/src/locales/id.json index 01b947f734..287dbbbf5f 100644 --- a/resources/assets/v1/src/locales/id.json +++ b/resources/assets/v1/src/locales/id.json @@ -107,25 +107,25 @@ "multi_account_warning_withdrawal": "Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.", "multi_account_warning_deposit": "Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.", "multi_account_warning_transfer": "Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.", - "webhook_trigger_ANY": "After any event", - "webhook_trigger_STORE_TRANSACTION": "After transaction creation", - "webhook_trigger_UPDATE_TRANSACTION": "After transaction update", - "webhook_trigger_DESTROY_TRANSACTION": "After transaction delete", - "webhook_trigger_STORE_BUDGET": "After budget creation", - "webhook_trigger_UPDATE_BUDGET": "After budget update", - "webhook_trigger_DESTROY_BUDGET": "After budget delete", - "webhook_trigger_STORE_UPDATE_BUDGET_LIMIT": "After budgeted amount change", - "webhook_response_TRANSACTIONS": "Transaction details", - "webhook_response_RELEVANT": "Relevant details", - "webhook_response_ACCOUNTS": "Account details", - "webhook_response_NONE": "No details", + "webhook_trigger_ANY": "Setelah setiap peristiwa", + "webhook_trigger_STORE_TRANSACTION": "Setelah pembuatan transaksi", + "webhook_trigger_UPDATE_TRANSACTION": "Setelah pembaruan transaksi", + "webhook_trigger_DESTROY_TRANSACTION": "Setelah penghapusan transaksi", + "webhook_trigger_STORE_BUDGET": "Setelah pembuatan anggaran", + "webhook_trigger_UPDATE_BUDGET": "Setelah pembaruan anggaran", + "webhook_trigger_DESTROY_BUDGET": "Setelah penghapusan anggaran", + "webhook_trigger_STORE_UPDATE_BUDGET_LIMIT": "Setelah perubahan jumlah anggaran", + "webhook_response_TRANSACTIONS": "Detail transaksi", + "webhook_response_RELEVANT": "Detail relevan", + "webhook_response_ACCOUNTS": "Detail rekening", + "webhook_response_NONE": "Tidak ada detail", "webhook_delivery_JSON": "JSON", "actions": "Tindakan", "meta_data": "Data meta", "webhook_messages": "Webhook message", "inactive": "Tidak-aktif", - "no_webhook_messages": "There are no webhook messages", - "inspect": "Inspect", + "no_webhook_messages": "Tidak ada pesan webhook.", + "inspect": "Periksa", "create_new_webhook": "Create new webhook", "webhooks": "Webhooks", "webhook_trigger_form_help": "Indicate on what event the webhook will trigger", @@ -134,7 +134,7 @@ "webhook_active_form_help": "The webhook must be active or it won't be called.", "edit_webhook_js": "Edit webhook \"{title}\"", "webhook_was_triggered": "The webhook was triggered on the indicated transaction. Please wait for results to appear.", - "view_message": "View message", + "view_message": "Lihat pesan", "view_attempts": "Lihat upaya yang gagal", "message_content_title": "Webhook message content", "message_content_help": "This is the content of the message that was sent (or tried) using this webhook.",