InstapageCmsPluginServicesModel.php in Instapage plugin 8.3
File
core/models/InstapageCmsPluginServicesModel.php
View source
<?php
class InstapageCmsPluginServicesModel {
private static $servicesModel = null;
public static function getInstance() {
if (self::$servicesModel === null) {
self::$servicesModel = new InstapageCmsPluginServicesModel();
}
return self::$servicesModel;
}
public function isServicesRequest() {
if (strpos($_SERVER['REQUEST_URI'], 'instapage-proxy-services') !== false) {
InstapageCmsPluginHelper::writeDiagnostics($_SERVER['REQUEST_URI'], 'Proxy services URL');
return true;
}
return false;
}
public function stripSlashesGpc(&$value) {
$value = stripslashes($value);
}
public function processProxyServices() {
$api = InstapageCmsPluginAPIModel::getInstance();
$url = filter_input(INPUT_GET, 'url');
if (strpos($url, 'ajax/pageserver/email') === false) {
throw new Exception('Unsupported endpoint: ' . $url);
}
$url = InstapageCmsPluginConnector::getURLWithSelectedProtocol(INSTAPAGE_PROXY_ENDPOINT . $url);
array_walk_recursive($_POST, array(
$this,
'stripSlashesGpc',
));
if (isset($_POST) && !empty($_POST)) {
$_POST['user_ip'] = $_SERVER['REMOTE_ADDR'];
}
$data = $_POST;
$data['ajax'] = 1;
$response = $api
->remotePost($url, $data);
if (isset($response['response']['code']) && $response['response']['code'] !== 200) {
$this
->disableCrossOriginProxy();
$matches = array();
$pattern = '/email\\/(\\d*)/';
preg_match($pattern, $url, $matches);
}
InstapageCmsPluginHelper::writeDiagnostics($url, 'Proxy services URL');
InstapageCmsPluginHelper::writeDiagnostics($data, 'Proxy data');
InstapageCmsPluginHelper::writeDiagnostics($response, 'Proxy response');
$status = isset($response->status) ? $response->status : false;
$responseCode = isset($response['response']['code']) ? $response['response']['code'] : 200;
if ($status === 'ERROR') {
$errorMessage = isset($response->message) ? $response->message : false;
if (!empty($errorMessage)) {
throw new Exception($errorMessage);
}
else {
throw new Exception('500 Internal Server Error');
}
}
ob_start();
ob_end_clean();
header('Content-Type: text/json; charset=UTF-8');
echo trim(isset($response['body']) ? $response['body'] : '');
status_header($responseCode);
exit;
}
private function disableCrossOriginProxy() {
$options = InstapageCmsPluginHelper::getOptions();
$options->config->crossOrigin = 0;
InstapageCmsPluginHelper::updateOptions($options);
}
}