Advertisement
Guest User

CloudFlare Class

a guest
Oct 16th, 2016
682
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.92 KB | None | 0 0
  1. <?php
  2. # ========================================================================#
  3. #
  4. #  Author:    Ruslan Mingaev & Dmitry Gordienko
  5. #  Version:   2.0
  6. #  Date:      17-Oct-16
  7. #  Purpose:   Change ip server for domain on CloudFlare.
  8. #  Requires : Requires PHP5.
  9. #  Usage Example:
  10. #                     include("classes/cloudflare.class.php");
  11. #                     $cl = new CloudFlare('email','global_key');
  12. #                     $cl->set_new_ip('domain.com','server_ip');
  13. #
  14. #
  15. # ========================================================================#
  16.  
  17. class CloudFlare {
  18.     private $api_url = 'https://api.cloudflare.com/client/v4/';
  19.     private $email;
  20.     private $global_key;
  21.     private $cookie;
  22.     private $user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:49.0) Gecko/20100101 Firefox/49.0';
  23.  
  24.     public $Response;
  25.  
  26.     public function __construct($email, $global_key) {
  27.         $this->email = $email;
  28.         $this->global_key = $global_key;
  29.     }
  30.  
  31.     public function set_new_ip($domain_name, $new_ip) {
  32.         if($domain_name != null) $data['name'] =  $domain_name;
  33.         $res = $this->api_call('zones', $data);
  34.        
  35.         if($res['success']) {
  36.             $zone_id = $res['result'][0]['id'];
  37.             $record_id = null;
  38.             $records = $this->api_call('zones/'.$zone_id.'/dns_records',array());
  39.  
  40.             foreach ($records['result'] as $dns) {
  41.                 if($dns['type'] == 'A') {
  42.                     $record_id = $dns['id'];
  43.                     break;
  44.                 }
  45.             }
  46.  
  47.             $post['data'] = json_encode(array(
  48.                 'id'        => $record_id,
  49.                 'type'      => 'A',
  50.                 'name'      => '@',
  51.                 'content'   => $new_ip,
  52.                 'zone_id'   => $zone_id,
  53.                 'zone_name' => '@',
  54.                 'proxiable' => true,
  55.                 'proxied'   => false,
  56.                 'locked'    => false,
  57.                 'ttl'       => '120'
  58.             ));
  59.  
  60.             $res = $this->api_call('zones/'.$zone_id.'/dns_records/'.$record_id, $data, $post);
  61.  
  62.             return $res['success'];
  63.         }
  64.     }
  65.  
  66.     private function get_headers(){
  67.         return array(
  68.             "X-Auth-Email: ".$this->email,
  69.             "X-Auth-Key: ".$this->global_key,
  70.             "Content-Type: application/json"
  71.         );
  72.     }
  73.  
  74.     private function api_call($method, $get = null, $post = null) {
  75.         if($post != null) {
  76.             $request = curl_init($this->api_url.$method);
  77.             curl_setopt($request, CURLOPT_POSTFIELDS, $post['data']);
  78.             curl_setopt($request, CURLOPT_CUSTOMREQUEST, 'PUT');
  79.         }else{
  80.             $request = curl_init($this->api_url.$method.'?'.http_build_query($get));
  81.             curl_setopt($request, CURLOPT_CUSTOMREQUEST, 'GET');
  82.         }
  83.         curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
  84.         curl_setopt($request, CURLOPT_COOKIESESSION, true);
  85.         curl_setopt($request, CURLOPT_VERBOSE, 0);
  86.         curl_setopt($request, CURLOPT_USERAGENT, $this->user_agent);
  87.         curl_setopt($request, CURLOPT_COOKIEFILE, $this->cookie);
  88.         curl_setopt($request, CURLOPT_COOKIEJAR, $this->cookie);
  89.         curl_setopt($request, CURLOPT_HTTPHEADER, $this->get_headers());
  90.         $this->Response = curl_exec($request);
  91.         curl_close($request);
  92.  
  93.         return json_decode($this->Response, true);
  94.     }
  95. }
  96. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement