render_intro( array(
				'api_key' => $config->get_string( 'cdnfsd.stackpath.api_key' ) ) );
	}
	private function render_intro( $details ) {
		$config = Dispatcher::config();
		$url_obtain_key = W3TC_STACKPATH_AUTHORIZE_URL;
		include  W3TC_DIR . '/Cdnfsd_StackPath_Popup_View_Intro.php';
		exit();
	}
	public function w3tc_ajax_cdn_stackpath_fsd_list_zones() {
		$api_key = Util_Request::get_string( 'api_key' );
		$api = Cdn_StackPath_Api::create( $api_key );
		if ( !$api->is_valid() ) {
			$this->render_intro( array(
					'api_key' => $api_key,
					'error_message' => 'Can\'t authenticate: API key not valid'
				) );
			exit();
		}
		try {
			$zones = $api->get_sites();
		} catch ( \Exception $ex ) {
			$error_message = 'Can\'t authenticate: ' . $ex->getMessage();
			if ( strpos( $error_message, 'not whitelisted' ) > 0 ) {
				$error_message .= '. You can whitelist IP ' .
					'here';
			}
			$this->render_intro( array(
					'api_key' => $api_key,
					'error_message' => $error_message
				) );
			exit();
		}
		$details = array(
			'api_key' => $api_key,
			'zones' => $zones
		);
		include  W3TC_DIR . '/Cdnfsd_StackPath_Popup_View_Zones.php';
		exit();
	}
	public function w3tc_ajax_cdn_stackpath_fsd_view_zone() {
		$api_key = Util_Request::get_string( 'api_key' );
		$zone_id = Util_Request::get( 'zone_id', '' );
		$details = array(
			'api_key' => $api_key,
			'zone_id' => $zone_id,
			'name' => '',
			'url' => array(
				'new' => get_home_url() ),
			'ip' => array(),
			// needs to be off since original DNS will be replaced with stackpath's
			'dns_check' => array(
				'new' => 0
			),
			// needs to be off, since WP issues no-cache headers for wp-admin
			// and logged-in users
			'ignore_cache_control' => array(
				'new' => 0
			),
			'custom_domain' => array(
				'new' => Util_Environment::home_url_host()
			)
		);
		if ( empty( $zone_id ) ) {
			// create new zone mode
			$details['name'] = Util_Request::get( 'zone_new_name' );
			$details['ip']['new'] = Cdnfsd_Util::get_suggested_home_ip();
		} else {
			$api = Cdn_StackPath_Api::create( $api_key );
			try {
				$zone = $api->get_site( $zone_id );
				$custom_domains = $api->get_custom_domains( $zone_id );
			} catch ( \Exception $ex ) {
				$this->render_intro( array(
						'api_key' => $api_key,
						'error_message' => 'Can\'t obtain zone: ' . $ex->getMessage()
					) );
				exit();
			}
			$details['custom_domain']['current'] = '';
			foreach ( $custom_domains as $d ) {
				$details['custom_domain']['current'] = $d;
				if ( $d == Util_Environment::home_url_host() )
					break;
			}
			$details['name'] = $zone['name'];
			$details['dns_check']['current'] = $zone['dns_check'];
			$details['ignore_cache_control'] = $zone['ignore_cache_control'];
			$details['url']['current'] = $zone['url'];
			$details['ip']['current'] = $zone['ip'];
			$origin_ip = Cdnfsd_Util::get_suggested_home_ip();
			$cdn_ip = gethostbyname( $zone['tmp_url'] );
			if ( $origin_ip != $cdn_ip )
				$details['ip']['new'] = $origin_ip;
		}
		include  W3TC_DIR . '/Cdnfsd_StackPath_Popup_View_Zone.php';
		exit();
	}
	private function render_zone_value_change( $details, $field ) {
		Util_Ui::hidden( '', $field, $details[$field]['new'] );
		if ( !isset( $details[$field]['current'] ) ||
			$details[$field]['current'] == $details[$field]['new'] )
			echo esc_html( $details[ $field ]['new'] );
		else {
			echo 'currently set to ' .
				esc_html( empty( $details[ $field ]['current'] ) ?
				'
';
			echo 'will be changed to ' .
				esc_html( $details[ $field ]['new'] ) . '
';
		}
	}
	private function render_zone_boolean_change( $details, $field ) {
		Util_Ui::hidden( '', $field, $details[$field]['new'] );
		if ( !isset( $details[$field]['current'] ) ) {
			echo 'will be set to ';
			echo esc_html( $this->render_zone_boolean( $details[ $field ]['new'] ) );
			echo '';
		} else if ( $details[$field]['current'] == $details[$field]['new'] ) {
				echo '';
				echo esc_html( $this->render_zone_boolean( $details[ $field ]['new'] ) );
				echo '';
			} else {
			echo 'currently set to ';
			$this->render_zone_boolean( $details[$field]['current'] );
			echo '
';
			echo 'will be changed to ';
			$this->render_zone_boolean( $details[$field]['new'] );
			echo '
';
		}
	}
	private function render_zone_boolean( $v ) {
		if ( $v == 0 )
			echo 'disabled';
		else
			echo 'enabled';
	}
	private function render_zone_ip_change( $details, $field ) {
		Util_Ui::textbox( '', $field, $details[$field]['new'] );
		if ( isset( $details[$field]['current'] ) &&
			$details[$field]['current'] != $details[$field]['new'] ) {
			echo '
currently set to ' . esc_html( $details[ $field ]['current'] ) . '
'; } } public function w3tc_ajax_cdn_stackpath_fsd_configure_zone() { $api_key = Util_Request::get_string( 'api_key' ); $zone_id = Util_Request::get( 'zone_id', '' ); $zone = array( 'name' => Util_Request::get( 'name' ), 'label' => Util_Request::get( 'name' ), 'url' => Util_Request::get( 'url' ), 'use_stale' => 1, 'queries' => 1, 'compress' => 1, 'backend_compress' => 1, 'dns_check' => Util_Request::get( 'dns_check' ), 'ip' => Util_Request::get( 'ip' ) ); if ( empty( $zone['ip'] ) ) { unset( $zone['ip'] ); } $api = Cdn_StackPath_Api::create( $api_key ); try { if ( empty( $zone_id ) ) { $response = $api->create_site( $zone ); $zone_id = $response['id']; } else { $response = $api->update_site( $zone_id, $zone ); } $custom_domains = $api->get_custom_domains( $zone_id ); $custom_domain = Util_Request::get( 'custom_domain' ); $added = false; foreach ( $custom_domains as $d ) { if ( $d == $custom_domain ) { $added = true; break; } } if ( !$added ) { $api->create_custom_domain( $zone_id, $custom_domain ); } } catch ( \Exception $ex ) { $this->render_intro( array( 'api_key' => $api_key, 'error_message' => 'Failed to configure custom domain ' . $custom_domain . ': ' . $ex->getMessage() ) ); exit(); } $zone_domain = $response['tmp_url']; $c = Dispatcher::config(); $c->set( 'cdnfsd.stackpath.api_key', $api_key ); $c->set( 'cdnfsd.stackpath.zone_id', $zone_id ); $c->set( 'cdnfsd.stackpath.zone_domain', $zone_domain ); $c->save(); $details = array( 'name' => $zone['name'], 'home_domain' => Util_Environment::home_url_host(), 'dns_cname_target' => $zone_domain, ); include W3TC_DIR . '/Cdnfsd_StackPath_Popup_View_Success.php'; exit(); } public function w3tc_ajax_cdn_stackpath_fsd_configure_zone_skip() { $api_key = Util_Request::get_string( 'api_key' ); $zone_id = Util_Request::get( 'zone_id', '' ); $api = Cdn_StackPath_Api::create( $api_key ); try { $zone = $api->get_site( $zone_id ); } catch ( \Exception $ex ) { $this->render_intro( array( 'api_key' => $api_key, 'error_message' => 'Failed to obtain custom domains: ' . $ex->getMessage() ) ); exit(); } $zone_domain = $zone['cdn_url']; $c = Dispatcher::config(); $c->set( 'cdnfsd.stackpath.api_key', $api_key ); $c->set( 'cdnfsd.stackpath.zone_id', $zone_id ); $c->set( 'cdnfsd.stackpath.zone_domain', $zone_domain ); $c->save(); $details = array( 'name' => $zone['name'], 'home_domain' => Util_Environment::home_url_host(), 'dns_cname_target' => $zone_domain, ); include W3TC_DIR . '/Cdnfsd_StackPath_Popup_View_Success.php'; exit(); } }