111 lines
3.8 KiB
PHP
111 lines
3.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; under version 2
|
|
* of the License (non-upgradable).
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* Copyright (c) 2013 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
|
*
|
|
*
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace oat\taoLti\controller;
|
|
|
|
use oat\taoLti\models\classes\LtiUtils;
|
|
use common_exception_Error;
|
|
use common_exception_MissingParameter;
|
|
use common_http_Request;
|
|
use common_session_SessionManager;
|
|
use tao_actions_ServiceModule;
|
|
use tao_models_classes_oauth_Credentials;
|
|
use tao_models_classes_oauth_Service;
|
|
|
|
class LtiConsumer extends tao_actions_ServiceModule
|
|
{
|
|
/**
|
|
* Launches a oauth tool
|
|
* @throws common_exception_Error
|
|
* @throws common_exception_MissingParameter
|
|
*/
|
|
public function call()
|
|
{
|
|
if (!$this->hasRequestParameter('ltiConsumerUri')) {
|
|
throw new common_exception_MissingParameter('ltiConsumerUri', get_class($this));
|
|
}
|
|
if (!$this->hasRequestParameter('ltiLaunchUrl')) {
|
|
throw new common_exception_MissingParameter('ltiLaunchUrl', get_class($this));
|
|
}
|
|
$ltiConsumer = new tao_models_classes_oauth_Credentials($this->getRequestParameter('ltiConsumerUri'));
|
|
$launchUrl = $this->getRequestParameter('ltiLaunchUrl');
|
|
|
|
$serviceCallId = $this->getServiceCallId() . '_c';
|
|
|
|
$session = common_session_SessionManager::getSession();
|
|
|
|
$roles = [];
|
|
foreach ($session->getUserRoles() as $role) {
|
|
foreach (LtiUtils::mapTaoRole2LTIRoles($role) as $ltiRole) {
|
|
$roles[] = $ltiRole;
|
|
}
|
|
}
|
|
|
|
$ltiData = [
|
|
'lti_message_type' => 'basic-lti-launch-request',
|
|
'lti_version' => 'LTI-1p0',
|
|
|
|
'resource_link_id' => rand(0, 9999999),
|
|
'resource_link_title' => 'Launch Title',
|
|
'resource_link_label' => 'Launch label',
|
|
|
|
'context_id' => $serviceCallId,
|
|
'context_title' => 'Launch Title',
|
|
'context_label' => 'Launch label',
|
|
|
|
'user_id' => $session->getUserUri(),
|
|
'roles' => implode(',', $roles),
|
|
'lis_person_name_full' => $session->getUserLabel(),
|
|
|
|
'tool_consumer_info_product_family_code' => PRODUCT_NAME,
|
|
'tool_consumer_info_version' => TAO_VERSION
|
|
];
|
|
|
|
// @todo add:
|
|
/*
|
|
user_id:
|
|
roles:
|
|
|
|
lis_person_name_full:
|
|
lis_person_name_family:
|
|
lis_person_name_given:
|
|
lis_person_contact_email_primary:
|
|
lis_person_sourcedid:
|
|
|
|
tool_consumer_info_product_family_code:
|
|
tool_consumer_info_version:
|
|
tool_consumer_instance_guid:
|
|
tool_consumer_instance_description:
|
|
*/
|
|
$request = new common_http_Request($launchUrl, common_http_Request::METHOD_POST, $ltiData);
|
|
$service = new tao_models_classes_oauth_Service();
|
|
$signedRequest = $service->sign($request, $ltiConsumer);
|
|
|
|
$this->setData('launchUrl', $launchUrl);
|
|
$this->setData('ltiData', $signedRequest->getParams());
|
|
$this->setData('client_config_url', $this->getClientConfigUrl());
|
|
$this->setView('ltiConsumer.tpl');
|
|
}
|
|
}
|