client; } public function get_openstack_service($opts, $useservercerts = false, $disablesslverify = null) { $user = $opts['user']; $apikey = $opts['apikey']; $authurl = $opts['authurl']; $region = (!empty($opts['region'])) ? $opts['region'] : null; include_once(UPDRAFTPLUS_DIR.'/vendor/autoload.php'); global $updraftplus; // The new authentication APIs don't match the values we were storing before $new_authurl = ('https://lon.auth.api.rackspacecloud.com' == $authurl || 'uk' == $authurl) ? Rackspace::UK_IDENTITY_ENDPOINT : Rackspace::US_IDENTITY_ENDPOINT; if (null === $disablesslverify) $disablesslverify = UpdraftPlus_Options::get_updraft_option('updraft_ssl_disableverify'); if (empty($user) || empty($apikey)) throw new Exception(__('Authorisation failed (check your credentials)', 'updraftplus')); $updraftplus->log("Cloud Files authentication URL: ".$new_authurl); $client = new Rackspace($new_authurl, array( 'username' => $user, 'apiKey' => $apikey )); $this->client = $client; if ($disablesslverify) { $client->setSslVerification(false); } else { if ($useservercerts) { $client->setConfig(array($client::SSL_CERT_AUTHORITY, 'system')); } else { $client->setSslVerification(UPDRAFTPLUS_DIR.'/includes/cacert.pem', true, 2); } } return $client->objectStoreService('cloudFiles', $region); } /** * This method overrides the parent method and lists the supported features of this remote storage option. * * @return Array - an array of supported features (any features not * mentioned are assumed to not be supported) */ public function get_supported_features() { // This options format is handled via only accessing options via $this->get_options() return array('multi_options', 'config_templates', 'multi_storage'); } /** * Retrieve default options for this remote storage module. * * @return Array - an array of options */ public function get_default_options() { return array( 'user' => '', 'authurl' => 'https://auth.api.rackspacecloud.com', 'apikey' => '', 'path' => '', 'region' => null ); } /** * Get the pre configuration template * * @return String - the template */ public function get_pre_configuration_middlesection_template() { global $updraftplus_admin; $classes = $this->get_css_classes(); if (!function_exists('json_last_error')) { $updraftplus_admin->show_double_warning(''.__('Warning', 'updraftplus').': '.sprintf(__('Your web server\'s PHP installation does not included a required module (%s). Please contact your web hosting provider\'s support.', 'updraftplus'), 'json').' '.sprintf(__("UpdraftPlus's %s module requires %s. Please do not file any support requests; there is no alternative.", 'updraftplus'), 'Cloud Files', 'json'), 'cloudfiles', false); } echo '

' . __('Get your API key from your Rackspace Cloud console (read instructions here), then pick a container name to use for storage. This container will be created for you if it does not already exist.', 'updraftplus').' '.__('Also, you should read this important FAQ.', 'updraftplus').'

'; } /** * This gives the partial template string to the settings page for the CloudFiles settings. * * @return String - the partial template, ready for substitutions to be carried out */ public function get_configuration_middlesection_template() { global $updraftplus_admin; $classes = $this->get_css_classes(); $template_str = ' '.__('US or UK-based Rackspace Account', 'updraftplus').': '.__('Cloud Files Storage Region', 'updraftplus').': '.__('Cloud Files Username', 'updraftplus').': output_settings_field_name_and_id('user', true).' value="{{user}}" />
'.apply_filters('updraft_cloudfiles_apikeysetting', ''.__('To create a new Rackspace API sub-user and API key that has access only to this Rackspace container, use this add-on.', 'updraftplus').'').'
'.__('Cloud Files API Key', 'updraftplus').': output_settings_field_name_and_id('apikey', true).' value="{{apikey}}" /> '.apply_filters('updraftplus_cloudfiles_location_description', __('Cloud Files Container', 'updraftplus')).': output_settings_field_name_and_id('path', true).' value="{{path}}" /> '; return $template_str; } /** * Modifies handerbar template options * * @param array $opts handerbar template options * @return array - Modified handerbar template options */ public function transform_options_for_template($opts) { $opts['regions'] = array( 'DFW' => __('Dallas (DFW) (default)', 'updraftplus'), 'SYD' => __('Sydney (SYD)', 'updraftplus'), 'ORD' => __('Chicago (ORD)', 'updraftplus'), 'IAD' => __('Northern Virginia (IAD)', 'updraftplus'), 'HKG' => __('Hong Kong (HKG)', 'updraftplus'), 'LON' => __('London (LON)', 'updraftplus') ); $opts['region'] = (empty($opts['region'])) ? 'DFW' : $opts['region']; if (isset($opts['apikey'])) { $opts['apikey'] = trim($opts['apikey']); } $opts['authurl'] = !empty($opts['authurl']) ? $opts['authurl'] : ''; return $opts; } /** * Perform a test of user-supplied credentials, and echo the result * * @param Array $posted_settings - settings to test */ public function credentials_test($posted_settings) { if (empty($posted_settings['apikey'])) { printf(__("Failure: No %s was given.", 'updraftplus'), __('API key', 'updraftplus')); return; } if (empty($posted_settings['user'])) { printf(__("Failure: No %s was given.", 'updraftplus'), __('Username', 'updraftplus')); return; } $opts = array( 'user' => $posted_settings['user'], 'apikey' => $posted_settings['apikey'], 'authurl' => $posted_settings['authurl'], 'region' => (empty($posted_settings['region'])) ? null : $posted_settings['region'] ); $this->credentials_test_go($opts, $posted_settings['path'], $posted_settings['useservercerts'], $posted_settings['disableverify']); } }