diff -r d5474f54a525 -r 71cb87b7dc3f plugins/admin/UserManager.php --- a/plugins/admin/UserManager.php Thu Dec 17 04:29:55 2009 -0500 +++ b/plugins/admin/UserManager.php Thu Dec 17 04:31:55 2009 -0500 @@ -590,10 +590,12 @@ '; } echo ''; + echo ''; } $db->free_result(); } + acp_usermanager_lockouts(); } /** @@ -1221,4 +1223,81 @@ } -?> +function acp_usermanager_lockouts($homewrap = false) +{ + global $db, $session, $paths, $template, $plugins; // Common objects + global $lang; + + // Locked out users + + if ( !empty($_GET['clear_lockout']) && is_valid_ip($_GET['clear_lockout']) ) + { + $ip = $db->escape($_GET['clear_lockout']); + $q = $db->sql_query('DELETE FROM ' . table_prefix . "lockout WHERE ipaddr = '$ip' AND timestamp > ( " . time() . " - (" . getConfig('lockout_duration', 15) . "*60) );"); + if ( !$q ) + $db->_die(); + + echo '
' . $lang->get('acphome_msg_lockout_clear_success', array('ip' => htmlspecialchars($ip))) . '
'; + } + + $q = $db->sql_query('SELECT COUNT(id) AS fail_count, ipaddr, username, timestamp FROM ' . table_prefix . "lockout\n" + . " WHERE timestamp > ( " . time() . " - " . intval(getConfig('lockout_duration', 15)) . "*60 ) GROUP BY ipaddr ORDER BY COUNT(id) DESC, timestamp DESC;"); + if ( !$q ) + $db->_die(); + + if ( $db->numrows() > 0 ) + { + if ( $homewrap ) + echo '
'; + echo '

' . $lang->get('acphome_msg_users_locked_out') . '

'; + echo '

' . $lang->get('acphome_msg_users_locked_out_hint') . '

'; + + ?> +
+ + + + + + + + + fetchrow() ) + { + echo ''; + echo ''; + echo ''; + // status + echo ''; + // time left + if ( $row['fail_count'] >= getConfig('lockout_threshold', 5) ) + { + $expire_time = $row['timestamp'] + ( getConfig('lockout_duration', 15) * 60 ); + $time_left = round(($expire_time - time()) / 60); + $minutes = $time_left == 1 ? $lang->get('etc_unit_minute') : $lang->get('etc_unit_minutes'); + echo ''; + } + else + { + echo ''; + } + // action + $btn_text = $row['fail_count'] >= getConfig('lockout_threshold', 5) ? $lang->get('acphome_btn_lockout_unblock') : $lang->get('acphome_btn_lockout_clear'); + echo ''; + echo ''; + } + echo '
get('acphome_th_locked_out_ip'); ?>get('acphome_th_locked_out_username'); ?>get('acphome_th_locked_out_status'); ?>get('acphome_th_locked_out_time'); ?>
' . htmlspecialchars($row['ipaddr']) . '' . htmlspecialchars($row['username']) . '' . + ( $row['fail_count'] >= getConfig('lockout_threshold', 5) + ? '' . $lang->get('acphome_lbl_locked_out_banned') . '' + : $lang->get('acphome_lbl_locked_out_warned', array('fail_count' => $row['fail_count'])) + ) + . '' . "$time_left $minutes" . '' . $btn_text . '
'; + echo '
'; + if ( $homewrap ) + echo '
'; + } + + $db->free_result(); +}