芝麻web文件管理V1.00
编辑当前文件:/home/ephorei/www/wp-content/plugins/ultimate-addons-for-gutenberg/lib/zip-ai/classes/helper.php
__( 'The Zip AI Endpoint was not declared', 'ultimate-addons-for-gutenberg' ), ); } // Get the Auth Token from the Zip AI Settings. $auth_token = self::get_decrypted_auth_token(); // If the Zip Auth Token is not set, then abandon ship. if ( empty( $auth_token ) || ! is_string( $auth_token ) ) { return array( 'error' => __( 'The Zip AI Auth Token is not set.', 'ultimate-addons-for-gutenberg' ), ); } // Set the API URL. $api_url = ZIP_AI_CREDIT_SERVER_API . $endpoint; $api_args = array( 'headers' => array( 'Authorization' => 'Bearer ' . $auth_token, ), 'timeout' => 30, // phpcs:ignore WordPressVIPMinimum.Performance.RemoteRequestTimeout.timeout_timeout -- 30 seconds is required sometime for open ai responses ); // If the data array was passed, add it to the args. if ( ! empty( $body ) && is_array( $body ) ) { $api_args['body'] = $body; } // If there are any extra arguments, then we can overwrite the required arguments. if ( ! empty( $extra_args ) && is_array( $extra_args ) ) { $api_args = array_merge( $api_args, $extra_args ); } // Get the response from the endpoint. $response = wp_remote_post( $api_url, $api_args ); // If the response was an error, or not a 200 status code, then abandon ship. if ( is_wp_error( $response ) || empty( $response['response'] ) || 200 !== wp_remote_retrieve_response_code( $response ) ) { return array( 'error' => __( 'The Zip AI Middleware is not responding.', 'ultimate-addons-for-gutenberg' ), ); } // Get the response body. $response_body = wp_remote_retrieve_body( $response ); // If the response body is not a JSON, then abandon ship. if ( empty( $response_body ) || ! json_decode( $response_body ) ) { return array( 'error' => __( 'The Zip AI Middleware encountered an error.', 'ultimate-addons-for-gutenberg' ), ); } // Return the response body. return json_decode( $response_body, true ); } /** * Get a response from the ZipWP API server. * * @param string $endpoint The endpoint to get the response from. * @since 1.1.2 * @return array The ZipWP API Response. */ public static function get_zipwp_api_response( $endpoint ) { // If the endpoint is not a string, then abandon ship. if ( ! is_string( $endpoint ) ) { return array( 'error' => __( 'The ZipWP Endpoint was not declared', 'ultimate-addons-for-gutenberg' ), ); } // Get the ZipWP Token from the Zip AI Settings. $zipwp_token = self::get_decrypted_zipwp_token(); // If the ZipWP Token is not set, then abandon ship. if ( empty( $zipwp_token ) || ! is_string( $zipwp_token ) ) { return array( 'error' => __( 'The ZipWP Token is not set.', 'ultimate-addons-for-gutenberg' ), ); } // Set the API URL. $api_url = ZIP_AI_ZIPWP_API . $endpoint; // Get the response from the endpoint. $response = wp_remote_get( $api_url, array( 'headers' => array( 'Content-Type' => 'application/json', 'Accept' => 'application/json', 'Authorization' => 'Bearer ' . $zipwp_token, ), 'sslverify' => false, 'timeout' => 30, // phpcs:ignore WordPressVIPMinimum.Performance.RemoteRequestTimeout.timeout_timeout -- 30 seconds is required sometime for the ZipWP API response ) ); // If the response was an error, or not a 200 status code, then abandon ship. if ( is_wp_error( $response ) || empty( $response['response'] ) || 200 !== wp_remote_retrieve_response_code( $response ) ) { return array( 'error' => __( 'The ZipWP API server is not responding.', 'ultimate-addons-for-gutenberg' ), ); } // Get the response body. $response_body = wp_remote_retrieve_body( $response ); // If the response body is not a JSON, then abandon ship. if ( empty( $response_body ) || ! json_decode( $response_body ) ) { return array( 'error' => __( 'The ZipWP API server encountered an error.', 'ultimate-addons-for-gutenberg' ), ); } // Return the response body. return json_decode( $response_body, true ); } /** * Get the decrypted token from the Zip AI Settings. * * @param string $token_name The name of the token. * @since 1.1.2 * @return string The decrypted token. */ private static function get_decrypted_token( $token_name ) { // Get the Zip AI Settings. $zip_ai_token = self::get_setting( $token_name ); // Return early if the ZipWP token is not set. if ( empty( $zip_ai_token ) || ! is_string( $zip_ai_token ) ) { return ''; } // Return the decrypted ZipWP token. return ! empty( trim( $zip_ai_token ) ) ? Utils::decrypt( $zip_ai_token ) : ''; } /** * Get the decrypted auth token. * * @since 1.0.0 * @return string The decrypted auth token. */ public static function get_decrypted_auth_token() { return self::get_decrypted_token( 'auth_token' ); } /** * Get the decrypted ZipWP token. * * @since 1.1.2 * @return string The decrypted ZipWP token. */ public static function get_decrypted_zipwp_token() { return self::get_decrypted_token( 'zip_token' ); } /** * This helper function returns credit details. * * @since 1.0.0 * @return array */ public static function get_credit_details() { // Set the default credit details. $credit_details = array( 'used' => 0, 'total' => 0, 'threshold' => array( 'medium' => ZIP_AI_CREDIT_THRESHOLD_MEDIUM, 'high' => ZIP_AI_CREDIT_THRESHOLD_HIGH, ), 'percentage' => 0, 'status' => 'success', ); // Get the response from the endpoint. $response = self::get_credit_server_response( 'usage' ); // If the response is not an error, then update the credit details. if ( empty( $response['error'] ) && ! empty( $response['total_credits'] ) ) { $credit_details['used'] = ! empty( $response['total_used_credits'] ) ? $response['total_used_credits'] : 0; $credit_details['total'] = $response['total_credits']; $credit_details['percentage'] = intval( ( $credit_details['used'] / $credit_details['total'] ) * 100 ); } else { $credit_details['status'] = 'error'; } return $credit_details; } /** * This helper function returns the current plan details. * * @since 1.1.2 * @return array */ public static function get_current_plan_details() { $current_plan_details = []; // Get the response from the endpoint. $response = self::get_zipwp_api_response( 'plan/current-plan' ); // If the response is not an error, then use it - else create an error response array. if ( empty( $response['error'] ) && is_array( $response ) ) { $current_plan_details = $response; if ( empty( $current_plan_details['status'] ) ) { $current_plan_details['status'] = 'ok'; } } else { $current_plan_details['status'] = 'error'; if ( ! empty( $response['error'] ) ) { $current_plan_details['error'] = $response['error']; } } return $current_plan_details; } /** * Get the authorization middleware url. * * @param array $params An array of parameters to add to the middleware URL. * @since 1.0.0 * @return string The authorization middleware url. */ public static function get_auth_middleware_url( $params = [] ) { // Create the Redirect URL. $redirect_url = add_query_arg( array( 'nonce' => wp_create_nonce( 'zip_ai_auth_nonce' ), 'scs-authorize' => 'true', ), admin_url() ); // Create the Authentication URL. $auth_url = add_query_arg( apply_filters( 'zip_ai_auth_middleware_args', array( 'type' => 'token', 'redirect_url' => rawurlencode( $redirect_url ), ) ), ZIP_AI_MIDDLEWARE ); // Add the plugin param if passed. if ( ! empty( $params['plugin'] ) && is_string( $params['plugin'] ) ) { $auth_url = add_query_arg( 'plugin', sanitize_text_field( $params['plugin'] ), $auth_url ); } // Add the source param if passed. if ( ! empty( $params['source'] ) && is_string( $params['source'] ) ) { $auth_url = add_query_arg( 'source', sanitize_text_field( $params['source'] ), $auth_url ); } // Add the affiliate param if passed. $affiliate = get_option( 'zipwp_partner_url_param', '' ); $affiliate = is_string( $affiliate ) ? sanitize_text_field( $affiliate ) : ''; if ( ! empty( $affiliate ) ) { $auth_url = add_query_arg( 'aff', $affiliate, $auth_url ); } return $auth_url; } /** * Get the revoke url for the auth token. * * @since 1.0.0 * @return string The authorization revoke url. */ public static function get_auth_revoke_url() { $revoke_url = add_query_arg( apply_filters( 'zip_ai_auth_revoke_args', array( array( 'nonce' => wp_create_nonce( 'zip_ai_auth_nonce' ), 'revoke_zip_ai_authorization_token' => 'definitely', ), admin_url(), ) ) ); return $revoke_url; } }