<?php
namespace iThemesSecurity\Lib\REST;
class Lockout_Stats_Controller extends \WP_REST_Controller {
protected $namespace = 'ithemes-security/rpc';
protected $rest_base = 'lockout-stats';
/** @var \ITSEC_Lockout */
protected $lockout;
public function __construct( \ITSEC_Lockout $lockout ) { $this->lockout = $lockout; }
public function register_routes() {
register_rest_route( $this->namespace, $this->rest_base . '/top-blocked-ips', [
'methods' => \WP_REST_Server::READABLE,
'callback' => [ $this, 'get_top_blocked_ips' ],
'permission_callback' => 'ITSEC_Core::current_user_can_manage',
'args' => [
'period' => \ITSEC_Lib_REST::get_period_arg(),
'number' => [
'type' => 'integer',
'minimum' => 0,
'maximum' => 10,
'default' => 5,
],
],
] );
}
public function get_top_blocked_ips( \WP_REST_Request $request ) {
$parsed_period = \ITSEC_Lib_REST::parse_period_arg( $request['period'] );
if ( is_wp_error( $parsed_period ) ) {
return $parsed_period;
}
$ips = $this->lockout->get_top_blocked_ips(
$request['number'],
$parsed_period[0],
$parsed_period[1]
);
if ( ! $ips->is_success() ) {
return $ips->as_rest_response();
}
$formatted = [];
foreach ( $ips->get_data() as $ip ) {
$data = [
'ip' => $ip['ip'],
'count' => $ip['count'],
];
if ( \ITSEC_Modules::is_active( 'geolocation' ) ) {
$location = \ITSEC_Lib_Geolocation::geolocate( $ip['ip'] );
$data['location'] = is_wp_error( $location ) ? null : $location;
}
$formatted[] = $data;
}
return $formatted;
}
}