[Web] Show users last PW change, allow to select n days for last logins
This commit is contained in:
@@ -251,21 +251,21 @@ function password_check($password1, $password2) {
|
||||
|
||||
return true;
|
||||
}
|
||||
function last_login($action, $username, $sasl_limit = 10) {
|
||||
function last_login($action, $username, $sasl_limit_days = 7) {
|
||||
global $pdo;
|
||||
global $redis;
|
||||
$sasl_limit = intval($sasl_limit);
|
||||
$sasl_limit_days = intval($sasl_limit_days);
|
||||
switch ($action) {
|
||||
case 'get':
|
||||
if (filter_var($username, FILTER_VALIDATE_EMAIL) && hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {
|
||||
$stmt = $pdo->prepare('SELECT `real_rip`, MAX(`datetime`) as `datetime`, `service`, `app_password` FROM `sasl_logs`
|
||||
LEFT OUTER JOIN `app_passwd` on `sasl_logs`.`app_password` = `app_passwd`.`id`
|
||||
WHERE `username` = :username
|
||||
AND HOUR(TIMEDIFF(NOW(), `datetime`)) < :sasl_limit_days
|
||||
AND `success` = 1
|
||||
GROUP BY `real_rip`, `service`, `app_password`
|
||||
ORDER BY `datetime` DESC
|
||||
LIMIT :sasl_limit;');
|
||||
$stmt->execute(array(':username' => $username, ':sasl_limit' => $sasl_limit));
|
||||
ORDER BY `datetime` DESC;');
|
||||
$stmt->execute(array(':username' => $username, ':sasl_limit_days' => ($sasl_limit_days * 24)));
|
||||
$sasl = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
foreach ($sasl as $k => $v) {
|
||||
if (!filter_var($sasl[$k]['real_rip'], FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
|
||||
|
@@ -172,29 +172,12 @@ function exception_handler($e) {
|
||||
set_exception_handler('exception_handler');
|
||||
|
||||
// TODO: Move function
|
||||
function get_remote_ip($anonymize = null) {
|
||||
global $ANONYMIZE_IPS;
|
||||
if ($anonymize === null) {
|
||||
$anonymize = $ANONYMIZE_IPS;
|
||||
}
|
||||
elseif ($anonymize !== true && $anonymize !== false) {
|
||||
$anonymize = true;
|
||||
}
|
||||
function get_remote_ip() {
|
||||
$remote = $_SERVER['REMOTE_ADDR'];
|
||||
if (filter_var($remote, FILTER_VALIDATE_IP) === false) {
|
||||
return '0.0.0.0';
|
||||
}
|
||||
if ($anonymize) {
|
||||
if (strlen(inet_pton($remote)) == 4) {
|
||||
return inet_ntop(inet_pton($remote) & inet_pton("255.255.255.0"));
|
||||
}
|
||||
elseif (strlen(inet_pton($remote)) == 16) {
|
||||
return inet_ntop(inet_pton($remote) & inet_pton('ffff:ffff:ffff:ffff:0000:0000:0000:0000'));
|
||||
}
|
||||
}
|
||||
else {
|
||||
return $remote;
|
||||
}
|
||||
return $remote;
|
||||
}
|
||||
|
||||
// Load core functions first
|
||||
|
@@ -82,24 +82,24 @@ $DEFAULT_LANG = 'en';
|
||||
// https://www.iso.org/obp/ui/#search
|
||||
// https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
||||
$AVAILABLE_LANGUAGES = array(
|
||||
'cs' => 'Čeština (Czech)',
|
||||
'da' => 'Danish (Dansk)',
|
||||
'de' => 'Deutsch (German)',
|
||||
'en' => 'English',
|
||||
'es' => 'Español (Spanish)',
|
||||
'fi' => 'Suomi (Finish)',
|
||||
'fr' => 'Français (French)',
|
||||
'hu' => 'Magyar (Hungarian)',
|
||||
'it' => 'Italiano (Italian)',
|
||||
'ko' => '한국어 (Korean)',
|
||||
'lv' => 'latviešu (Latvian)',
|
||||
'nl' => 'Nederlands (Dutch)',
|
||||
'pl' => 'Język Polski (Polish)',
|
||||
'pt' => 'Português (Portuguese)',
|
||||
'ro' => 'Română (Romanian)',
|
||||
'ru' => 'Pусский (Russian)',
|
||||
'sk' => 'Slovenčina (Slovak)',
|
||||
'sv' => 'Svenska (Swedish)',
|
||||
'cs' => 'Čeština (Czech)',
|
||||
'da' => 'Danish (Dansk)',
|
||||
'de' => 'Deutsch (German)',
|
||||
'en' => 'English',
|
||||
'es' => 'Español (Spanish)',
|
||||
'fi' => 'Suomi (Finish)',
|
||||
'fr' => 'Français (French)',
|
||||
'hu' => 'Magyar (Hungarian)',
|
||||
'it' => 'Italiano (Italian)',
|
||||
'ko' => '한국어 (Korean)',
|
||||
'lv' => 'latviešu (Latvian)',
|
||||
'nl' => 'Nederlands (Dutch)',
|
||||
'pl' => 'Język Polski (Polish)',
|
||||
'pt' => 'Português (Portuguese)',
|
||||
'ro' => 'Română (Romanian)',
|
||||
'ru' => 'Pусский (Russian)',
|
||||
'sk' => 'Slovenčina (Slovak)',
|
||||
'sv' => 'Svenska (Swedish)',
|
||||
'zh' => '中文 (Chinese)'
|
||||
);
|
||||
|
||||
@@ -139,9 +139,6 @@ $OTP_LABEL = "mailcow UI";
|
||||
// How long to wait (in s) for cURL Docker requests
|
||||
$DOCKER_TIMEOUT = 60;
|
||||
|
||||
// Anonymize IPs logged via UI
|
||||
$ANONYMIZE_IPS = true;
|
||||
|
||||
// Split DKIM key notation (bind format)
|
||||
$SPLIT_DKIM_255 = false;
|
||||
|
||||
|
Reference in New Issue
Block a user