PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-waf / src / class-waf-stats.php
jetpack / jetpack_vendor / automattic / jetpack-waf / src Last commit date
brute-force-protection 9 months ago exceptions 9 months ago abstract-blocked-login-page.php 2 months ago class-brute-force-protection.php 2 months ago class-compatibility.php 2 months ago class-rest-controller.php 9 months ago class-waf-blocked-login-page.php 9 months ago class-waf-blocklog-manager.php 8 months ago class-waf-cli.php 9 months ago class-waf-constants.php 1 year ago class-waf-initializer.php 2 months ago class-waf-operators.php 2 years ago class-waf-request.php 6 months ago class-waf-rules-manager.php 1 year ago class-waf-runner.php 2 months ago class-waf-runtime.php 3 months ago class-waf-standalone-bootstrap.php 2 months ago class-waf-stats.php 1 year ago class-waf-transforms.php 2 years ago functions.php 1 year ago
class-waf-stats.php
181 lines
1 <?php
2 /**
3 * Class used to retrieve WAF stats
4 *
5 * @package automattic/jetpack-waf
6 */
7
8 namespace Automattic\Jetpack\Waf;
9
10 use Automattic\Jetpack\IP\Utils as IP_Utils;
11
12 /**
13 * Retrieves WAF stats.
14 */
15 class Waf_Stats {
16
17 /**
18 * Retrieve blocked requests from database
19 *
20 * @return array
21 */
22 public static function get_blocked_requests() {
23 return array(
24 'current_day' => Waf_Blocklog_Manager::get_current_day_block_count(),
25 'thirty_days' => Waf_Blocklog_Manager::get_thirty_days_block_counts(),
26 'all_time' => Waf_Blocklog_Manager::get_all_time_block_count(),
27 );
28 }
29
30 /**
31 * Get IP allow list count
32 *
33 * @return int The number of valid IP addresses in the allow list
34 *
35 * @deprecated 0.20.1 Use Automattic\Jetpack\Waf\Waf_Blocklog_Manager API instead.
36 */
37 public static function get_ip_allow_list_count() {
38 _deprecated_function( __METHOD__, 'waf-0.20.1', 'Automattic\Jetpack\Waf\Waf_Blocklog_Manager' );
39
40 $ip_allow_list = get_option( Waf_Rules_Manager::IP_ALLOW_LIST_OPTION_NAME );
41
42 if ( ! $ip_allow_list ) {
43 return 0;
44 }
45
46 $results = IP_Utils::get_ip_addresses_from_string( $ip_allow_list );
47
48 return count( $results );
49 }
50
51 /**
52 * Get IP block list count
53 *
54 * @return int The number of valid IP addresses in the block list
55 *
56 * @deprecated 0.20.1 Use Automattic\Jetpack\Waf\Waf_Blocklog_Manager API instead.
57 */
58 public static function get_ip_block_list_count() {
59 _deprecated_function( __METHOD__, 'waf-0.20.1', 'Automattic\Jetpack\Waf\Waf_Blocklog_Manager' );
60
61 $ip_block_list = get_option( Waf_Rules_Manager::IP_BLOCK_LIST_OPTION_NAME );
62
63 if ( ! $ip_block_list ) {
64 return 0;
65 }
66
67 $results = IP_Utils::get_ip_addresses_from_string( $ip_block_list );
68
69 return count( $results );
70 }
71
72 /** The global stats cache
73 *
74 * @var array|null
75 */
76 public static $global_stats = null;
77
78 /**
79 * Get Rules version
80 *
81 * @return bool|string False if value is not found. The current stored rules version if cache is found.
82 *
83 * @deprecated 0.12.3 Use Automattic\Jetpack\Waf\Waf_Stats::get_automatic_rules_last_updated() to version the rules instead.
84 */
85 public static function get_rules_version() {
86 _deprecated_function( __METHOD__, 'waf-0.12.3', 'Automattic\Jetpack\Waf\Waf_Stats::get_automatic_rules_last_updated' );
87
88 return get_option( Waf_Rules_Manager::VERSION_OPTION_NAME );
89 }
90
91 /**
92 * Get Automatic Rules last updated timestamp
93 *
94 * @return bool|string False if value is not found. The timestamp the current stored rules was last updated if cache is found.
95 */
96 public static function get_automatic_rules_last_updated() {
97 return get_option( Waf_Rules_Manager::AUTOMATIC_RULES_LAST_UPDATED_OPTION_NAME );
98 }
99
100 /**
101 * Checks if the current cached global stats is expired and should be renewed
102 *
103 * @return boolean
104 */
105 public static function is_global_stats_cache_expired() {
106 $option_timestamp = get_option( 'jetpack_protect_global_stats_timestamp' );
107
108 if ( ! $option_timestamp ) {
109 return true;
110 }
111
112 return time() > (int) $option_timestamp;
113 }
114
115 /**
116 * Checks if we should consider the stored cache or bypass it
117 *
118 * @return boolean
119 */
120 public static function should_use_global_stats_cache() {
121 return ! ( defined( 'JETPACK_PROTECT_DEV__BYPASS_CACHE' ) && JETPACK_PROTECT_DEV__BYPASS_CACHE );
122 }
123
124 /**
125 * Get the global stats from the API endpoint
126 */
127 public static function fetch_global_stats_from_api() {
128 $url = esc_url_raw( 'https://public-api.wordpress.com/wpcom/v2/jetpack-protect-global-stats' );
129 $response = wp_remote_get( $url );
130
131 $response_code = wp_remote_retrieve_response_code( $response );
132
133 if ( is_wp_error( $response ) || 200 !== $response_code || empty( $response['body'] ) ) {
134 return new \WP_Error( 'failed_fetching_global_stats', 'Failed to fetch global stats data from the server', array( 'status' => $response_code ) );
135 }
136
137 $body = json_decode( wp_remote_retrieve_body( $response ) );
138
139 update_option( 'jetpack_protect_global_stats', maybe_serialize( $body ) );
140 update_option( 'jetpack_protect_global_stats_timestamp', time() + 86400 ); // Caches expires after 24 hours.
141
142 return $body;
143 }
144
145 /**
146 * Gets the current cached global stats
147 *
148 * @return bool|array False if value is not found. Array with values if cache is found.
149 */
150 public static function get_global_stats_from_options() {
151 return maybe_unserialize( get_option( 'jetpack_protect_global_stats' ) );
152 }
153
154 /**
155 * Get the global stats
156 * If the cache is expired, it will fetch the data from the API
157 * If the cache is not expired, it will return the cached data
158 *
159 * @param bool $refresh_from_wpcom Whether to refresh the data from the API.
160 * @return array|\WP_Error
161 */
162 public static function get_global_stats( $refresh_from_wpcom = false ) {
163 if ( self::$global_stats !== null ) {
164 return self::$global_stats;
165 }
166
167 if ( $refresh_from_wpcom || ! self::should_use_global_stats_cache() || self::is_global_stats_cache_expired() ) {
168 $global_stats = self::fetch_global_stats_from_api();
169 } else {
170 $global_stats = self::get_global_stats_from_options();
171 }
172
173 // Ensure that $global_stats is of the correct type
174 if ( ( ! is_object( $global_stats ) && ! ( $global_stats instanceof \WP_Error ) ) ) {
175 return new \WP_Error( 'unexpected_type', 'Unexpected type or null returned for global stats' );
176 }
177
178 return $global_stats;
179 }
180 }
181