/**
  * Flushes CDN completely
  */
 function flush_all()
 {
     if (empty($this->access_key) || empty($this->secret_key) || empty($this->distribution_id)) {
         throw new \Exception(__('Access key not specified.', 'w3-total-cache'));
     }
     $api = new Cdn_CloudFrontFsd_Api($this->access_key, $this->secret_key);
     $uris = array('/*');
     $api->invalidation_create($this->distribution_id, $uris);
 }
 public function w3tc_ajax_cdn_cloudfront_fsd_configure_distribution()
 {
     $access_key = $_REQUEST['access_key'];
     $secret_key = $_REQUEST['secret_key'];
     $distribution_id = Util_Request::get('distribution_id', '');
     $origin_id = rand();
     $distribution = array('Comment' => Util_Request::get('distribution_comment'), 'Origins' => array('Quantity' => 1, 'Items' => array('Origin' => array('Id' => $origin_id, 'DomainName' => Util_Request::get('origin'), 'OriginPath' => '', 'CustomOriginConfig' => array('HTTPPort' => 80, 'HTTPSPort' => 443, 'OriginProtocolPolicy' => 'match-viewer')))), 'Aliases' => array('Quantity' => 1, 'Items' => array('CNAME' => Util_Request::get('alias'))), 'DefaultCacheBehavior' => array('TargetOriginId' => $origin_id, 'ForwardedValues' => array('QueryString' => 'true', 'Cookies' => array('Forward' => 'all'), 'Headers' => array('Quantity' => 1, 'Items' => array('Name' => 'Host'))), 'AllowedMethods' => array('Quantity' => 7, 'Items' => array('Method' => array('GET', 'HEAD', 'OPTIONS', 'PUT', 'POST', 'PATCH', 'DELETE')), 'CachedMethods' => array('Quantity' => 2, 'Items' => array('Method' => array('GET', 'HEAD')))), 'MinTTL' => 0));
     try {
         $api = new Cdn_CloudFrontFsd_Api($access_key, $secret_key);
         if (empty($distribution_id)) {
             $distribution['DefaultCacheBehavior']['TrustedSigners'] = array('Enabled' => 'false', 'Quantity' => 0);
             $distribution['DefaultCacheBehavior']['ViewerProtocolPolicy'] = 'allow-all';
             $response = $api->distribution_create($distribution);
             $distribution_id = $response['Id'];
         } else {
             $response = $api->distribution_update($distribution_id, $distribution);
         }
     } catch (\Exception $ex) {
         $this->render_intro(array('error_message' => 'Failed to configure distribution: ' . $ex->getMessage()));
         exit;
     }
     $distribution_domain = $response['DomainName'];
     $c = Dispatcher::config();
     $c->set('cdn.cloudfront_fsd.access_key', $access_key);
     $c->set('cdn.cloudfront_fsd.secret_key', $secret_key);
     $c->set('cdn.cloudfront_fsd.distribution_id', $distribution_id);
     $c->set('cdn.cloudfront_fsd.distribution_domain', $distribution_domain);
     $c->save();
     $details = array('name' => $distribution['Comment'], 'home_domain' => Util_Environment::home_url_host(), 'dns_cname_target' => $distribution_domain);
     include W3TC_DIR . '/Cdn_CloudFrontFsd_Popup_View_Success.php';
     exit;
 }