Skip to content
Snippets Groups Projects
Select Git revision
  • a41e783fb75ee6ddfe000b62fa548ca36ea86a5c
  • master default protected
  • dev-moodle-4
  • hsh_v4.1.2
  • hsh_v4.1.1
  • hsh_v4.1.0
6 results

version.php

Blame
  • connect_class.php 11.10 KiB
    <?php
    
    /**
     * connection class
     *
     * This class communicates with an adobe connect server making REST calls
     * to access the Adobe Connect API
     */
    
    /**
     * @package mod
     * @subpackage adobeconnect
     * @author Akinsaya Delamarre (adelamarre@remote-learner.net)
     * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
     */
    class connect_class {
        var $_serverurl;
        var $_serverport;
        var $_username;
        var $_password;
        var $_cookie;
        var $_xmlrequest;
        var $_xmlresponse;
        var $_apicall;
        var $_connection;
        var $_https;
    
        public function __construct($serverurl = '', $serverport = 80,
                                    $username = '', $password = '',
                                    $cookie = '', $https = false) {
    
            $this->_serverurl = $serverurl;
            $this->_serverport = $serverport;
            $this->_username = $username;
            $this->_password = $password;
            $this->_cookie = $cookie;
            $this->_https = $https;
        }
    
        /**
         * Accessor methods
         */
        public function set_serverport($serverport = '') {
            $this->_serverport = $serverport;
        }
    
        public function set_serverurl($serverurl = '') {
            $this->_serverurl = $serverurl;
        }
    
        public function set_username($username = '') {
            $this->_username = $username;
        }
    
        public function set_password($password = '') {
            $this->_password = $password;
        }
    
        public function set_cookie($cookie = '') {
            $this->_cookie = $cookie;
        }
    
        public function set_xmlrequest($xml = '') {
            $this->_xmlrequest = $xml;
        }
    
        public function set_connection($connection = 0) {
            $this->_connection = $connection;
        }
    
        public function set_https($https = false) {
            $this->_https = $https;
        }
    
        public function get_serverurl() {
            return $this->_serverurl;
        }
    
        public function get_username() {
            return $this->_username;
        }
    
        public function get_password() {
            return $this->_password;
        }
    
        public function get_cookie() {
            return $this->_cookie;
        }
    
        public function get_connection() {
            return $this->_connection;
        }
    
        public function get_serverport() {
            return $this->_serverport;
        }
    
        private function get_default_header() {
            return array('Content-Type: text/xml');
        }
    
        public function get_https() {
            return $this->_https;
        }
    
        // DFNVC
        public function get_header() {
            return $this->_header;
        }
    
    
    
        /**
         * Adds or replaces http:// with https:// for secured connections
         * @return string - server URL with the HTTPS protocol
         */
        private function make_https() {
    
            $serverurl = $this->_serverurl;
            $httpsexists = strpos($this->_serverurl, 'https://');
            $httpexists = strpos($this->_serverurl, 'http://');
    
            if (false === $httpsexists and false !== $httpexists) {
                $serverurl = str_replace('http://', 'https://', $this->_serverurl);
            } elseif (false === $httpsexists) {
                $serverurl = 'https://' . $this->_serverurl;
            }
    
            return $serverurl;
        }
    
    
        /**
         * Posts XML to the Adobe Connect server and returns the results
         * @param int $return_header 1 to include the response header, 0 to not
         * @param array $add_header an array of headers to add to the request
         */
        public function send_request($return_header = 0, $add_header = array(), $stop = false) {
            global $CFG;
    
            $ch = curl_init();
    
            $serverurl = $this->_serverurl;
    
            if ($this->_https) {
    
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    
                $serverurl = $this->make_https();
            }
    
    
            if ($stop) {
    //            echo $this->_serverurl . '?session='. $this->_cookie; die();
    //            https://example.com/api/xml?action=principal=list
                curl_setopt($ch, CURLOPT_URL, $serverurl/* . '?action=login&external-auth=use'*/);
    
            } else {
    
                $querystring = (!empty($this->_cookie)) ?  '?session='. $this->_cookie : '';
                curl_setopt($ch, CURLOPT_URL, $serverurl . $querystring);
    
            }
    
    
           // Connect through a proxy if Moodle config says we should
           if(isset($CFG->proxyhost)) {
    
               curl_setopt($ch, CURLOPT_PROXY, $CFG->proxyhost);
    
               if(isset($CFG->proxyport)) {
    
                   curl_setopt($ch, CURLOPT_PROXYPORT, $CFG->proxyport);
               }
           }
    
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $this->_xmlrequest);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    
            curl_setopt($ch, CURLOPT_PORT, $this->_serverport);
    
            $header = $this->get_default_header();
            $header = array_merge($header, $add_header);
    
    	// DFNVC
            // $header = array("Hugo: test");
    	$this->_header = $header;
    
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    
            // Include header from response
            //curl_setopt($ch, CURLOPT_HEADER, $return_header);
    
            $result = curl_exec($ch);
    
            curl_close($ch);
    
            return $result;
        }
    
        /**
         * Sends the HTTP header login request and returns the response xml
         * @param string username username to use for header x-user-id
         */
        /* DFNVC */
        /* public function request_http_header_login($return_header = 0, $username = '', $stop = false) {
            global $CFG;
    
            $hearder = array();
            $this->create_http_head_login_xml();
    
            // The first parameter is 1 because we want to include the response header
            // to extract the session cookie
            if (!empty($username)) {
                $hearder = array("$CFG->adobeconnect_admin_httpauth: " . $username);
            }
    
            $this->_xmlresponse = $this->send_request($return_header, $hearder, $stop);
    
            $this->set_session_cookie($this->_xmlresponse);
    
            return $this->_xmlresponse;
        }
        */
    
    
        public function create_request($params = array(), $sentrequest = true) {
            if (empty($params)) {
                return false;
            }
            @date_default_timezone_set("GMT");
    
            $writer = new XMLWriter();
            $writer->openMemory();
            $writer->startDocument('1.0', 'UTF-8');
    
            $writer->startElement('params');
    
            foreach($params as $key => $data) {
                $writer->startElement('param');
                $writer->writeAttribute('name', $key);
                $writer->text($data);
                $writer->endElement();
            }
    
            $writer->endElement();
    
            $writer->endDocument();
    
            $this->_xmlrequest = $writer->outputMemory();
    
            if ($sentrequest) {
                $this->_xmlresponse = $this->send_request();
            }
    
        }
    
        /**
         * Call to common-info
         * @param nothing
         * @return nothing
         */
        public function set_session_cookie($data) {
            $sessionval = false;
            $sessionstart = strpos($data, 'BREEZESESSION=');
    
            if (false !== $sessionstart) {
                $sessionend = strpos($data, ';');
    //            $sessionend = strpos($data, 'Expires:');
    
                $sessionlength = strlen('BREEZESESSION=');
                $sessionvallength = $sessionend - ($sessionstart + $sessionlength);
                $sessionval = substr($data, $sessionstart+$sessionlength, $sessionvallength);
            }
            $this->_cookie = $sessionval;
            return $sessionval;
        }
    
        /**
         * Parses through xml and looks for the 'status' parameter
         * and return true if the 'code' attribute equals 'ok' otherwise
         * false is returned
         * @param string xml the xml to parse
         */
        public function read_status_xml() {
            $reader = new XMLReader();
            $reader->XML($this->_xmlresponse, 'UTF-8');
            $return = false;
    
            while ($reader->read()) {
                if (0 == strcmp($reader->name, 'status')) {
                    if (1 == $reader->nodeType) {
                        if (0 == strcmp('ok', $reader->getAttribute('code'))) {
                            $return = true;
                        }
                    }
                }
            }
    
            $reader->close();
    
             return $return;
    
        }
    
        /**
         * Parses through xml and looks for the 'cookie' parameter
         * @param string $xml the xml to parse through
         * @return string $sessoin returns the session id
         */
        public function read_cookie_xml($xml = '') {
                global $CFG, $USER, $COURSE;
    
                if (empty($xml)) {
                    if (is_siteadmin($USER->id)) {
                        notice(get_string('adminemptyxml', 'adobeconnect'),
                               $CFG->wwwroot . '/admin/settings.php?section=modsettingadobeconnect');
                    } else {
                        notice(get_string('emptyxml', 'adobeconnect'),
                               '', $COURSE);
                    }
                }
    
                $session = false;
    //            $accountid = false;
                $reader = new XMLReader();
                $reader->XML($xml, 'UTF-8');
    
                while ($reader->read()) {
    	            if (0 == strcmp($reader->name, 'cookie')) {
                        if (1 == $reader->nodeType) {
                            $session = $reader->readString();
                        }
                    }
                }
    
                $reader->close();
    
                $this->_cookie = $session;
    
                return $session;
        }
    
        public function response_to_object() {
            $xml = new SimpleXMLElement($this->_xmlresponse);
    
            return $xml;
        }
    
        public function call_success() {
            global $CFG, $USER, $COURSE;
    
            if (empty($this->_xmlresponse)) {
                if (is_siteadmin($USER->id)) {
                    notice(get_string('adminemptyxml', 'adobeconnect'),
                           $CFG->wwwroot . '/admin/settings.php?section=modsettingadobeconnect');
                } else {
                    notice(get_string('emptyxml', 'adobeconnect'),
                           '', $COURSE);
                }
            }
    
            $xml = new SimpleXMLElement($this->_xmlresponse);
    
            if (0 == strcmp('ok', $xml->status[0]['code'])) {
                return true;
            } else {
                return false;
            }
        }
    
        private function create_http_head_login_xml() {
            @date_default_timezone_set("GMT");
    
            $writer = new XMLWriter();
            $writer->openMemory();
            $writer->startDocument('1.0', 'UTF-8');
    
            $writer->startElement('params');
    
            $writer->startElement('param');
            $writer->writeAttribute('name', 'action');
            $writer->text('login');
            $writer->endElement();
    
            $writer->startElement('param');
            $writer->writeAttribute('name', 'external-auth');
            $writer->text('use');
            $writer->endElement();
    
            $writer->endElement();
    
            $writer->endDocument();
    
            $this->_xmlrequest = $writer->outputMemory();
    
        }
    }