芝麻web文件管理V1.00
编辑当前文件:/home/paymbalq/www/wp-content/plugins/w3-total-cache/Cdn_RackSpace_Api_Tokens.php
array( 'RAX-KSKEY:apiKeyCredentials' => array( 'username' => $user_name, 'apiKey' => $api_key, ), ), ); $result = wp_remote_post( 'https://identity.api.rackspacecloud.com/v2.0/tokens', array( 'headers' => array( 'Accept' => 'application/json', 'Content-Type' => 'application/json', ), // phpcs:ignore Squiz.PHP.CommentedOutCode.Found // 'sslcertificates' => dirname( __FILE__ ) . // '/Cdn_RackSpace_Api_CaCert.pem', 'body' => wp_json_encode( $request_json ), ) ); $response = self::_decode_response( $result ); if ( ! isset( $response['access'] ) ) { throw new \Exception( 'Unexpected authentication response: access token not found' ); } $r = $response['access']; // fill service descriptors by region. if ( ! isset( $r['serviceCatalog'] ) ) { throw new \Exception( 'Unexpected authentication response: serviceCatalog token not found' ); } $services = $r['serviceCatalog']; return array( 'access_token' => $r['token']['id'], 'services' => $services, ); } /** * Retrieves Rackspace Cloud Files service information grouped by region. * * This method processes the provided service descriptors and organizes * object-store and CDN service endpoints by their respective regions. * * @param array $services The array of service descriptors from Rackspace. * * @return array { * An associative array of regions with their service endpoints, including: * * @type string $object-store.publicURL Public URL for object storage. * @type string $object-store.internalURL Internal URL for object storage. * @type string $object-cdn.publicURL Public URL for CDN services. * } */ public static function cloudfiles_services_by_region( $services ) { $by_region = array(); foreach ( $services as $s ) { if ( 'object-store' === $s['type'] ) { foreach ( $s['endpoints'] as $endpoint ) { $region = $endpoint['region']; if ( ! isset( $by_region[ $region ] ) ) { $by_region[ $region ] = array(); } $by_region[ $region ]['object-store.publicURL'] = $endpoint['publicURL']; $by_region[ $region ]['object-store.internalURL'] = $endpoint['internalURL']; } } elseif ( 'rax:object-cdn' === $s['type'] ) { foreach ( $s['endpoints'] as $endpoint ) { $region = $endpoint['region']; if ( ! isset( $by_region[ $region ] ) ) { $by_region[ $region ] = array(); } $by_region[ $region ]['object-cdn.publicURL'] = $endpoint['publicURL']; } } } $by_region = self::_add_region_names( $by_region ); return $by_region; } /** * Retrieves Rackspace CDN service information grouped by region. * * This method processes the provided service descriptors and organizes * CDN endpoints by their respective regions. * * @param array $services The array of service descriptors from Rackspace. * * @return array { * An associative array of regions with their CDN endpoints, including: * * @type string $cdn.publicURL Public URL for CDN services. * } */ public static function cdn_services_by_region( $services ) { $by_region = array(); foreach ( $services as $s ) { if ( 'rax:cdn' === $s['type'] ) { foreach ( $s['endpoints'] as $endpoint ) { $region = $endpoint['region']; if ( ! isset( $by_region[ $region ] ) ) { $by_region[ $region ] = array(); } $by_region[ $region ]['cdn.publicURL'] = $endpoint['publicURL']; } } } $by_region = self::_add_region_names( $by_region ); return $by_region; } /** * Adds human-readable names to the regions based on predefined mappings. * * This method associates known region codes with their human-readable names, * falling back to the original code if no match is found. * * @param array $by_region The associative array of regions with service data. * * @return array The updated array of regions, including a 'name' key with the region's display name. */ private static function _add_region_names( $by_region ) { // try to decode region names. $region_names = array( 'ORD' => 'Chicago (ORD)', 'DFW' => 'Dallas/Ft. Worth (DFW)', 'HKG' => 'Hong Kong (HKG)', 'LON' => 'London (LON)', 'IAD' => 'Northern Virginia (IAD)', 'SYD' => 'Sydney (SYD)', ); $keys = array_keys( $by_region ); foreach ( $keys as $region ) { if ( isset( $region_names[ $region ] ) ) { $by_region[ $region ]['name'] = $region_names[ $region ]; } else { $by_region[ $region ]['name'] = $region; } } return $by_region; } /** * Decodes and validates the API response from Rackspace. * * This method processes the response from a Rackspace API request, verifying * that the response is valid and does not contain errors. * * @param array $result The API response returned by wp_remote_post(). * * @return array The decoded JSON response as an associative array. * * @throws \Exception If the API request fails or the response contains errors. */ private static function _decode_response( $result ) { if ( is_wp_error( $result ) ) { throw new \Exception( 'Failed to reach API endpoint' ); } $response_json = @json_decode( $result['body'], true ); if ( is_null( $response_json ) ) { throw new \Exception( sprintf( // Translators: 1 Result body. \esc_html__( 'Failed to reach API endpoint, got unexpected response: %1$s', 'w3-total-cache' ), \wp_kses_post( $result['body'] ) ) ); } if ( isset( $response_json['unauthorized']['message'] ) ) { throw new \Exception( \esc_html( $response_json['unauthorized']['message'] ) ); } if ( ! in_array( (int) $result['response']['code'], array( 200, 201 ), true ) ) { throw new \Exception( \wp_kses_post( $result['body'] ) ); } return $response_json; } }