ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
All Data Structures Namespaces Files Functions Variables Modules Pages
xapitoken.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2019 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 chdir("../../");
5 require_once 'libs/composer/vendor/autoload.php';
6 
18 
19 $origParam = $_GET['param'];
20 
21 if (!isset($origParam) || !strlen($origParam))
22 {
23  $error = array('error-code' => 3,'error-text'=> 'invalid request: missing or empty param request parameter');
24  send($error);
25 }
26 
27 try
28 {
29  $param = base64_decode(rawurldecode($origParam));
30 
31  $param = json_decode(openssl_decrypt(
32  $param,
35  0,
37  ), true);
38 
39  $_COOKIE[session_name()] = $param[session_name()];
40  $_COOKIE['ilClientId'] = $param['ilClientId'];
41  $objId = $param['obj_id'];
42  $refId = $param['ref_id'];
43 
44  #\XapiProxy\DataService::initIlias($_COOKIE['ilClientId']);
46  $DIC = $GLOBALS['DIC'];
47 }
48 catch (ilCmiXapiException $e)
49 {
50  $error = array('error-code' => '3','error-text'=> 'internal server error');
51  send($error);
52 }
53 
54 try
55 {
58  if ($object->getContentType() == ilObjCmiXapi::CONT_TYPE_CMI5)
59  {
60  $tokenCmi5Session = $token->getCmi5Session();
61  $alreadyReturnedCmi5Session = $token->getReturnedForCmi5Session();
62  if ($tokenCmi5Session == $alreadyReturnedCmi5Session)
63  {
64  // what about reloaded or refreshed pages?
65  // see: https://stackoverflow.com/questions/456841/detect-whether-the-browser-is-refreshed-or-not-using-php/456915
66  // Beware that the xapitoken request is an ajax request and not all clients send HTTP_REFERRER Header
67  if ($tokenRestriction == true)
68  {
69  $error = array('error-code' => '1','error-text'=> 'The authorization token has already been returned.');
70  send($error);
71  }
72  }
73  $token->setReturnedForCmi5Session($tokenCmi5Session);
74  $token->update();
75  }
76  if ($object->isBypassProxyEnabled()) {
77  $authToken = $object->getLrsType()->getBasicAuthWithoutBasic();
78  } else {
79  $authToken = base64_encode(CLIENT_ID . ':' . $token->getToken());
80  }
81 
82 
83  $response = array("auth-token" => $authToken);
84  send($response);
85 }
86 catch (ilCmiXapiException $e)
87 {
88  $error = array('error-code' => '2','error-text'=> 'could not create valid session from token.');
89  send($error);
90 }
91 
92 function send($response)
93 {
94  header('Access-Control-Allow-Origin: '.$_SERVER["HTTP_ORIGIN"]);
95  header('Access-Control-Allow-Credentials: true');
96  header('Content-type:application/json;charset=utf-8');
97  echo json_encode($response);
98  exit;
99 }
$tokenRestriction
see: https://github.com/AICC/CMI-5_Spec_Current/blob/quartz/cmi5_spec.md#fetch_url response should al...
Definition: xapitoken.php:17
exit
Definition: login.php:29
$_GET["client_id"]
$response
Definition: xapitoken.php:83
$objId
Definition: xapitoken.php:41
$refId
Definition: xapitoken.php:42
static initILIAS()
ilias initialisation
$token
Definition: xapitoken.php:57
$_SERVER['HTTP_HOST']
Definition: raiseError.php:10
$param
Definition: xapitoken.php:31
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
Definition: PEAR.php:64
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
static getInstanceByObjIdAndRefIdAndUsrId($objId, $refId, $usrId, $checkValid=true)
$DIC
Definition: xapitoken.php:46
$origParam
Definition: xapitoken.php:19
$_COOKIE[session_name()]
Definition: xapitoken.php:39
catch(ilCmiXapiException $e) send($response)
Definition: xapitoken.php:92