|
56 | 56 | $mypassword = $_POST['mypassword']; |
57 | 57 | } |
58 | 58 |
|
59 | | -$_SESSION['user_ldap'] = false; |
60 | | -$_SESSION['user_imap'] = false; |
61 | | -if (defined('USE_LDAP') |
62 | | - && (USE_LDAP === true) |
63 | | - && (($result = ldap_authenticate($myusername, $mypassword)) !== null) |
64 | | -) { |
65 | | - $_SESSION['user_ldap'] = true; |
66 | | - $myusername = safe_value($result); |
67 | | - $mypassword = safe_value($mypassword); |
68 | | -} elseif ( |
69 | | - defined('USE_IMAP') |
70 | | - && (USE_IMAP === true) |
71 | | - && (($result = imap_authenticate($myusername, $mypassword)) !== null) |
72 | | -) { |
73 | | - $_SESSION['user_imap'] = true; |
74 | | - $myusername = safe_value($myusername); |
75 | | - $mypassword = safe_value($mypassword); |
76 | | -} else { |
77 | | - if ('' !== $mypassword) { |
78 | | - $myusername = safe_value($myusername); |
79 | | - $mypassword = safe_value($mypassword); |
80 | | - } else { |
81 | | - header('Location: /login.php?error=emptypassword'); |
82 | | - logFailedLogin($myusername); |
83 | | - exit; |
84 | | - } |
85 | | -} |
86 | | - |
87 | | -$sql = "SELECT * FROM users WHERE username='$myusername'"; |
88 | | -$result = dbquery($sql); |
89 | | - |
90 | | -// mysql_num_row is counting table row |
91 | | -$usercount = $result->num_rows; |
92 | | -if (0 === $usercount) { |
93 | | - // no user found, redirect to login |
94 | | - dbclose(); |
| 59 | +try { |
| 60 | + $authenticated = \MailWatch\ApplicationFactory::userAuthentication()->authenticate( |
| 61 | + (string)$myusername, |
| 62 | + (string)$mypassword, |
| 63 | + time(), |
| 64 | + ); |
| 65 | +} catch (\MailWatch\Users\Application\EmptyPassword) { |
| 66 | + header('Location: /login.php?error=emptypassword'); |
| 67 | + logFailedLogin($myusername); |
| 68 | + exit; |
| 69 | +} catch (\MailWatch\Users\Application\InvalidCredentials) { |
95 | 70 | header('Location: /login.php?error=baduser'); |
96 | 71 | logFailedLogin($myusername); |
97 | 72 | exit; |
| 73 | +} catch (\MailWatch\Users\Application\AuthenticationProviderUnavailable $exception) { |
| 74 | + exit($exception->getMessage()); |
98 | 75 | } |
99 | 76 |
|
100 | | -if ( |
101 | | - (false === $_SESSION['user_ldap']) |
102 | | - && (false === $_SESSION['user_imap']) |
103 | | -) { |
104 | | - $passwordInDb = Database::mysqli_result($result, 0, 'password'); |
105 | | - if (!is_string($passwordInDb)) { |
106 | | - header('Location: /login.php?error=baduser'); |
107 | | - logFailedLogin($myusername); |
108 | | - exit; |
109 | | - } |
110 | | - |
111 | | - if (!password_verify($mypassword, $passwordInDb)) { |
112 | | - if (!hash_equals(md5($mypassword), $passwordInDb)) { |
113 | | - header('Location: /login.php?error=baduser'); |
114 | | - logFailedLogin($myusername); |
115 | | - exit; |
116 | | - } |
117 | | - |
118 | | - $newPasswordHash = password_hash($mypassword, PASSWORD_DEFAULT); |
119 | | - updateUserPasswordHash($myusername, $newPasswordHash); |
120 | | - } else { |
121 | | - // upgraded password is valid, continue as normal |
122 | | - if (password_needs_rehash($passwordInDb, PASSWORD_DEFAULT)) { |
123 | | - $newPasswordHash = password_hash($mypassword, PASSWORD_DEFAULT); |
124 | | - updateUserPasswordHash($myusername, $newPasswordHash); |
125 | | - } |
126 | | - } |
| 77 | +$account = $authenticated->account; |
| 78 | +$myusername = $account->username; |
| 79 | +$fullname = $account->fullName; |
| 80 | +$usertype = $account->role; |
| 81 | +$_SESSION['user_ldap'] = \MailWatch\Users\Domain\AuthenticationSource::Ldap === $authenticated->source; |
| 82 | +$_SESSION['user_imap'] = \MailWatch\Users\Domain\AuthenticationSource::Imap === $authenticated->source; |
| 83 | +if ($authenticated->passwordHashUpgraded) { |
| 84 | + audit_log(__('auditlogupdateuser03', true) . ' ' . $myusername); |
127 | 85 | } |
128 | 86 |
|
129 | | -$fullname = Database::mysqli_result($result, 0, 'fullname'); |
130 | | -$usertype = Database::mysqli_result($result, 0, 'type'); |
131 | | - |
132 | | -$sql_userfilter = "SELECT filter FROM user_filters WHERE username='$myusername' AND active='Y'"; |
133 | | -$result_userfilter = dbquery($sql_userfilter); |
134 | | - |
135 | | -$filter[] = $myusername; |
136 | | -while ($row = $result_userfilter->fetch_array()) { |
137 | | - $filter[] = $row['filter']; |
138 | | -} |
| 87 | +$filter = array_map( |
| 88 | + static fn(string $value): string => safe_value($value), |
| 89 | + [$myusername, ...$account->activeFilters], |
| 90 | +); |
139 | 91 |
|
140 | 92 | $global_filter = address_filter_sql($filter, $usertype); |
141 | 93 |
|
|
173 | 125 | break; |
174 | 126 | } |
175 | 127 |
|
176 | | -// If result matched $myusername and $mypassword, table row must be 1 row |
177 | | -if (1 === $usercount) { |
178 | | - session_regenerate_id(true); |
179 | | - // Register $myusername, $mypassword and redirect to file "login_success.php" |
180 | | - $_SESSION['myusername'] = $myusername; |
181 | | - $_SESSION['fullname'] = $fullname; |
182 | | - $_SESSION['user_type'] = ($usertype ?? ''); |
183 | | - $_SESSION['domain'] = ($domainname ?? ''); |
184 | | - $_SESSION['global_filter'] = '(' . $global_filter . ')'; |
185 | | - $_SESSION['global_list'] = ($global_list ?? ''); |
186 | | - $_SESSION['global_array'] = $filter; |
187 | | - $_SESSION['token'] = generateToken(); |
188 | | - $_SESSION['formtoken'] = generateToken(); |
189 | | - // Initialize login expiry in users table for newly logged in user |
190 | | - updateLoginExpiry($myusername); |
191 | | - $redirect_url = 'index.php'; |
192 | | - if (isset($_SESSION['REQUEST_URI'])) { |
193 | | - $redirect_url = $_SESSION['REQUEST_URI']; |
194 | | - unset($_SESSION['REQUEST_URI']); |
195 | | - } |
196 | | - header('Location: ' . str_replace('&', '&', sanitizeInput($redirect_url))); |
197 | | -} else { |
198 | | - header('Location: /login.php?error=baduser'); |
199 | | - logFailedLogin($myusername); |
| 128 | +session_regenerate_id(true); |
| 129 | +$_SESSION['myusername'] = $myusername; |
| 130 | +$_SESSION['fullname'] = $fullname; |
| 131 | +$_SESSION['user_type'] = $usertype; |
| 132 | +$_SESSION['domain'] = ($domainname ?? ''); |
| 133 | +$_SESSION['global_filter'] = '(' . $global_filter . ')'; |
| 134 | +$_SESSION['global_list'] = ($global_list ?? ''); |
| 135 | +$_SESSION['global_array'] = $filter; |
| 136 | +$_SESSION['token'] = generateToken(); |
| 137 | +$_SESSION['formtoken'] = generateToken(); |
| 138 | +$redirect_url = 'index.php'; |
| 139 | +if (isset($_SESSION['REQUEST_URI'])) { |
| 140 | + $redirect_url = $_SESSION['REQUEST_URI']; |
| 141 | + unset($_SESSION['REQUEST_URI']); |
200 | 142 | } |
| 143 | +header('Location: ' . str_replace('&', '&', sanitizeInput($redirect_url))); |
201 | 144 |
|
202 | 145 | // close any DB connections |
203 | 146 | dbclose(); |
0 commit comments