Bubka / 2FAuth

A Web app to manage your Two-Factor Authentication (2FA) accounts and generate their security codes
https://docs.2fauth.app/
GNU Affero General Public License v3.0
1.81k stars 115 forks source link

Cant Google Authenticator - Transfer/Export accounts #355

Open kamalmjt opened 2 days ago

kamalmjt commented 2 days ago

Version

v5.2.0

Details & Steps to reproduce

Export and import more than 15 2FA Google Accounts

Expectation

Import accounts into 2FAuth

Error & Logs

[2024-06-30 08:09:20] local.INFO: User ID #1 changed its preference 'useBasicQrcodeReader' to true
[2024-06-30 08:09:26] local.INFO: User ID #1 changed its preference 'theme' to 'dark'
[2024-06-30 08:09:45] local.ERROR: Cannot use object of type Zxing\Qrcode\Decoder\ECBlocks as array {"userId":1,"exception":"[object] (Error(code: 0): Cannot use object of type Zxing\\Qrcode\\Decoder\\ECBlocks as array at /www/2fa/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrco
de/Decoder/Version.php:90)
[stacktrace]
#0 /www/2fa/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/DataBlock.php(58): Zxing\\Qrcode\\Decoder\\Version->getECBlocksForLevel()
#1 /www/2fa/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/Decoder.php(158): Zxing\\Qrcode\\Decoder\\DataBlock::getDataBlocks()
#2 /www/2fa/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/Decoder.php(50): Zxing\\Qrcode\\Decoder\\Decoder->decodeParser()
#3 /www/2fa/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/Decoder.php(102): Zxing\\Qrcode\\Decoder\\Decoder->decode()
#4 /www/2fa/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/Decoder.php(48): Zxing\\Qrcode\\Decoder\\Decoder->decodeBits()
#5 /www/2fa/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/QRCodeReader.php(63): Zxing\\Qrcode\\Decoder\\Decoder->decode()
#6 /www/2fa/vendor/khanamiryan/qrcode-detector-decoder/lib/QrReader.php(91): Zxing\\Qrcode\\QRCodeReader->decode()
#7 /www/2fa/vendor/khanamiryan/qrcode-detector-decoder/lib/QrReader.php(100): Zxing\\QrReader->decode()
#8 /www/2fa/app/Services/QrCodeService.php(46): Zxing\\QrReader->text()
#9 /www/2fa/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): App\\Services\\QrCodeService::decode()
#10 /www/2fa/app/Api/v1/Controllers/QrCodeController.php(36): Illuminate\\Support\\Facades\\Facade::__callStatic()
#11 /www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Api\\v1\\Controllers\\QrCodeController->decode()
#12 /www/2fa/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction()
#13 /www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#14 /www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#15 /www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
#16 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#17 /www/2fa/app/Http/Middleware/LogUserLastSeen.php(33): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#18 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): App\\Http\\Middleware\\LogUserLastSeen->handle()
#19 /www/2fa/app/Http/Middleware/KickOutInactiveUser.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#20 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): App\\Http\\Middleware\\KickOutInactiveUser->handle()
#21 /www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#22 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
#23 /www/2fa/app/Http/Middleware/SetLanguage.php(68): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#24 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): App\\Http\\Middleware\\SetLanguage->handle()
#25 /www/2fa/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#26 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Auth\\Middleware\\Authenticate->handle()
#27 /www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#28 /www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(125): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest()
#29 /www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(87): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequestUsingNamedLimiter()
#30 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
#31 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#32 /www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then()
#33 /www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack()
#34 /www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute()
#35 /www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute()
#36 /www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#37 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#38 /www/2fa/app/Http/Middleware/ForceJsonResponse.php(19): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#39 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): App\\Http\\Middleware\\ForceJsonResponse->handle()
#40 /www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#42 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#43 /www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#44 /www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#45 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#46 /www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#47 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#48 /www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#49 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#50 /www/2fa/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(62): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#51 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\HandleCors->handle()
#52 /www/2fa/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#53 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#54 /www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#55 /www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#56 /www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#57 /www/2fa/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle()
#58 {main}
"}

Execution environment

Date: Sun, 30 Jun 2024 08:10:13 +0200 userAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Version: 5.2.0 Environment: local Install path: / Debug: false Cache driver: file Log channel: daily Log level: info DB driver: mysql PHP version: 8.3.8 Operating system: Linux Ubuntu 24.04 LTS interface: fpm-fcgi Auth guard: web-guard webauthn user verification: preferred Trusted proxies: none lastRadarScan: 2024-06-30 05:24:42

Containerization

Additional information

No response

kamalmjt commented 2 days ago

In file: /2fa/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/Version.php I apply these patch: (Line 90) replace: "return $this->ecBlocks[$ecLevel->getOrdinal()];" by: "if(is_array($this->ecBlocks)){ return $this->ecBlocks[$ecLevel->getOrdinal()]; }else{ return $this->ecBlocks; }"

This issue is related to: https://github.com/khanamiryan/php-qrcode-detector-decoder/issues/89

Now works but have this next crash at decode exported qr from Google Authenticator:

[2024-06-30 18:38:46] local.ERROR: QR code has invalid checksum {"userId":1,"exception":"[object] (App\\Exceptions\\InvalidQrCodeException(code: 0): QR code has invalid checksum at /home/2fa.majaiti.es/www/2fa/app/Services/QrCodeService.php:61)
[stacktrace]
#0 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): App\\Services\\QrCodeService::decode()
#1 /home/2fa.majaiti.es/www/2fa/app/Api/v1/Controllers/QrCodeController.php(36): Illuminate\\Support\\Facades\\Facade::__callStatic()
#2 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Api\\v1\\Controllers\\QrCodeController->decode()
#3 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction()
#4 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#5 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#6 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
#7 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#8 /home/2fa.majaiti.es/www/2fa/app/Http/Middleware/LogUserLastSeen.php(33): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#9 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): App\\Http\\Middleware\\LogUserLastSeen->handle()
#10 /home/2fa.majaiti.es/www/2fa/app/Http/Middleware/KickOutInactiveUser.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#11 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): App\\Http\\Middleware\\KickOutInactiveUser->handle()
#12 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#13 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
#14 /home/2fa.majaiti.es/www/2fa/app/Http/Middleware/SetLanguage.php(68): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#15 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): App\\Http\\Middleware\\SetLanguage->handle()
#16 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#17 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Auth\\Middleware\\Authenticate->handle()
#18 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#19 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(125): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest()
#20 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(87): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequestUsingNamedLimiter()
#21 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
#22 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then()
#24 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack()
#25 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute()
#26 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute()
#27 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#28 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#29 /home/2fa.majaiti.es/www/2fa/app/Http/Middleware/ForceJsonResponse.php(19): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#30 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): App\\Http\\Middleware\\ForceJsonResponse->handle()
#31 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#32 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#33 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#34 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#35 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#36 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#37 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#38 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#39 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#40 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#41 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(62): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#42 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\HandleCors->handle()
#43 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#44 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#45 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#46 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#47 /home/2fa.majaiti.es/www/2fa/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#48 /home/2fa.majaiti.es/www/2fa/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle()
#49 {main}
"}