* security: 2FA concurrent recovery code reuse
* Update AppAuthentication.php
* Merge commit from fork
* security: also serialise recovery code verification on SQLite
The `lockForUpdate()` row lock does not exist on SQLite — Laravel's SQLite
query grammar compiles `compileLockForUpdate()` to an empty string — so the
transaction provides no mutual exclusion there. Two concurrent requests still
both read the full recovery code set before either commits, and the losing
write resurrects the just-consumed code.
Verified against a true `pcntl_fork()` race on v5.6.4: the transaction-only
fix is bypassed 6/6 runs on SQLite while holding 7/7 on MySQL.
Wrap the transaction in a per-user `Cache::lock()` so verification is
serialised regardless of database driver. The DB transaction and row lock are
kept for drivers that support them. Re-verified: combined fix holds 6/6 on
SQLite and 5/5 on MySQL.
* cleanup
---------
Co-authored-by: StarPlatinu <thanhnolove21@gmail.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
---------
Co-authored-by: ThanhVu <72287279+StarPlatinu@users.noreply.github.com>
Co-authored-by: StarPlatinu <thanhnolove21@gmail.com>
* screenshots
* fix cut off sidebar
* Screenshots
* Screenshots
* retake
* fix loading data issue
* retake
* screenshots
* Update custom-toolbar.jpg
* retake
* ss
* retake
* ss
* ss
* ss
* ss
* ss
* ss
* ss
* ss
* Update dashboard.jpg
* ss
* Update openable.jpg
* ss
* ss
* ss
* Update database.sqlite
* Update database.sqlite
* ss
* ss
* ss
* ss
* ss
* ss
* clean up
* cs