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
2.15k stars 144 forks source link

Error 500 when uploading picture file of QR code #35

Closed qdm12 closed 3 years ago

qdm12 commented 3 years ago

Describe the bug Error 500 when uploading picture file of QR code. Scanning the QR code with my computer webcam or using the advanced form both work.

To Reproduce

  1. Sign in or register
  2. Click on New
  3. Click on Upload a QR code
  4. Pick a file

Expected behavior The file should not result in a 500 error.

Video recoding (600KB):

https://user-images.githubusercontent.com/15654980/127669881-586eff60-41de-4cc3-88d4-7bfa48ee19e2.mp4

Desktop (please complete the following information):

Additional context

My 2fauth runs on a Docker image I designed with nginx (config) + php-fpm. Someone else installed 2fauth on a Debian virtual machine (without Docker) and it resulted in the same exact issue (and we did not communicate much on how to set it up either). So I doubt this is a setup issue, except perhaps an Nginx config issue?

I also don't know where to find server error logs, maybe you could enlighten me on this one?

As a side note, I worked on a Docker image which fully works apart from this bug. I'll make a PR to the repo once this bug is fixed. I can also set it up to cross build for ARM machines which would solve a bunch of issues on this repo 😉

Bubka commented 3 years ago

Hi,

I cannot reproduce the error, nor on my local setup nor using the demo app. The QR code I used has been generated using the same service with same values as your. So I guess it's a setup issue.

It could be a symlink issue. Can you try to recreate your storage symlink : https://github.com/Bubka/2FAuth/wiki/Q&A

You can find logs in ./storage/logs/

qdm12 commented 3 years ago

Ok, good to know.

  1. Would you perhaps have some Nginx (or other) config to serve your app?
  2. ~Is there any place we can find logs from the php application to know why it crashes?~ Oops sorry didn't read properly

Extra information:

If you have docker installed, you can run it with docker run -it --rm -p 8000:8000 qmcgaw/2fauth and access it on http://localhost:8000 if you want to try.

Thanks!

EDIT: I'll investigate the logs thanks!

qdm12 commented 3 years ago

I get the logs

[2021-07-31 15:59:15] local.ERROR: Call to undefined function Zxing\imagecreatefromstring() {"userId":1,"exception":"[object] (Error(code: 0): Call to undefined function Zxing\\imagecreatefromstring() at /srv/vendor/khanamiryan/qrcode-detector-decoder/lib/QrReader.php:35)
[stacktrace]
#0 /srv/app/Http/Controllers/QrCodeController.php(49): Zxing\\QrReader->__construct('/srv/storage/ap...')
#1 [internal function]: App\\Http\\Controllers\\QrCodeController->decode(Object(Illuminate\\Http\\Request))
#2 /srv/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array)
#3 /srv/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('decode', Array)
#4 /srv/vendor/laravel/framework/src/Illuminate/Routing/Route.php(239): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(App\\Http\\Controllers\\QrCodeController), 'decode')
#5 /srv/vendor/laravel/framework/src/Illuminate/Routing/Route.php(196): Illuminate\\Routing\\Route->runController()
#6 /srv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(685): Illuminate\\Routing\\Route->run()
#7 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#8 /srv/app/Http/Middleware/LogUserLastSeen.php(26): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#9 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\LogUserLastSeen->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#10 /srv/app/Http/Middleware/LogoutInactiveUser.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#11 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\LogoutInactiveUser->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#12 /srv/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): 
Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#13 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))    
#14 /srv/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(44): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))       
#15 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Auth\\Middleware\\Authenticate->handle(Object(Illuminate\\Http\\Request), Object(Closure), 'api')      
#16 /srv/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))#17 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle(Object(Illuminate\\Http\\Request), Object(Closure), 60, '1')
#18 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#19 /srv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(687): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#20 /srv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#21 /srv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(628): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#22 /srv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(617): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#23 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(165): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#24 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))   
#25 /srv/app/Http/Middleware/SetLanguage.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\SetLanguage->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /srv/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#28 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(63): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(140): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(109): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /srv/public/index.php(55): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"}

Any idea why that would be? Maybe a dependency issue on the QR reader??

Bubka commented 3 years ago

imagecreatefromstring is a function provided by the php gd extension. Do you have gd enabled?

EDIT: nop you don't:

# Install PHP and PHP system dependencies
RUN apt-get update && \
    apt-get install -y \
    php7.3 \
    php7.3-sqlite3 php7.3-mysql \
    php-xml && \
    apt-get clean && \
    rm -rf /var/cache/* /var/lib/apt/lists/*
qdm12 commented 3 years ago

Indeed installing php7.3-gd completely solved it! I'll make a PR for a Docker image soon.

srijansaxena11 commented 2 years ago

Indeed installing php7.3-gd completely solved it! I'll make a PR for a Docker image soon.

simple php7.3-gd installation did not solve the issue for me. am i doing something wrong?

qdm12 commented 2 years ago

@srijansaxena11 Maybe comment with you logs found in ./storage/logs?

srijansaxena11 commented 2 years ago

@srijansaxena11 Maybe comment with you logs found in ./storage/logs?

Yes. sorry. Here is what I found. I might not be an expert so please guide if anything else is required:

`[2021-12-03 18:29:09] local.ERROR: Unable to guess the MIME type as no guessers are available (have you enabled the php_fileinfo extension?). {"userId":1,"exception":"[object] (Symfony\Component\Mime\Exception\LogicException(code: 0> [stacktrace]

0 /srv/vendor/symfony/http-foundation/File/File.php(81): Symfony\Component\Mime\MimeTypes->guessMimeType()

1 /srv/vendor/symfony/http-foundation/File/File.php(61): Symfony\Component\HttpFoundation\File\File->getMimeType()

2 /srv/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php(1219): Symfony\Component\HttpFoundation\File\File->guessExtension()

3 /srv/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php(1067): Illuminate\Validation\Validator->validateMimes()

4 /srv/vendor/laravel/framework/src/Illuminate/Validation/Validator.php(554): Illuminate\Validation\Validator->validateImage()

5 /srv/vendor/laravel/framework/src/Illuminate/Validation/Validator.php(377): Illuminate\Validation\Validator->validateAttribute()

6 /srv/vendor/laravel/framework/src/Illuminate/Validation/Validator.php(408): Illuminate\Validation\Validator->passes()

7 /srv/vendor/laravel/framework/src/Illuminate/Validation/Validator.php(451): Illuminate\Validation\Validator->fails()

8 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Validation/ValidatesRequests.php(47): Illuminate\Validation\Validator->validate()

9 /srv/app/Http/Controllers/QrCodeController.php(44): App\Http\Controllers\Controller->validate()

10 [internal function]: App\Http\Controllers\QrCodeController->decode()

11 /srv/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array()

12 /srv/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction()

13 /srv/vendor/laravel/framework/src/Illuminate/Routing/Route.php(239): Illuminate\Routing\ControllerDispatcher->dispatch()

14 /srv/vendor/laravel/framework/src/Illuminate/Routing/Route.php(196): Illuminate\Routing\Route->runController()

15 /srv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(685): Illuminate\Routing\Route->run()

16 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Routing\Router->Illuminate\Routing\{closure}()

17 /srv/app/Http/Middleware/LogUserLastSeen.php(26): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()

18 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\Http\Middleware\LogUserLastSeen->handle()

19 /srv/app/Http/Middleware/LogoutInactiveUser.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()

20 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\Http\Middleware\LogoutInactiveUser->handle()

21 /srv/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()

22 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Routing\Middleware\SubstituteBindings->handle()

23 /srv/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(44): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()

24 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Auth\Middleware\Authenticate->handle()

25 /srv/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(59): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()

26 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Routing\Middleware\ThrottleRequests->handle()

27 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()

28 /srv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(687): Illuminate\Pipeline\Pipeline->then()

29 /srv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\Routing\Router->runRouteWithinStack()

30 /srv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(628): Illuminate\Routing\Router->runRoute()

31 /srv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(617): Illuminate\Routing\Router->dispatchToRoute()

32 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(165): Illuminate\Routing\Router->dispatch()

33 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}()

34 /srv/app/Http/Middleware/SetLanguage.php(20): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()

35 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\Http\Middleware\SetLanguage->handle()

36 /srv/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()

37 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\Proxy\TrustProxies->handle()

38 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()

39 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()

40 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()

41 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()

42 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()

43 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()

44 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(63): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()

45 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle()

46 /srv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()

47 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(140): Illuminate\Pipeline\Pipeline->then()

48 /srv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(109): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()

49 /srv/public/index.php(55): Illuminate\Foundation\Http\Kernel->handle()

50 {main}

"}`

Bubka commented 2 years ago

Can you provide the result of php -m in a terminal to confirm the fileinfo extension is missing in your env?

srijansaxena11 commented 2 years ago

Can you provide the result of php -m in a terminal to confirm the fileinfo extension is missing in your env?

image

I am using docker container. how do i check in a container?

srijansaxena11 commented 2 years ago

ok so I installed php7.3-cli and it resolved the issue. thank you and apologies for the inconvenience.

Bubka commented 2 years ago

You are welcome, glad it works 👍

qdm12 commented 2 years ago

@srijansaxena11 is php7.3-cli missing from the Docker image? We should add it if it's missing.

srijansaxena11 commented 2 years ago

@srijansaxena11 is php7.3-cli missing from the Docker image? We should add it if it's missing.

i think so. because it wasnt working without me manually installing

qdm12 commented 2 years ago

Created #54 for it @Bubka