|
@@ -807,7 +807,7 @@ function verify_hash($hash, $password) {
|
|
}
|
|
}
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
-function check_login($user, $pass, $app_passwd_data = false) {
|
|
|
|
|
|
+function check_login($user, $pass, $app_passwd_data = false, $skip_tfa = false) {
|
|
global $pdo;
|
|
global $pdo;
|
|
global $redis;
|
|
global $redis;
|
|
global $imap_server;
|
|
global $imap_server;
|
|
@@ -938,19 +938,22 @@ function check_login($user, $pass, $app_passwd_data = false) {
|
|
foreach ($rows as $row) {
|
|
foreach ($rows as $row) {
|
|
// verify password
|
|
// verify password
|
|
if (verify_hash($row['password'], $pass) !== false) {
|
|
if (verify_hash($row['password'], $pass) !== false) {
|
|
- // check for tfa authenticators
|
|
|
|
- $authenticators = get_tfa($user);
|
|
|
|
- if (isset($authenticators['additional']) && is_array($authenticators['additional']) && count($authenticators['additional']) > 0) {
|
|
|
|
- $_SESSION['pending_mailcow_cc_username'] = $user;
|
|
|
|
- $_SESSION['pending_mailcow_cc_role'] = "user";
|
|
|
|
- $_SESSION['pending_tfa_methods'] = $authenticators['additional'];
|
|
|
|
- unset($_SESSION['ldelay']);
|
|
|
|
- $_SESSION['return'][] = array(
|
|
|
|
- 'type' => 'success',
|
|
|
|
- 'log' => array(__FUNCTION__, $user, '*'),
|
|
|
|
- 'msg' => array('logged_in_as', $user)
|
|
|
|
- );
|
|
|
|
- return "pending";
|
|
|
|
|
|
+
|
|
|
|
+ if ($app_passwd_data['eas'] !== true && $app_passwd_data['dav'] !== true && !$skip_tfa){
|
|
|
|
+ // check for tfa authenticators
|
|
|
|
+ $authenticators = get_tfa($user);
|
|
|
|
+ if (isset($authenticators['additional']) && is_array($authenticators['additional']) && count($authenticators['additional']) > 0) {
|
|
|
|
+ $_SESSION['pending_mailcow_cc_username'] = $user;
|
|
|
|
+ $_SESSION['pending_mailcow_cc_role'] = "user";
|
|
|
|
+ $_SESSION['pending_tfa_methods'] = $authenticators['additional'];
|
|
|
|
+ unset($_SESSION['ldelay']);
|
|
|
|
+ $_SESSION['return'][] = array(
|
|
|
|
+ 'type' => 'success',
|
|
|
|
+ 'log' => array(__FUNCTION__, $user, '*'),
|
|
|
|
+ 'msg' => array('logged_in_as', $user)
|
|
|
|
+ );
|
|
|
|
+ return "pending";
|
|
|
|
+ }
|
|
} else {
|
|
} else {
|
|
if ($app_passwd_data['eas'] === true || $app_passwd_data['dav'] === true) {
|
|
if ($app_passwd_data['eas'] === true || $app_passwd_data['dav'] === true) {
|
|
$service = ($app_passwd_data['eas'] === true) ? 'EAS' : 'DAV';
|
|
$service = ($app_passwd_data['eas'] === true) ? 'EAS' : 'DAV';
|
|
@@ -961,12 +964,13 @@ function check_login($user, $pass, $app_passwd_data = false) {
|
|
':username' => $user,
|
|
':username' => $user,
|
|
':remote_addr' => ($_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR'])
|
|
':remote_addr' => ($_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR'])
|
|
));
|
|
));
|
|
|
|
+ } elseif (!$skip_tfa) {
|
|
|
|
+ // Reactivate TFA if it was set to "deactivate TFA for next login"
|
|
|
|
+ $stmt = $pdo->prepare("UPDATE `tfa` SET `active`='1' WHERE `username` = :user");
|
|
|
|
+ $stmt->execute(array(':user' => $user));
|
|
}
|
|
}
|
|
|
|
|
|
unset($_SESSION['ldelay']);
|
|
unset($_SESSION['ldelay']);
|
|
- // Reactivate TFA if it was set to "deactivate TFA for next login"
|
|
|
|
- $stmt = $pdo->prepare("UPDATE `tfa` SET `active`='1' WHERE `username` = :user");
|
|
|
|
- $stmt->execute(array(':user' => $user));
|
|
|
|
return "user";
|
|
return "user";
|
|
}
|
|
}
|
|
}
|
|
}
|