Select Git revision
-
Elke Kreim authoredElke Kreim authored
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();
}
}