wp/wp-content/plugins/akismet/class.akismet-rest-api.php
changeset 9 177826044cd9
parent 7 cf61fcea0001
equal deleted inserted replaced
8:c7c34916027a 9:177826044cd9
    85 				'methods' => WP_REST_Server::READABLE,
    85 				'methods' => WP_REST_Server::READABLE,
    86 				'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
    86 				'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ),
    87 				'callback' => array( 'Akismet_REST_API', 'get_stats' ),
    87 				'callback' => array( 'Akismet_REST_API', 'get_stats' ),
    88 			)
    88 			)
    89 		) );
    89 		) );
       
    90 
       
    91 		register_rest_route( 'akismet/v1', '/alert', array(
       
    92 			array(
       
    93 				'methods' => WP_REST_Server::READABLE,
       
    94 				'permission_callback' => array( 'Akismet_REST_API', 'remote_call_permission_callback' ),
       
    95 				'callback' => array( 'Akismet_REST_API', 'get_alert' ),
       
    96 				'args' => array(
       
    97 					'key' => array(
       
    98 						'required' => false,
       
    99 						'type' => 'string',
       
   100 						'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ),
       
   101 						'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ),
       
   102 					),
       
   103 				),
       
   104 			),
       
   105 			array(
       
   106 				'methods' => WP_REST_Server::EDITABLE,
       
   107 				'permission_callback' => array( 'Akismet_REST_API', 'remote_call_permission_callback' ),
       
   108 				'callback' => array( 'Akismet_REST_API', 'set_alert' ),
       
   109 				'args' => array(
       
   110 					'key' => array(
       
   111 						'required' => false,
       
   112 						'type' => 'string',
       
   113 						'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ),
       
   114 						'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ),
       
   115 					),
       
   116 				),
       
   117 			),
       
   118 			array(
       
   119 				'methods' => WP_REST_Server::DELETABLE,
       
   120 				'permission_callback' => array( 'Akismet_REST_API', 'remote_call_permission_callback' ),
       
   121 				'callback' => array( 'Akismet_REST_API', 'delete_alert' ),
       
   122 				'args' => array(
       
   123 					'key' => array(
       
   124 						'required' => false,
       
   125 						'type' => 'string',
       
   126 						'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ),
       
   127 						'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ),
       
   128 					),
       
   129 				),
       
   130 			)
       
   131 		) );
    90 	}
   132 	}
    91 
   133 
    92 	/**
   134 	/**
    93 	 * Get the current Akismet API key.
   135 	 * Get the current Akismet API key.
    94 	 *
   136 	 *
   229 		}
   271 		}
   230 
   272 
   231 		return rest_ensure_response( $stat_totals );
   273 		return rest_ensure_response( $stat_totals );
   232 	}
   274 	}
   233 
   275 
       
   276 	/**
       
   277 	 * Get the current alert code and message. Alert codes are used to notify the site owner
       
   278 	 * if there's a problem, like a connection issue between their site and the Akismet API,
       
   279 	 * invalid requests being sent, etc.
       
   280 	 *
       
   281 	 * @param WP_REST_Request $request
       
   282 	 * @return WP_Error|WP_REST_Response
       
   283 	 */
       
   284 	public static function get_alert( $request ) {
       
   285 		return rest_ensure_response( array(
       
   286 			'code' => get_option( 'akismet_alert_code' ),
       
   287 			'message' => get_option( 'akismet_alert_msg' ),
       
   288 		) );
       
   289 	}
       
   290 
       
   291 	/**
       
   292 	 * Update the current alert code and message by triggering a call to the Akismet server.
       
   293 	 *
       
   294 	 * @param WP_REST_Request $request
       
   295 	 * @return WP_Error|WP_REST_Response
       
   296 	 */
       
   297 	public static function set_alert( $request ) {
       
   298 		delete_option( 'akismet_alert_code' );
       
   299 		delete_option( 'akismet_alert_msg' );
       
   300 
       
   301 		// Make a request so the most recent alert code and message are retrieved.
       
   302 		Akismet::verify_key( Akismet::get_api_key() );
       
   303 
       
   304 		return self::get_alert( $request );
       
   305 	}
       
   306 
       
   307 	/**
       
   308 	 * Clear the current alert code and message.
       
   309 	 *
       
   310 	 * @param WP_REST_Request $request
       
   311 	 * @return WP_Error|WP_REST_Response
       
   312 	 */
       
   313 	public static function delete_alert( $request ) {
       
   314 		delete_option( 'akismet_alert_code' );
       
   315 		delete_option( 'akismet_alert_msg' );
       
   316 
       
   317 		return self::get_alert( $request );
       
   318 	}
       
   319 
   234 	private static function key_is_valid( $key ) {
   320 	private static function key_is_valid( $key ) {
   235 		$response = Akismet::http_post(
   321 		$response = Akismet::http_post(
   236 			Akismet::build_query(
   322 			Akismet::build_query(
   237 				array(
   323 				array(
   238 					'key' => $key,
   324 					'key' => $key,
   251 
   337 
   252 	public static function privileged_permission_callback() {
   338 	public static function privileged_permission_callback() {
   253 		return current_user_can( 'manage_options' );
   339 		return current_user_can( 'manage_options' );
   254 	}
   340 	}
   255 
   341 
       
   342 	/**
       
   343 	 * For calls that Akismet.com makes to the site to clear outdated alert codes, use the API key for authorization.
       
   344 	 */
       
   345 	public static function remote_call_permission_callback( $request ) {
       
   346 		$local_key = Akismet::get_api_key();
       
   347 
       
   348 		return $local_key && ( strtolower( $request->get_param( 'key' ) ) === strtolower( $local_key ) );
       
   349 	}
       
   350 
   256 	public static function sanitize_interval( $interval, $request, $param ) {
   351 	public static function sanitize_interval( $interval, $request, $param ) {
   257 		$interval = trim( $interval );
   352 		$interval = trim( $interval );
   258 
   353 
   259 		$valid_intervals = array( '60-days', '6-months', 'all', );
   354 		$valid_intervals = array( '60-days', '6-months', 'all', );
   260 
   355