typemill / typemill

Typemill is a lightweight, flat-file CMS designed for simple, fast, and flexible website and eBook creation using Markdown.
https://typemill.net
MIT License
427 stars 60 forks source link

Crash, when there's a dot in the username #362

Open AchMol opened 1 year ago

AchMol commented 1 year ago

Hi, this is not a fatal bug but a little irritating, especially for new users I think. When there's a dot in the username "h.meyer" typemill crashes.

`Slim Application Error

The application could not run because of the following error: Details Type: Error Message: Call to undefined function imagettfbbox() File: /var/www/html/system/vendor/gregwar/captcha/src/Gregwar/Captcha/CaptchaBuilder.php Line: 345 Trace

0 /var/www/html/system/vendor/gregwar/captcha/src/Gregwar/Captcha/CaptchaBuilder.php(459): Gregwar\Captcha\CaptchaBuilder->writePhrase(Resource id #220, 'iy82J', '/var/www/html/s...', 150, 40)

1 /var/www/html/system/Extensions/TwigCaptchaExtension.php(22): Gregwar\Captcha\CaptchaBuilder->build()

2 /var/www/html/system/vendor/twig/twig/src/Environment.php(418) : eval()'d code(128): Typemill\Extensions\TwigCaptchaExtension->captchaImage(Array)

3 /var/www/html/system/vendor/twig/twig/src/Template.php(182): __TwigTemplate_afba7f6d241bf7191a4e963498101d2f2f1b15fef456a6cc8e5d85e8729bd9dd->block_content(Array, Array)

4 /var/www/html/system/vendor/twig/twig/src/Environment.php(418) : eval()'d code(114): Twig\Template->displayBlock('content', Array, Array)

5 /var/www/html/system/vendor/twig/twig/src/Template.php(405): __TwigTemplate_aa8cc93e415807e547d2a4a50c9912bd6baafbe1b9afcdc169d0e19b9f6f2c08->doDisplay(Array, Array)

6 /var/www/html/system/vendor/twig/twig/src/Template.php(378): Twig\Template->displayWithErrorHandling(Array, Array)

7 /var/www/html/system/vendor/twig/twig/src/Environment.php(418) : eval()'d code(43): Twig\Template->display(Array, Array)

8 /var/www/html/system/vendor/twig/twig/src/Template.php(405): __TwigTemplate_afba7f6d241bf7191a4e963498101d2f2f1b15fef456a6cc8e5d85e8729bd9dd->doDisplay(Array, Array)

9 /var/www/html/system/vendor/twig/twig/src/Template.php(378): Twig\Template->displayWithErrorHandling(Array, Array)

10 /var/www/html/system/vendor/twig/twig/src/Template.php(390): Twig\Template->display(Array)

11 /var/www/html/system/vendor/twig/twig/src/TemplateWrapper.php(45): Twig\Template->render(Array, Array)

12 /var/www/html/system/vendor/twig/twig/src/Environment.php(318): Twig\TemplateWrapper->render(Array)

13 /var/www/html/system/vendor/slim/twig-view/src/Twig.php(92): Twig\Environment->render('/auth/login.twi...', Array)

14 /var/www/html/system/vendor/slim/twig-view/src/Twig.php(136): Slim\Views\Twig->fetch('/auth/login.twi...', Array)

15 /var/www/html/system/Controllers/ControllerShared.php(78): Slim\Views\Twig->render(Object(Slim\Http\Response), '/auth/login.twi...', Array)

16 /var/www/html/system/Controllers/ControllerFrontendAuth.php(41): Typemill\Controllers\ControllerShared->render(Object(Slim\Http\Response), '/auth/login.twi...', Array)

17 [internal function]: Typemill\Controllers\ControllerFrontendAuth->show(Object(Slim\Http\Request), Object(Slim\Http\Response), Array)

18 /var/www/html/system/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php(40): call_user_func(Array, Object(Slim\Http\Request), Object(Slim\Http\Response), Array)

19 /var/www/html/system/vendor/slim/slim/Slim/Route.php(281): Slim\Handlers\Strategies\RequestResponse->__invoke(Array, Object(Slim\Http\Request), Object(Slim\Http\Response), Array)

20 /var/www/html/system/Middleware/RedirectIfAuthenticated.php(28): Slim\Route->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))

21 [internal function]: Typemill\Middleware\RedirectIfAuthenticated->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\Route))

22 /var/www/html/system/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array(Object(Typemill\Middleware\RedirectIfAuthenticated), Array)

23 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\Route))

24 /var/www/html/system/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\Route))

25 /var/www/html/system/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\Route->Slim{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))

26 /var/www/html/system/vendor/slim/slim/Slim/Route.php(268): Slim\Route->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))

27 /var/www/html/system/vendor/slim/slim/Slim/App.php(503): Slim\Route->run(Object(Slim\Http\Request), Object(Slim\Http\Response))

28 /var/www/html/system/Middleware/ValidationErrorsMiddleware.php(34): Slim\App->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))

29 [internal function]: Typemill\Middleware\ValidationErrorsMiddleware->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))

30 /var/www/html/system/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array(Object(Typemill\Middleware\ValidationErrorsMiddleware), Array)

31 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))

32 /var/www/html/system/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))

33 /var/www/html/system/Middleware/SecurityMiddleware.php(115): Slim\App->Slim{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))

34 [internal function]: Typemill\Middleware\securityMiddleware->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))

35 /var/www/html/system/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array(Object(Typemill\Middleware\securityMiddleware), Array)

36 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))

37 /var/www/html/system/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))

38 /var/www/html/system/Middleware/OldInputMiddleware.php(29): Slim\App->Slim{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))

39 [internal function]: Typemill\Middleware\OldInputMiddleware->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))

40 /var/www/html/system/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array(Object(Typemill\Middleware\OldInputMiddleware), Array)

41 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))

42 /var/www/html/system/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))

43 /var/www/html/system/vendor/slim/csrf/src/Guard.php(171): Slim\App->Slim{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))

44 [internal function]: Slim\Csrf\Guard->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))

45 /var/www/html/system/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array(Object(Slim\Csrf\Guard), Array)

46 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))

47 /var/www/html/system/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))

48 /var/www/html/system/Middleware/assetMiddleware.php(36): Slim\App->Slim{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))

49 [internal function]: Typemill\Middleware\assetMiddleware->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))

50 /var/www/html/system/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array(Object(Typemill\Middleware\assetMiddleware), Array)

51 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))

52 /var/www/html/system/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))

53 /var/www/html/system/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\App->Slim{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))

54 /var/www/html/system/vendor/slim/slim/Slim/App.php(392): Slim\App->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))

55 /var/www/html/system/vendor/slim/slim/Slim/App.php(297): Slim\App->process(Object(Slim\Http\Request), Object(Slim\Http\Response))

56 /var/www/html/index.php(7): Slim\App->run()

57 {main}`

trendschau commented 1 year ago

thank you for reporting, I will check it

trendschau commented 1 year ago

did you create that user manually with a yaml-file? Because if I try to create a user with a dot in the backoffice, then I get a correct warning "invalid character".

AchMol commented 1 year ago

Yes, you're right. I created the accounts in the backoffice without dot. But all our other accounts are like "h.mueller". So when I create an account "hmueller" the user tries "h.mueller" no matter what I say... ;-) And then the error appears an the user is calling me. ;-)

I would love to have an error message "user unknown" or something.

trendschau commented 1 year ago

I don't want to give any hints of username or password logic in frontend by default. But you could change the german translation file and show an individual message after wrong input like this:

"UPS__WRONG_PASSWORD_OR_USERNAME__PLEASE_TRYAGAIN: Ungültiges Passwort oder Nutzername. Bitte verwenden Sie keinen Punkt in ihrem Nutzernamen."

You find the translation file in -> system -> author -> languages -> de.yaml line 191

Not ideal because you have to change it after every update, but it is an easy solution and updates are rare right now.