• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

klinge / sl-webapp / 18972011891

31 Oct 2025 12:06PM UTC coverage: 74.73% (+11.1%) from 63.602%
18972011891

push

github

klinge
Fixed phpcs errors

1662 of 2224 relevant lines covered (74.73%)

3.82 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.06
/App/Controllers/Auth/PasswordController.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace App\Controllers\Auth;
6

7
use App\Services\UrlGeneratorService;
8
use App\Services\Auth\UserAuthenticationService;
9
use App\Traits\ResponseFormatter;
10
use App\Utils\View;
11
use App\Utils\Session;
12
use Psr\Http\Message\ServerRequestInterface;
13
use Psr\Http\Message\ResponseInterface;
14
use Monolog\Logger;
15
use League\Container\Container;
16

17
class PasswordController extends AuthBaseController
18
{
19
    use ResponseFormatter;
20

21
    private const NEWPASSWORD_VIEW = 'login/viewReqPassword';
22
    private const RESET_PASSWORD_VIEW = 'login/viewSetNewPassword';
23
    private UserAuthenticationService $authService;
24
    private View $view;
25

26
    public function __construct(
27
        UrlGeneratorService $urlGenerator,
28
        ServerRequestInterface $request,
29
        Logger $logger,
30
        Container $container,
31
        string $turnstileSecret,
32
        UserAuthenticationService $userAuthSvc,
33
        View $view
34
    ) {
35
        parent::__construct($urlGenerator, $request, $logger, $container, $turnstileSecret);
7✔
36
        $this->authService = $userAuthSvc;
7✔
37
        $this->view = $view;
7✔
38
    }
39

40
    public function showRequestPwd(): ResponseInterface
41
    {
42
        return $this->view->render(self::NEWPASSWORD_VIEW);
1✔
43
    }
44

45
    public function sendPwdRequestToken(): ResponseInterface
46
    {
47
        if (!$this->validateRecaptcha()) {
2✔
48
            return $this->renderWithError(self::NEWPASSWORD_VIEW, self::RECAPTCHA_ERROR_MESSAGE);
×
49
        }
50

51
        $email = $this->request->getParsedBody()['email'] ?? '';
2✔
52
        $result = $this->authService->requestPasswordReset($email);
2✔
53
        if ($result['success']) {
2✔
54
            Session::setFlashMessage(
1✔
55
                'success',
1✔
56
                'Om du har ett konto får du strax ett mail med en återställningslänk till din e-postadress.'
1✔
57
            );
1✔
58
        } else {
59
            Session::setFlashMessage('error', 'Kunde inte skicka mail för lösenordsåterställning. Försök igen.');
1✔
60
        }
61

62
        return $this->view->render(self::NEWPASSWORD_VIEW);
2✔
63
    }
64

65
    public function showResetPassword(ServerRequestInterface $request, array $params): ResponseInterface
66
    {
67
        $result = $this->authService->validateResetToken($params['token']);
2✔
68

69
        if ($result['success']) {
2✔
70
            $viewData = [
1✔
71
                'email' => $result['email'],
1✔
72
                'token' => $params['token']
1✔
73
            ];
1✔
74
            $this->setCsrfToken();
1✔
75
            return $this->view->render(self::RESET_PASSWORD_VIEW, $viewData);
1✔
76
        }
77

78
        return $this->redirectWithError('show-request-password', $result['message']);
1✔
79
    }
80

81
    public function resetAndSavePassword(): ResponseInterface
82
    {
83
        $formData = $this->request->getParsedBody();
2✔
84
        $result = $this->authService->resetPassword($formData);
2✔
85

86
        if (!$result['success']) {
2✔
87
            Session::setFlashMessage('error', $result['message']);
1✔
88
            $viewData = [
1✔
89
                'email' => $formData['email'],
1✔
90
                'token' => $formData['token']
1✔
91
            ];
1✔
92
            return $this->view->render(self::RESET_PASSWORD_VIEW, $viewData);
1✔
93
        }
94

95
        return $this->redirectWithSuccess('login', 'Ditt lösenord är uppdaterat. Du kan nu logga in med ditt nya lösenord.');
1✔
96
    }
97
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc