HEX
Server: Apache
System: Linux sg241.singhost.net 2.6.32-896.16.1.lve1.4.51.el6.x86_64 #1 SMP Wed Jan 17 13:19:23 EST 2018 x86_64
User: honghock (909)
PHP: 8.0.30
Disabled: passthru,system,shell_exec,show_source,exec,popen,proc_open
Upload Files
File: //opt/cloudlinux/alt-php54/root/usr/share/pear/RVSeagullMod/lib/SGL/Services/REST/Client.php
<?php

/**
 * uses PEAR error management
 */
require_once 'PEAR.php';

/**
 * uses XML_Unserializer to unserialize the response.
 */
require_once 'XML/Unserializer.php';

/**
 * uses XML_Serializer to read result.
 */
require_once 'XML/Serializer.php';

/**
 * uses HTTP to send the request.
 */
require_once 'HTTP/Request.php';

/**
 * Parent class for implementing a REST client, override and customise.
 *
 */
class SGL_Services_REST_Client
{
   /**
    * URI of the REST API
    *
    * @access  private
    * @var     string
    */
    var $_apiUrl = '';

   /**
    * Username
    *
    * @access  private
    * @var     string
    */
    var $_user   = null;

   /**
    * password
    *
    * @access  private
    * @var     string
    */
    var $_passwd = null;

   /**
    * XML_Unserializer, used to parse the XML
    *
    * @access  private
    * @var     object XML_Unserializer
    */
    var $_us = null;

    var $_clientName = 'SGL_Services_REST_Client';

    var $_aOptions = array();

    var $_entityName = '';

    var $_responseXml = '';

    var $_getRequest = '';

    /**
     * Constructor.
     *
     * @param string $user
     * @param string $passwd
     * @return SGL_Services_REST_Client
     */
    public function SGL_Services_REST_Client($aOptions = array(), $user = null, $passwd = null)
    {
        $this->setOptions($aOptions);
        if (!is_null($user) && !is_null($passwd)) {
            $this->_user   = $user;
            $this->_passwd = $passwd;
        }
    }

    public function setOptions($aOptions)
    {
        foreach ($aOptions as $k => $option) {
            $this->_aOptions[$k] = $option;
        }
    }

    public function getOption($optionName)
    {
        if (isset($this->_aOptions[$optionName])) {
            return $this->_aOptions[$optionName];
            $ret = true;
        } else {
            $ret = false;
        }
        return $ret;
    }

   /**
    * Auxiliary method to send a request.
    *
    * @access   private
    * @param    string      REST verb
    * @param    array       parameters
    * @return   array|PEAR_Error
    */
    public function _getRequest($verb, $params = array())
    {
        $url = sprintf('%s/action/%s', $this->_apiUrl, $verb);
        $string = '';
        foreach ($params as $key => $value) {
            if (is_array($value)) {
                foreach ($value as $k => $v) {
                   $string .= $key . '['.$k.']/' .urlencode($v) .'/';
                }
                $value = $string;
            }
            //  remove extra slash if exists
            if (substr($value, -1, 1) == '/') {
                $value = substr($value, 0, (strlen($value) -1));
            }
            $append = (strlen($string))
                ? $value
                : $key . '/' . urlencode($value);
            $string = '';
            $url = $url . '/' . $append;
        }
        $this->_getRequest = $url;
        $request = new HTTP_Request($url);
        ///fix PHP 5.3
        $request = &$request;
        if (!empty($this->_user) && !empty($this->_passwd)) {
            $request->setBasicAuth($this->_user, $this->_passwd);
        }
        $request->addHeader('User-Agent', $this->_clientName);

        $request->sendRequest();
        if ($request->getResponseCode() !== 200) {
            return SGL::raiseError('Invalid Response Code', $request->getResponseCode());
        }

        $data = $this->_processResponse($request);
        return $data;
    }

    public function _postRequest($verb, $params = array(), $oData)
    {
        $url = sprintf('%s/action/%s', $this->_apiUrl, $verb);
        foreach ($params as $key => $value) {
            if (is_array($value)) {
                $value = implode(' ', $value);
            }
            $url = $url . '/' . $key . '/' . urlencode($value);
        }

        $options = array(
            "indent"         => "    ",
            "linebreak"      => "\n",
            "classAsTagName" => true,
            "addDecl" => true,
        );

        $serializer = new XML_Serializer($options);
         ///fix PHP 5.3
        $serializer = &$serializer;
        
        $result = $serializer->serialize($oData);
        if ($result === true ) {
            $xml = $serializer->getSerializedData();
        }

        $request = new HTTP_Request($url);
        ///fix PHP 5.3
        $request = &$request;
        
        if (!empty($this->_user) && !empty($this->_passwd)) {
            $request->setBasicAuth($this->_user, $this->_passwd);
        }
        $request->addPostData($this->getEntityName(), $xml, $preencoded = false);
        $request->setMethod(HTTP_REQUEST_METHOD_POST);
        $request->sendRequest();
        if ($request->getResponseCode() !== 200) {
            return SGL::raiseError('Invalid Response Code', $request->getResponseCode());
        }

        $data = $this->_processResponse($request);
        return $data;
    }

    public function _processResponse($request)
    {
        $xml = $this->_responseXml = $request->getResponseBody();

        if (!is_object($this->_us)) {
            $this->_us = new XML_Unserializer();
            ///fix PHP 5.3
            $this->_us = &$this->_us;
            $this->_us->setOption('tagAsClass', true);
            $this->_us->setOption('ignoreKeys', $this->getKeysToIgnore());
            $this->_us->setOption('complexType', $this->getComplexTypes());
        }

        $result = $this->_us->unserialize($xml);
        if (SGL::isError($result)) {
            return $result;
        }
        $data = $this->_us->getUnserializedData();
        return $data;
    }

    public function getResponseXml()
    {
        return $this->_responseXml;
    }

    public function getRawRequest()
    {
        return $this->_getRequest;
    }

    public function getKeysToIgnore()
    {
        $aKeys = $this->getOption('ignoreKeys');
        return $aKeys;
    }

    public function getComplexTypes()
    {
        $aKeys = $this->getOption('complexType');
        return $aKeys;
    }

    public function getEntityName()
    {
        return $this->_entityName;
    }

    public function setEntityName($name)
    {
        $this->_entityName = $name;
    }
}