Home › Forums › WoodMart support forum › Woodmart Core Incompatible with WooCommerce Amazon & eBay Integration › Reply To: Woodmart Core Incompatible with WooCommerce Amazon & eBay Integration
July 2, 2020 at 10:37 am
#208124
Edat
Participant
This is the full public function in /wp-content/plugins/woocommerce-amazon-ebay-integration/woocommerce-amazon-ebay-integration.php
/**
* proxy is used to translate local requests to the wordpress instance that represent
* requests for UI and proxies those requests from the server back to Codisto
*
*/
public function proxy() {
global $wp;
error_reporting( E_ERROR | E_PARSE );
set_time_limit( 0 );
@ini_set( 'zlib.output_compression', 'Off' );
@ini_set( 'output_buffering', 'Off' );
@ini_set( 'output_handler', '' );
while( ob_get_level() > 1 ) {
@ob_end_clean();
}
if ( ob_get_level() > 0 ) {
@ob_clean();
}
if ( isset( $_GET['productid'] ) ) {
wp_redirect( admin_url( 'post.php?post='.urlencode( wp_unslash( $_GET['productid'] ) ).'&action=edit#codisto_product_data' ) );
exit;
}
$HostKey = get_option( 'codisto_key' );
if ( ! function_exists( 'getallheaders' ) ) {
function getallheaders() {
$headers = array();
foreach ( $_SERVER as $name => $value ) {
if ( substr( $name, 0, 5 ) == 'HTTP_' ) {
$headers[str_replace( ' ', '-', ucwords( strtolower( str_replace( '_', ' ', substr( $name, 5 ) ) ) ) )] = $value;
} elseif ( $name == 'CONTENT_TYPE' ) {
$headers['Content-Type'] = $value;
} elseif ( $name == 'CONTENT_LENGTH' ) {
$headers['Content-Length'] = $value;
}
}
return $headers;
}
}
$querystring = preg_replace( '/q=[^&]*&/', '', $_SERVER['QUERY_STRING'] );
$path = $wp->query_vars['codisto-proxy-route'] . ( preg_match( '/\/(?:\\?|$)/', $_SERVER['REQUEST_URI'] ) ? '/' : '' );
$storeId = '0';
$merchantid = get_option( 'codisto_merchantid' );
if ( isset( $_GET['merchantid'] ) ) {
$merchantid = (int)$_GET['merchantid'];
} else {
$storematch = array();
if ( preg_match( '/^ebaytab\/(\d+)\/(\d+)(?:\/|$)/', $path, $storematch ) ) {
$storeId = (int)$storematch[1];
$merchantid = (int)$storematch[2];
$path = preg_replace( '/(^ebaytab\/)(\d+\/?)(\d+\/?)/', '$1', $path );
}
if ( preg_match( '/^ebaytab\/(\d+)(?:\/|$)/', $path, $storematch ) ) {
if ( isset( $storematch[2] ) ) {
$merchantid = (int)$storematch[2];
}
$path = preg_replace( '/(^ebaytab\/)(\d+\/?)/', '$1', $path );
}
}
if ( ! $merchantid ) {
$this->sendHttpHeaders(
'404 Not Found',
array(
'Content-Type' => 'text/html',
'Cache-Control' => 'no-cache, no-store',
'Expires' => 'Thu, 01 Jan 1970 00:00:00 GMT',
'Pragma' => 'no-cache'
)
);
?>
<h1>Resource Not Found</h1>
<?php
exit();
}
$remoteUrl = 'https://ui.codisto.com/' . $merchantid . '/'. $path . ( $querystring ? '?'.$querystring : '' );
$adminUrl = admin_url( 'codisto/ebaytab/'.$storeId.'/'.$merchantid.'/' );
$requestHeaders = array(
'X-Codisto-Cart' => 'woocommerce',
'X-Codisto-Version' => CODISTOCONNECT_VERSION,
'X-HostKey' => $HostKey,
'X-Admin-Base-Url' => $adminUrl,
'Accept-Encoding' => ''
);
$incomingHeaders = getallheaders();
$headerfilter = array(
'host',
'connection',
'accept-encoding'
);
if ( $_SERVER['X-LSCACHE'] == 'on' ) {
$headerfilter[] = 'if-none-match';
}
foreach ( $incomingHeaders as $name => $value ) {
if ( ! in_array( trim( strtolower( $name ) ), $headerfilter ) ) {
$requestHeaders[$name] = $value;
}
}
$httpOptions = array(
'method' => $_SERVER['REQUEST_METHOD'],
'headers' => $requestHeaders,
'timeout' => 60,
'httpversion' => '1.0',
'decompress' => false,
'redirection' => 0
);
$upload_dir = wp_upload_dir();
if ( is_multisite() ) {
$certPath = $upload_dir['basedir'].'/sites/'.get_current_blog_id().'/codisto.crt';
} else {
$certPath = $upload_dir['basedir'].'/codisto.crt';
}
if ( file_exists( $certPath ) ) {
$httpOptions['sslcertificates'] = $certPath;
}
if ( strtolower( $httpOptions['method'] ) == 'post' ) {
$httpOptions['body'] = file_get_contents( 'php://input' );
}
for ( $retry = 0; ; $retry++ ) {
$response = wp_remote_request( $remoteUrl, $httpOptions );
if ( is_wp_error( $response ) ) {
if ( $retry >= 3 ) {
$this->sendHttpHeaders(
'500 Server Error',
array(
'Content-Type' => 'text/html',
'Cache-Control' => 'no-cache, no-store',
'Expires' => 'Thu, 01 Jan 1970 00:00:00 GMT',
'Pragma' => 'no-cache'
)
);
echo '<h1>Error processing request</h1> <p>'.htmlspecialchars( $response->get_error_message() ).'</p>';
exit();
}
if ( $response->get_error_code() == 'http_request_failed' ) {
$certResponse = wp_remote_get( 'http://ui.codisto.com/codisto.crt' );
if ( ! is_wp_error( $certResponse ) ) {
@file_put_contents( $certPath, $certResponse['body'] );
$httpOptions['sslcertificates'] = $certPath;
continue;
}
}
sleep(2);
continue;
}
break;
}
if ( defined( 'ADVANCEDCACHEPROBLEM' ) &&
false == strpos( $_SERVER['REQUEST_URI'], 'wp-admin') ) {
$_SERVER['REQUEST_URI'] = '/wp-admin'.$_SERVER['REQUEST_URI'];
}
status_header( wp_remote_retrieve_response_code( $response ) );
$filterHeaders = array( 'server', 'content-length', 'transfer-encoding', 'date', 'connection', 'x-storeviewmap', 'content-encoding' );
if ( function_exists( 'header_remove' ) ) {
@header_remove( 'Last-Modified' );
@header_remove( 'Pragma' );
@header_remove( 'Cache-Control' );
@header_remove( 'Expires' );
@header_remove( 'Content-Encoding' );
}
foreach ( wp_remote_retrieve_headers( $response ) as $header => $value ) {
if ( ! in_array( strtolower( $header ), $filterHeaders, true ) ) {
if ( is_array( $value ) ) {
header( $header.': '.$value[0], true );
for ( $i = 1; $i < count( $value ); $i++ ) {
header( $header.': '.$value[$i], false );
}
} else {
header( $header.': '.$value, true );
}
}
}
file_put_contents( 'php://output', wp_remote_retrieve_body( $response ) );
exit();
}