Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 38
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
Sitelock
0.00% covered (danger)
0.00%
0 / 38
0.00% covered (danger)
0.00%
0 / 3
110
0.00% covered (danger)
0.00%
0 / 1
 should_enable
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 purge_all
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
30
 purge_url
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3namespace NewfoldLabs\WP\Module\Performance\Cache\Types;
4
5use NewfoldLabs\WP\Module\Performance\Cache\Purgeable;
6use NewfoldLabs\WP\ModuleLoader\Container;
7
8/**
9 * Sitelock cache type.
10 */
11class Sitelock extends CacheBase implements Purgeable {
12
13    /**
14     * Whether the code for this cache type should be loaded.
15     *
16     * @param Container $container The dependency injection container.
17     *
18     * @return bool True if the code should be loaded, false otherwise.
19     */
20    public static function should_enable( Container $container ) {
21        return (bool) \get_option( 'endurance_sitelock_enabled', false );
22    }
23
24    /**
25     * Purge all content from the Sitelock CDN cache.
26     */
27    public function purge_all() {
28
29        $refresh_token = \get_option( '_mm_refresh_token' );
30
31        if ( false === $refresh_token ) {
32            return;
33        }
34
35        $endpoint = 'https://my.bluehost.com/cgi/wpapi/cdn_purge';
36        $domain   = wp_parse_url( \home_url(), PHP_URL_HOST );
37        $query    = add_query_arg( array( 'domain' => $domain ), $endpoint );
38
39        $path = ABSPATH;
40        $path = explode( 'public_html/', $path );
41        if ( 2 === count( $path ) ) {
42            $path = '/public_html/' . $path[1];
43        } else {
44            return;
45        }
46
47        $args = array(
48            'headers' => array(
49                'x-api-refresh-token' => $refresh_token,
50                'x-api-path'          => bin2hex( $path ),
51            ),
52        );
53
54        // If WP_DEBUG is enabled, we want to wait for a response.
55        if ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) {
56            $args['blocking'] = false;
57            $args['timeout']  = 0.01;
58        }
59
60        wp_remote_get( $query, $args );
61    }
62
63    /**
64     * Purge a specific URL from the Sitelock CDN cache.
65     *
66     * @param string $url The URL to purge.
67     */
68    public function purge_url( $url ) {
69
70        $refreshToken = \get_option( '_mm_refresh_token' );
71
72        if ( false === $refreshToken ) {
73            return;
74        }
75
76        $path    = wp_parse_url( $url, PHP_URL_PATH );
77        $pattern = rawurlencode( $path . '$' );
78        $domain  = wp_parse_url( \home_url(), PHP_URL_HOST );
79
80        $args = array(
81            'method'  => 'PUT',
82            'headers' => array(
83                'X-MOJO-TOKEN' => $refreshToken,
84            ),
85        );
86
87        // If WP_DEBUG is enabled, we want to wait for a response.
88        if ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) {
89            $args['blocking'] = false;
90            $args['timeout']  = 0.01;
91        }
92
93        wp_remote_post( "https://my.bluehost.com/api/domains/{$domain}/caches/sitelock/{$pattern}", $args );
94    }
95}