You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Dec 5, 2023. It is now read-only.
/** * Make CloudFlare Client API calls via wp_remote_post * A fork from CloudFlare-API by VEXXHOST, Inc. * * @package Sunny * @subpackage Sunny/includes * @author Tang Rufus <[email protected]> * @since 1.0.0 * @link https://github.com/vexxhost/CloudFlare-API * @link https://www.cloudflare.com/docs/client-api.html */classSunny_CloudFlare_API_Helper {
//The URL of the APIprivatestatic$CLOUDFLARE_API_ENDPOINT = 'https://www.cloudflare.com/api_json.html';
//Service mode values.privatestatic$MODE_SERVICE = array( 'A', 'AAAA', 'CNAME' );
//Prio values.privatestatic$PRIO = array( 'MX', 'SRV' );
//Stores the api keyprivate$token_key;
//Stores the email loginprivate$email;
publicfunction__construct( $email, $token_key )
{
$this->email = sanitize_email( $email );
$this->token_key = sanitize_text_field( $token_key );
}
/** * CLIENT API * Section 3 * Access *//** * 3.1 - Retrieve Domain Statistics For A Given Time Frame * This function retrieves the current stats and settings for a particular website. * It can also be used to get currently settings of values such as the security level. */publicfunctionstats( $domain, $interval = 20 )
{
$data = array(
'a' => 'stats',
'z' => $domain,
'interval' => $interval
);
return$this->http_post( $data );
}
/** * 3.2 - Retrieve A List Of The Domains * This lists all domains in a CloudFlare account along with other data. */publicfunctionzone_load_multi()
{
$data = array(
'a' => 'zone_load_multi'
);
return$this->http_post( $data );
}
/** * 3.3 - Retrieve DNS Records Of A Given Domain * This function retrieves the current DNS records for a particular website. */publicfunctionrec_load_all( $domain )
{
$data = array(
'a' => 'rec_load_all',
'z' => $domain
);
return$this->http_post( $data );
}
/** * 3.4 - Checks For Active Zones And Returns Their Corresponding Zids * This function retrieves domain statistics for a given time frame. */publicfunctionzone_check( $zones )
{
if ( is_array( $zones ) ) {
$zones = implode( ',', $zones );
}
$data = array(
'a' => 'zone_check',
'zones' => $zones
);
return$this->http_post( $data );
}
/** * 3.6 - Check The Threat Score For A Given IP * This function retrieves the current threat score for a given IP. * Note that scores are on a logarithmic scale, where a higher score indicates a higher threat. */publicfunctionthreat_score( $ip )
{
$data = array(
'a' => 'ip_lkup',
'ip' => $ip
);
return$this->http_post( $data );
}
/** * 3.7 - List All The Current Settings * This function retrieves all the current settings for a given domain. */publicfunctionzone_settings( $domain )
{
$data = array(
'a' => 'zone_settings',
'z' => $domain
);
return$this->http_post( $data );
}
/** * Undocumented method * SEE: https://github.com/vexxhost/CloudFlare-API/pull/3 */publicfunctionzone_init( $zone )
{
$data['a'] = 'zone_init';
$data['z'] = $zone;
return$this->http_post( $data );
}
/** * CLIENT API * Section 4 * Modify *//** * 4.1 - Set The Security Level * This function sets the Basic Security Level to I'M UNDER ATTACK! / HIGH / MEDIUM / LOW / ESSENTIALLY OFF. * The switches are: (help|high|med|low|eoff). */publicfunctionsec_lvl( $domain, $mode )
{
$data = array(
'a' => 'sec_lvl',
'z' => $domain,
'v' => $mode
);
return$this->http_post( $data );
}
/** * 4.2 - Set The Cache Level * This function sets the Caching Level to Aggressive or Basic. * The switches are: (agg|basic). */publicfunctioncache_lvl( $domain, $mode )
{
$data = array(
'a' => 'cache_lvl',
'z' => $domain,
'v' => ( 'agg' == strtolower( $mode ) ) ? 'agg' : 'basic'
);
return$this->http_post( $data );
}
/** * 4.3 - Toggling Development Mode * This function allows you to toggle Development Mode on or off for a particular domain. * When Development Mode is on the cache is bypassed. * Development mode remains on for 3 hours or until when it is toggled back off. */publicfunctiondevmode( $domain, $mode )
{
$data = array(
'a' => 'devmode',
'z' => $domain,
'v' => ( true == $mode ) ? 1 : 0
);
return$this->http_post( $data );
}
/** * 4.4 - Clear CloudFlare's Cache * This function will purge CloudFlare of any cached files. * It may take up to 48 hours for the cache to rebuild and optimum performance to be achieved. * This function should be used sparingly. */publicfunctionfpurge_ts( $domain )
{
$data = array(
'a' => 'fpurge_ts',
'z' => $domain,
'v' => 1
);
return$this->http_post( $data );
}
/** * 4.5 - Purge A Single File In CloudFlare's Cache * This function will purge a single file from CloudFlare's cache. */publicfunctionzone_file_purge( $domain, $url )
{
$data = array(
'a' => 'zone_file_purge',
'z' => $domain,
'url' => $url
);
return$this->http_post( $data );
}
/** * 4.6 - Update The Snapshot Of Your Site * This snapshot is used on CloudFlare's challenge page * This function tells CloudFlare to take a new image of your site. * Note that this call is rate limited to once per zone per day. * Also the new image may take up to 1 hour to appear. */publicfunctionupdate_image( $zoneid )
{
$data = array(
'a' => 'zone_grab',
'zid' => $zoneid
);
return$this->http_post( $data );
}
/** * 4.7a - Whitelist IPs * You can add an IP address to your whitelist. */publicfunctionwl( $ip )
{
$data = array(
'a' => 'wl',
'key' => $ip
);
return$this->http_post( $data );
}
/** * 4.7b - Blacklist IPs * You can add an IP address to your blacklist. */publicfunctionban( $ip )
{
$data = array(
'a' => 'ban',
'key' => $ip
);
return$this->http_post( $data );
}
/** * 4.7c - Unlist IPs * You can remove an IP address from the whitelist and the blacklist. */publicfunctionnul( $ip )
{
$data = array(
'a' => 'nul',
'key' => $ip
);
return$this->http_post( $data );
}
/** * 4.8 - Toggle IPv6 Support * This function toggles IPv6 support. */publicfunctionipv46( $domain, $mode )
{
$data = array(
'a' => 'ipv46',
'z' => $domain,
'v' => ( true == $mode ) ? 1 : 0
);
return$this->http_post( $data );
}
/** * 4.9 - Set Rocket Loader * This function changes Rocket Loader setting. */publicfunctionasync( $domain, $mode )
{
$data = array(
'a' => 'async',
'z' => $domain,
'v' => $mode
);
return$this->http_post( $data );
}
/** * 4.10 - Set Minification * This function changes minification settings. */publicfunctionminify( $domain, $mode )
{
$data = array(
'a' => 'minify',
'z' => $domain,
'v' => $mode
);
return$this->http_post( $data );
}
/** * CLIENT API * Section 5 * DNS Record Management *//** * 5.1 - Add A New DNS Record * This function creates a new DNS record for a zone. * See http://www.cloudflare.com/docs/client-api.html#s5.1 for documentation. */publicfunctionrec_new( $domain, $type, $name, $content, $ttl = 1, $mode = 1, $prio = 1, $service = 1, $srvname = 1, $protocol = 1, $weight = 1, $port = 1, $target = 1 )
{
$data = array(
'a' => 'rec_new',
'z' => $domain,
'type' => $type,
'name' => $name,
'content' => $content,
'ttl' => $ttl
);
if ( in_array( $type, self::$MODE_SERVICE ) )
$data['service_mode'] = ( true == $mode ) ? 1 : 0;
elseif ( in_array( $type, self::$PRIO ) ) {
$data['prio'] = $prio;
if ( $type == 'SRV' ) {
$data = array_merge( $data, array(
'service' => $service,
'srvname' => $srvname,
'protocol' => $protocol,
'weight' => $weight,
'port' => $port,
'target' => $target
) );
}
}
return$this->http_post( $data );
}
/** * 5.2 - Edit A DNS Record * This function edits a DNS record for a zone. * See http://www.cloudflare.com/docs/client-api.html#s5.1 for documentation. */publicfunctionrec_edit( $domain, $type, $id, $name, $content, $ttl = 1, $mode = 1, $prio = 1, $service = 1, $srvname = 1, $protocol = 1, $weight = 1, $port = 1, $target = 1 )
{
$data = array(
'a' => 'rec_edit',
'z' => $domain,
'type' => $type,
'id' => $id,
'name' => $name,
'content' => $content,
'ttl' => $ttl
);
if ( in_array( $type, self::$MODE_SERVICE ) )
$data['service_mode'] = ( true == $mode ) ? 1 : 0;
elseif ( in_array( $type, self::$PRIO ) ) {
$data['prio'] = $prio;
if ( 'SRV' == $type ) {
$data = array_merge( $data, array(
'service' => $service,
'srvname' => $srvname,
'protocol' => $protocol,
'weight' => $weight,
'port' => $port,
'target' => $target
) );
}
}
return$this->http_post( $data );
}
/** * 5.3 - Delete A DNS Record * This function deletes a DNS record for a zone. * $zone = zone * $id = The DNS Record ID (Available by using the rec_load_all call) * $type = A|CNAME */publicfunctiondelete_dns_record( $domain, $id )
{
$data = array(
'a' => 'rec_delete',
'z' => $domain,
'id' => $id
);
return$this->http_post( $data );
}
/** * GLOBAL API CALL * HTTP POST a specific task with the supplied data */privatefunctionhttp_post( $data )
{
$data['email'] = $this->email;
$data['tkn'] = $this->token_key;
$response = wp_remote_post(
self::$CLOUDFLARE_API_ENDPOINT,
array(
'body' => $data
)
);
do_action( 'sunny_after_cloudflare_api_request', $response, $data );
return$response;
}
}
The text was updated successfully, but these errors were encountered:
@tangrufus Thanks for letting us know, actually @sfgarza did a great job really building out this API library recently, I suggest you give it a look over, you might find it useful. While not done, it has functions built out for almost every CF API call possible.
What is the best practice to include this library?
This library is a full WP plugin. Embedding another plugin within a plugin is disallowed on wp.org
All I need is class CloudFlareAPI.
Any plan on extract that class into its own package?
And give it a namespace so that plugin author can change that namespace it avoid class already defined errors (see: https://github.com/typisttech/imposter)
Right now, you can just remove this line from composer.json
"type":"wordpress-plugin",
I will check with @sfgarza if we can get it changed to default to library instead. He can also better answer your last question.
To be clear you can also remove the wordpress plugin comment block at the top, but that's not a requirement as just including it in your project it gets ignored so it doesn't show up in plugins.
Sign up for freeto subscribe to this conversation on GitHub.
Already have an account?
Sign in.
The text was updated successfully, but these errors were encountered: