err( 'account_id_empty', __( 'Cloudflare account ID is not set. Go to PRAutoBlogger → Settings → Images.', 'prautoblogger' ) ); } $stored = (string) get_option( 'prautoblogger_cloudflare_ai_token', '' ); $api_token = ''; if ( '' !== $stored ) { // Handle legacy plaintext tokens (saved before the field was in the encrypted list). $api_token = PRAutoBlogger_Encryption::is_encrypted( $stored ) ? (string) PRAutoBlogger_Encryption::decrypt( $stored ) : $stored; } if ( '' === $api_token ) { return $this->err( 'token_empty', __( 'Cloudflare API token is not set. Go to PRAutoBlogger → Settings → Images.', 'prautoblogger' ) ); } $response = wp_remote_get( sprintf( 'https://api.cloudflare.com/client/v4/accounts/%s/ai/models/search?per_page=1', rawurlencode( $account_id ) ), [ 'timeout' => self::TIMEOUT_SECONDS, 'headers' => [ 'Authorization' => 'Bearer ' . $api_token, 'Content-Type' => 'application/json', ], ] ); if ( is_wp_error( $response ) ) { $msg = $response->get_error_message(); PRAutoBlogger_Logger::instance()->error( sprintf( 'Cloudflare credential check wp_error: %s', $msg ), 'cloudflare-image' ); return $this->err( 'wp_error:' . $msg, sprintf( /* translators: %s: transport-layer error message. */ esc_html__( 'Network error reaching Cloudflare: %s', 'prautoblogger' ), esc_html( $msg ) ) ); } $status = (int) wp_remote_retrieve_response_code( $response ); if ( 200 === $status ) { return [ 'status' => 'ok', 'message' => __( 'Cloudflare Workers AI connected.', 'prautoblogger' ), ]; } $body = (string) wp_remote_retrieve_body( $response ); PRAutoBlogger_Logger::instance()->warning( sprintf( 'Cloudflare credential check HTTP %d: %s', $status, substr( $body, 0, 200 ) ), 'cloudflare-image' ); return $this->err( sprintf( 'http_%d', $status ), sprintf( /* translators: %1$d: HTTP status, %2$s: response body. */ esc_html__( 'Cloudflare returned HTTP %1$d. %2$s', 'prautoblogger' ), $status, esc_html( substr( $body, 0, 200 ) ) ) ); } /** * @return array{status: string, message: string, debug: string} */ private function err( string $debug, string $message ): array { return [ 'status' => 'error', 'message' => $message, 'debug' => $debug, ]; } }