Passed
Push — master ( 213bcd...0f9753 )
by Greg
07:23
created

VerifyEmailController::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * webtrees: online genealogy
4
 * Copyright (C) 2019 webtrees development team
5
 * This program is free software: you can redistribute it and/or modify
6
 * it under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation, either version 3 of the License, or
8
 * (at your option) any later version.
9
 * This program is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
 * GNU General Public License for more details.
13
 * You should have received a copy of the GNU General Public License
14
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15
 */
16
declare(strict_types=1);
17
18
namespace Fisharebest\Webtrees\Http\Controllers\Auth;
19
20
use Fisharebest\Webtrees\Http\Controllers\AbstractBaseController;
21
use Fisharebest\Webtrees\I18N;
22
use Fisharebest\Webtrees\Log;
23
use Fisharebest\Webtrees\Services\MailService;
24
use Fisharebest\Webtrees\Services\UserService;
25
use Fisharebest\Webtrees\Tree;
26
use Fisharebest\Webtrees\TreeUser;
27
use Fisharebest\Webtrees\User;
28
use Illuminate\Database\Capsule\Manager as DB;
29
use Psr\Http\Message\ResponseInterface;
30
use Psr\Http\Message\ServerRequestInterface;
31
32
/**
33
 * Controller for email verification.
34
 */
35
class VerifyEmailController extends AbstractBaseController
36
{
37
    /**
38
     * @var MailService
39
     */
40
    private $mail_service;
41
42
    /**
43
     * MessageController constructor.
44
     *
45
     * @param MailService $mail_service
46
     */
47
    public function __construct(MailService $mail_service)
48
    {
49
        $this->mail_service = $mail_service;
50
    }
51
52
    /**
53
     * Respond to a verification link that was emailed to a user.
54
     *
55
     * @param ServerRequestInterface $request
56
     * @param Tree                   $tree
57
     * @param UserService            $user_service
58
     *
59
     * @return ResponseInterface
60
     */
61
    public function verify(ServerRequestInterface $request, Tree $tree, UserService $user_service): ResponseInterface
62
    {
63
        $username = $request->getQueryParams()['username'] ?? '';
64
        $token    = $request->getQueryParams()['token'] ?? '';
65
66
        $title = I18N::translate('User verification');
67
68
        $user = $user_service->findByUserName($username);
69
70
        if ($user instanceof User && $user->getPreference('reg_hashcode') === $token) {
71
            // switch language to webmaster settings
72
            $webmaster = $user_service->find((int) $tree->getPreference('WEBMASTER_USER_ID'));
73
74
            if ($webmaster instanceof User) {
75
                I18N::init($webmaster->getPreference('language'));
76
77
                $base_url = $request->getAttribute('base_url');
78
79
                /* I18N: %s is a server name/URL */
80
                $subject = I18N::translate('New user at %s', $base_url . ' ' . $tree->title());
81
82
                $this->mail_service->send(
83
                    new TreeUser($tree),
84
                    $webmaster,
85
                    new TreeUser($tree),
86
                    $subject,
87
                    view('emails/verify-notify-text', ['user' => $user]),
88
                    view('emails/verify-notify-html', ['user' => $user])
89
                );
90
91
                $mail1_method = $webmaster->getPreference('CONTACT_METHOD');
92
93
                if ($mail1_method !== 'messaging3' && $mail1_method !== 'mailto' && $mail1_method !== 'none') {
94
                    DB::table('message')->insert([
95
                        'sender'     => $username,
96
                        'ip_address' => $request->getAttribute('client_ip'),
97
                        'user_id'    => $webmaster->id(),
98
                        'subject'    => $subject,
99
                        'body'       => view('emails/verify-notify-text', ['user' => $user]),
100
                    ]);
101
                }
102
                I18N::init(WT_LOCALE);
103
            }
104
105
            $user
106
                ->setPreference('verified', '1')
107
                ->setPreference('reg_timestamp', date('U'))
108
                ->setPreference('reg_hashcode', '');
109
110
            Log::addAuthenticationLog('User ' . $username . ' verified their email address');
111
112
            return $this->viewResponse('verify-success-page', [
113
                'title' => $title,
114
            ]);
115
        }
116
117
        return $this->viewResponse('verify-failure-page', [
118
            'title' => $title,
119
        ]);
120
    }
121
}
122