parent
efc6b431c4
commit
fd2a1bcf3e
@ -0,0 +1,131 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\PluginBundle\Entity\LtiProvider; |
||||
|
||||
use Doctrine\ORM\Mapping as ORM; |
||||
|
||||
/** |
||||
* Class Platform |
||||
* |
||||
* @package Chamilo\PluginBundle\Entity\LtiProvider |
||||
* |
||||
* @ORM\Table(name="plugin_lti_provider_platform_key") |
||||
* @ORM\Entity() |
||||
*/ |
||||
class PlatformKey |
||||
{ |
||||
/** |
||||
* @var string |
||||
* |
||||
* @ORM\Column(name="public_key", type="text") |
||||
*/ |
||||
public $publicKey; |
||||
/** |
||||
* @var int |
||||
* |
||||
* @ORM\Column(name="id", type="integer") |
||||
* @ORM\Id() |
||||
* @ORM\GeneratedValue() |
||||
*/ |
||||
protected $id; |
||||
/** |
||||
* @var string |
||||
* |
||||
* @ORM\Column(name="kid", type="string") |
||||
*/ |
||||
private $kid; |
||||
/** |
||||
* @var string |
||||
* |
||||
* @ORM\Column(name="private_key", type="text") |
||||
*/ |
||||
private $privateKey; |
||||
|
||||
/** |
||||
* Get id. |
||||
* |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
|
||||
/** |
||||
* Set id. |
||||
* |
||||
* @param int $id |
||||
* |
||||
* @return Platform |
||||
*/ |
||||
public function setId($id) |
||||
{ |
||||
$this->id = $id; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* Get kid. |
||||
* |
||||
* @return string |
||||
*/ |
||||
public function getKid() |
||||
{ |
||||
return $this->kid; |
||||
} |
||||
|
||||
/** |
||||
* Set kid. |
||||
* |
||||
* @param string $kid |
||||
*/ |
||||
public function setKid($kid) |
||||
{ |
||||
$this->kid = $kid; |
||||
} |
||||
|
||||
/** |
||||
* Get privateKey. |
||||
* |
||||
* @return string |
||||
*/ |
||||
public function getPrivateKey() |
||||
{ |
||||
return $this->privateKey; |
||||
} |
||||
|
||||
/** |
||||
* Set privateKey. |
||||
* |
||||
* @param string $privateKey |
||||
* |
||||
* @return Platform |
||||
*/ |
||||
public function setPrivateKey($privateKey) |
||||
{ |
||||
$this->privateKey = $privateKey; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getPublicKey() |
||||
{ |
||||
return $this->publicKey; |
||||
} |
||||
|
||||
/** |
||||
* @param string $publicKey |
||||
*/ |
||||
public function setPublicKey(string $publicKey) |
||||
{ |
||||
$this->publicKey = $publicKey; |
||||
} |
||||
|
||||
|
||||
} |
||||
@ -1,24 +0,0 @@ |
||||
{ |
||||
"https://testing3.beeznest.com": { |
||||
"client_id": "44WGA9lh8fmsRITfBac4", |
||||
"auth_login_url": "https://testing3.beeznest.com/plugin/ims_lti/auth.php", |
||||
"auth_token_url": "https://testing3.beeznest.com/plugin/ims_lti/token.php", |
||||
"key_set_url": "https://testing3.beeznest.com/plugin/ims_lti/jwks.php", |
||||
"private_key_file": "/keys/private.key", |
||||
"kid": "51dadff927d803c965f6", |
||||
"deployment": [ |
||||
"8" |
||||
] |
||||
}, |
||||
"https://11.chamilo.org": { |
||||
"client_id": "RcHE5hk5ruI9sOr9t0UN", |
||||
"auth_login_url": "https://11.chamilo.org/plugin/ims_lti/auth.php", |
||||
"auth_token_url": "https://11.chamilo.org/plugin/ims_lti/token.php", |
||||
"key_set_url": "https://11.chamilo.org/plugin/ims_lti/jwks.php", |
||||
"private_key_file": "/keys/private.key", |
||||
"kid": "e52a3d2435f9e5071e3e", |
||||
"deployment": [ |
||||
"183" |
||||
] |
||||
} |
||||
} |
||||
@ -1,65 +0,0 @@ |
||||
<?php |
||||
/* For license terms, see /license.txt */ |
||||
|
||||
require_once __DIR__ . '/../vendor/autoload.php'; |
||||
use \IMSGlobal\LTI; |
||||
|
||||
class Demo_Database implements LTI\Database |
||||
{ |
||||
public function find_registration_by_issuer($iss) { |
||||
|
||||
$lti_customers = $this->get_lti_connection(); |
||||
if (empty($lti_customers[$iss])) { |
||||
return false; |
||||
} |
||||
|
||||
return LTI\LTI_Registration::new() |
||||
->set_auth_login_url($lti_customers[$iss]['auth_login_url']) |
||||
->set_auth_token_url($lti_customers[$iss]['auth_token_url']) |
||||
->set_auth_server($lti_customers[$iss]['auth_token_url']) |
||||
->set_client_id($lti_customers[$iss]['client_id']) |
||||
->set_key_set_url($lti_customers[$iss]['key_set_url']) |
||||
->set_kid($lti_customers[$iss]['kid']) |
||||
->set_issuer($iss) |
||||
->set_tool_private_key(file_get_contents($lti_customers[$iss]['private_key_file'])); |
||||
} |
||||
|
||||
public function find_deployment($iss, $deployment_id) { |
||||
if (!in_array($deployment_id, $_SESSION['iss'][$iss]['deployment'])) { |
||||
return false; |
||||
} |
||||
return LTI\LTI_Deployment::new() |
||||
->set_deployment_id($deployment_id); |
||||
} |
||||
|
||||
private function get_lti_connection() { |
||||
|
||||
$keyPath = api_get_path(SYS_PLUGIN_PATH).'/lti_provider/keys/private.key'; |
||||
|
||||
$em = Database::getManager(); |
||||
$platforms = $em->getRepository('ChamiloPluginBundle:LtiProvider\Platform')->findAll(); |
||||
|
||||
$lti_customers = []; |
||||
foreach ($platforms as $platform) { |
||||
$issuer = $platform->getIssuer(); |
||||
$lti_customers[$issuer] = [ |
||||
'client_id' => $platform->getClientId(), |
||||
'auth_login_url' => $platform->getAuthLoginUrl(), |
||||
'auth_token_url' => $platform->getAuthTokenUrl(), |
||||
'key_set_url' => $platform->getKeySetUrl(), |
||||
'private_key_file' => $keyPath, |
||||
'kid' => $platform->getKid(), |
||||
'deployment' => [$platform->getDeploymentId()] |
||||
]; |
||||
} |
||||
$_SESSION['iss'] = []; |
||||
if (!empty($lti_customers)) { |
||||
$_SESSION['iss'] = array_merge($_SESSION['iss'], $lti_customers); |
||||
} |
||||
return $lti_customers; |
||||
} |
||||
|
||||
private function private_key($iss) { |
||||
return file_get_contents($_SESSION['iss'][$iss]['private_key_file']); |
||||
} |
||||
} |
||||
@ -0,0 +1,50 @@ |
||||
<?php |
||||
/* For license terms, see /license.txt */ |
||||
|
||||
use Packback\Lti1p3\Interfaces\Cache as Lti1p3Cache; |
||||
|
||||
|
||||
class Lti13Cache implements Lti1p3Cache |
||||
{ |
||||
public const NONCE_PREFIX = 'nonce_'; |
||||
|
||||
private $cache; |
||||
|
||||
public function getLaunchData($key) { |
||||
$this->loadCache(); |
||||
return $this->cache[$key]; |
||||
} |
||||
|
||||
public function cacheLaunchData($key, $jwt_body) { |
||||
$this->cache[$key] = $jwt_body; |
||||
$this->saveCache(); |
||||
return $this; |
||||
} |
||||
|
||||
public function cacheNonce($nonce) { |
||||
$this->cache['nonce'][$nonce] = true; |
||||
$this->saveCache(); |
||||
return $this; |
||||
} |
||||
|
||||
public function checkNonce($nonce) { |
||||
$this->loadCache(); |
||||
if (!isset($this->cache['nonce'][$nonce])) { |
||||
return false; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
private function loadCache() { |
||||
$cache = file_get_contents(sys_get_temp_dir() . '/lti_cache.txt'); |
||||
if (empty($cache)) { |
||||
file_put_contents(sys_get_temp_dir() . '/lti_cache.txt', '{}'); |
||||
$this->cache = []; |
||||
} |
||||
$this->cache = json_decode($cache, true); |
||||
} |
||||
|
||||
private function saveCache() { |
||||
file_put_contents(sys_get_temp_dir() . '/lti_cache.txt', json_encode($this->cache)); |
||||
} |
||||
} |
||||
@ -0,0 +1,39 @@ |
||||
<?php |
||||
/* For license terms, see /license.txt */ |
||||
|
||||
use Packback\Lti1p3\Interfaces\Cookie as Lti1p3Cookie; |
||||
|
||||
class Lti13Cookie implements Lti1p3Cookie |
||||
{ |
||||
public function getCookie($name) |
||||
{ |
||||
if (isset($_COOKIE[$name])) { |
||||
return $_COOKIE[$name]; |
||||
} |
||||
// Look for backup cookie if same site is not supported by the user's browser. |
||||
if (isset($_COOKIE["LEGACY_" . $name])) { |
||||
return $_COOKIE["LEGACY_" . $name]; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
public function setCookie($name, $value, $exp = 3600, $options = []): self |
||||
{ |
||||
$cookie_options = [ |
||||
'expires' => time() + $exp |
||||
]; |
||||
|
||||
// SameSite none and secure will be required for tools to work inside iframes |
||||
/*$same_site_options = [ |
||||
'samesite' => 'None', |
||||
'secure' => false, |
||||
'httponly' => true |
||||
];*/ |
||||
|
||||
setcookie($name, $value, array_merge($cookie_options, $same_site_options, $options)); |
||||
|
||||
// Set a second fallback cookie in the event that "SameSite" is not supported |
||||
setcookie("LEGACY_" . $name, $value, array_merge($cookie_options, $options)); |
||||
return $this; |
||||
} |
||||
} |
||||
@ -0,0 +1,75 @@ |
||||
<?php |
||||
/* For license terms, see /license.txt */ |
||||
|
||||
use Chamilo\PluginBundle\Entity\LtiProvider\Platform; |
||||
use Chamilo\PluginBundle\Entity\LtiProvider\PlatformKey; |
||||
use ChamiloSession as Session; |
||||
use Packback\Lti1p3; |
||||
use Packback\Lti1p3\Interfaces; |
||||
use Packback\Lti1p3\LtiRegistration; |
||||
use Packback\Lti1p3\LtiDeployment; |
||||
use Packback\Lti1p3\OidcException; |
||||
|
||||
class Lti13Database implements Interfaces\Database |
||||
{ |
||||
|
||||
public function findRegistrationByIssuer($iss, $clientId = null) { |
||||
$ltiCustomers = $this->getLtiConnection(); |
||||
if (empty($ltiCustomers[$iss])) { |
||||
return false; |
||||
} |
||||
|
||||
if (!isset($clientId)) { |
||||
$clientId = $ltiCustomers[$iss]['client_id']; |
||||
} |
||||
|
||||
return LtiRegistration::new() |
||||
->setAuthLoginUrl($ltiCustomers[$iss]['auth_login_url']) |
||||
->setAuthTokenUrl($ltiCustomers[$iss]['auth_token_url']) |
||||
->setClientId($clientId) |
||||
->setKeySetUrl($ltiCustomers[$iss]['key_set_url']) |
||||
->setKid($ltiCustomers[$iss]['kid']) |
||||
->setIssuer($iss) |
||||
->setToolPrivateKey($this->getPrivateKey()); |
||||
} |
||||
|
||||
public function findDeployment($iss, $deploymentId, $clientId = null) { |
||||
if (!in_array($deploymentId, $_SESSION['iss'][$iss]['deployment'])) { |
||||
return false; |
||||
} |
||||
return LtiDeployment::new() |
||||
->setDeploymentId($deploymentId); |
||||
} |
||||
|
||||
private function getLtiConnection() { |
||||
|
||||
$em = Database::getManager(); |
||||
$platforms = $em->getRepository('ChamiloPluginBundle:LtiProvider\Platform')->findAll(); |
||||
|
||||
$ltiCustomers = []; |
||||
foreach ($platforms as $platform) { |
||||
$issuer = $platform->getIssuer(); |
||||
$ltiCustomers[$issuer] = [ |
||||
'client_id' => $platform->getClientId(), |
||||
'auth_login_url' => $platform->getAuthLoginUrl(), |
||||
'auth_token_url' => $platform->getAuthTokenUrl(), |
||||
'key_set_url' => $platform->getKeySetUrl(), |
||||
'kid' => $platform->getKid(), |
||||
'deployment' => [$platform->getDeploymentId()] |
||||
]; |
||||
} |
||||
Session::write('iss', $ltiCustomers); |
||||
return $ltiCustomers; |
||||
} |
||||
|
||||
private function getPrivateKey() { |
||||
$privateKey = ''; |
||||
$platformKey = Database::getManager() |
||||
->getRepository('ChamiloPluginBundle:LtiProvider\PlatformKey') |
||||
->findOneBy([]); |
||||
if ($platformKey) { |
||||
$privateKey = $platformKey->getPrivateKey(); |
||||
} |
||||
return $privateKey; |
||||
} |
||||
} |
||||
@ -1,27 +0,0 @@ |
||||
-----BEGIN RSA PRIVATE KEY----- |
||||
MIIEowIBAAKCAQEA8osiSa75nmqmakwNNocLA2N2huWM9At/tjSZOFX1r4+PDclS |
||||
zxhMw+ZcgHH+E/05Ec6Vcfd75i8Z+Bxu4ctbYk2FNIvRMN5UgWqxZ5Pf70n8UFxj |
||||
GqdwhUA7/n5KOFoUd9F6wLKa6Oh3OzE6v9+O3y6qL40XhZxNrJjCqxSEkLkOK3xJ |
||||
0J2npuZ59kipDEDZkRTWz3al09wQ0nvAgCc96DGH+jCgy0msA0OZQ9SmDE9CCMbD |
||||
T86ogLugPFCvo5g5zqBBX9Ak3czsuLS6Ni9Wco8ZSxoaCIsPXK0RJpt6Jvbjclqb |
||||
4imsobifxy5LsAV0l/weNWmU2DpzJsLgeK6VVwIDAQABAoIBAQC2R1RUdfjJUrOQ |
||||
rWk8so7XVBfO15NwEXhAkhUYnpmPAF/tZ4EhfMysaWLZcVIW6bbLKCtuRCVMX9ev |
||||
fIbkkLU0ErhqPi3QATcXL/z1r8+bAUprhpNAg9fvfM/ZukXDRged6MPNMC11nseE |
||||
p8HUU4oHNwXVyL6FvmstrHyYoEnkjIiMk34O2MFjAavoIJhM0gkoXVnxRP5MNi1n |
||||
GPVhK+TfZyRri20x1Rh3CsIq36PUyxCICWkD7jftLGqVdQBfuii600LP5v7nuHz9 |
||||
LDsCeY7xRJu0eLdDk7/9ukb8fuq6/+3VYMYChYWvpw4DaH8qDHxZfWzMyaI489ma |
||||
l27lhgdxAoGBAPkxH6WuZM/GOowjySuruRjAVyJ4stfe9l/x8MrqnFA2Q8stqK69 |
||||
60Y9LDrSaAx7QutvzZ64br2WMlvnGdJw868z4/JmvoAqW3IHUXzqRAHgOk/8Y3ze |
||||
Sjd7t3R0O3v6qAbQjyRYYgfAMZo7PzXW8FKNGsakAedEKW0b94HYndKpAoGBAPkr |
||||
grtARp2nnd1WGuxgQMjX++HjT0p9x7fTMCtfvYhZguU9AlCx53VHFeGc6fqsDkUm |
||||
BFv0dqMnw0TPzEQqLElBIh87TGS4JSXmcbQcejIx+ry2kMFuyMZIPuvZCnLfB/d7 |
||||
Qu2DU6mdeIBME/8AX5kBqn1ekddioESdSkHkkif/AoGAaPCeAjjZ7YHuP/wGCOUN |
||||
UvYU+8hWkIAtwyPxIpMAdusTS6oTwlrqjK7QRIk9FhyGhv2TWwcSY7avyHIfNrco |
||||
eBzjHr7T9MdhsTiRwYgqUZvrEqoX/4rhOFJaZKlaL5DUV+JWlZi+18LBYNEYgoTc |
||||
ufcAUqzYvFrBE1jWt5DQjdkCgYATs6sMn1J2GNDUtYA/fITi3KEgBVc5rqRiFqLS |
||||
aymTZHCDK8XJF6gTj+FdC4k8tuoR8aWal8Phtr0r7bpbEXKbADlwesHZnO3jB0uq |
||||
UC4hVe5biZv8j4P0mbXP9ENtPdFlciuimCW/XaIvktRp71+fu4/9hcLGYxgFFOLQ |
||||
PwCHhQKBgGMCxIcueUkLnI9r0KkjtXap9mIgdgERwQPN0Cm9Tx35ZEzRp95kf4C6 |
||||
MPsVOwZk5gNvvQngx4iaw9fNYG+PF2yNuDZ+EFwI0vpmGCKRQEke9/VCOFucMsjg |
||||
jMhbU+jrqRIJKisP7MCE1NRhymCPpQf/stEPl0nS5rj+mZJHQEGq |
||||
-----END RSA PRIVATE KEY----- |
||||
@ -1,27 +0,0 @@ |
||||
-----BEGIN RSA PRIVATE KEY----- |
||||
MIIEpAIBAAKCAQEAyU64VjSdgPqaQp/iaS8EQsCYMBBKFjevaZGraPWGho3H74OY |
||||
nuTbfeo3T6ufSNpK7aImM6rgsNqh6/FVYKUyNKcD/2AYkfu8gip3zAHJBONhu0NN |
||||
EkyeKx9ugvvrrgiifTDM5JYOyOSYVcVHZhsOASb/+eHvq3VSa/+rbgOnqeq7t2rS |
||||
c+Zt/wTWAtY8OIms6uOr8drbHdvDz4+isxlNTBW06ILDLAUS/gH2PDskPJFwAMbn |
||||
moXGoU3j5IKiWGASNWCbUAfeiTs7XIFR/bxEvs+oGsn6vUnZV9dJR20aTG3hsR0E |
||||
YEVfjzBCBpoK3Jb3RLouLnwkZAteJFmyWqAXAwIDAQABAoIBAEVqnsgjNpjOUbld |
||||
ts48h0SZcyFHzLRimVtW/vufhrcJVwNxpoRMOJ/vzwjrDm8pzyKognHYn8h8a8+X |
||||
lbBQ5sIfQZKjSXW1j+h2yn6Pswi7e+z+JSqFPxlxqkMCqd+GXLm8xTqhwBFoOluB |
||||
PsCn3alqEGTTkzjVqQlSzYOPQRanHWSIqeZ4A5Xs6NbjoGdlV0mJ3GeyvyyoPdl1 |
||||
KQoyvVws5xrbHeTgDjLM4Kgp5PShTwlo1Cz2Du34cbUrbcXipS2/77aSM/wBAWuh |
||||
Sq7gsd0iPvd+CeFHcK2+zUwHrksVp+86NgnL/GbcS8Q5tFMDo1GXOg39pJ/PmYVI |
||||
Wp7EoHkCgYEA5r5EA9qCmNkTQdE4kNNl+/zvGdPuzonw7v6356zoET6zntcNcJLC |
||||
EJPPPnipHqLYx2k0URGde1Jywn5xMzJ4hmkj1sPZNfrA5cBjA0T711JnLjOGM6QG |
||||
EdiQN6GnyWGzHPQUGQlaHKe1u4yNP+T19zWqJCaYa1CxjreBRjPQjF0CgYEA31eg |
||||
PNGIPW8SOokVvgd+iI7g2XcYBo7fJX8rDZ+ZA8mSNyYEF2kKECVbfkNMRkEfX2q0 |
||||
RUsQyA0JVFVegpVPWsQaRNp1kKQUkh3Qr1jYV/hlwZ+dke7fO6bXNIFoiWDEaIqr |
||||
UEV2XbsCMWAaieoGRKiBMqxIsXVEVw5NytQ/+t8CgYBx7goZOP/4xl4Kxmo+oBKf |
||||
/EB2qT0lf9iVuPFHFAm10hbQW/DH376wfrr6ZotilBejRl/Nk3wFky0UuWfdVpNK |
||||
Eonele8fBwPNrVN2Hs6Wf5pwpoIh52AT2bFDtq7o8TOGHUH7JrH2qhxCUWDA5qVH |
||||
/ZhXpzLk8f/prtPGvPjBBQKBgQDdE3fhu+cIKLH6j0eeWvy9X/DiUijOFQ59p2uO |
||||
iLSGMzkwrcjPA4KaiOAQE72krUHIyW64SJ3L6FubxwVObU2nowX9seE9060pFapE |
||||
Z8V/Drpq9vyaP8Fo4rWTm6VGlyrT8K+zPY71KO/6wA6FBco+nC2HY1JxloqXQelv |
||||
JLpQMQKBgQCucWu6d68jtPARZgXDsCADZIr0rz6kGPbOY3U/td437BaEZuFEERm0 |
||||
0rtzbh+JOd0fFPjeOeF2zvXoygKts9eSY4SMIo/0tH+9YniWwlw85Xcez8ryPdGj |
||||
Y9cJsEWTvKKlLo2V0vaYQqNJ3qXW6SZkCkg+rwlfMmhNLrIbx7X2DA== |
||||
-----END RSA PRIVATE KEY----- |
||||
@ -1,9 +0,0 @@ |
||||
-----BEGIN PUBLIC KEY----- |
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyU64VjSdgPqaQp/iaS8E |
||||
QsCYMBBKFjevaZGraPWGho3H74OYnuTbfeo3T6ufSNpK7aImM6rgsNqh6/FVYKUy |
||||
NKcD/2AYkfu8gip3zAHJBONhu0NNEkyeKx9ugvvrrgiifTDM5JYOyOSYVcVHZhsO |
||||
ASb/+eHvq3VSa/+rbgOnqeq7t2rSc+Zt/wTWAtY8OIms6uOr8drbHdvDz4+isxlN |
||||
TBW06ILDLAUS/gH2PDskPJFwAMbnmoXGoU3j5IKiWGASNWCbUAfeiTs7XIFR/bxE |
||||
vs+oGsn6vUnZV9dJR20aTG3hsR0EYEVfjzBCBpoK3Jb3RLouLnwkZAteJFmyWqAX |
||||
AwIDAQAB |
||||
-----END PUBLIC KEY----- |
||||
@ -1,3 +1,30 @@ |
||||
<?php |
||||
/* For license terms, see /license.txt */ |
||||
|
||||
$strings['HelloPlugin'] = "Salut!"; |
||||
$strings['plugin_title'] = 'LTI 1.3 Advantage Provider'; |
||||
$strings['plugin_comment'] = 'Une application simple développée pour montrer comment créer un outil IMS LTI'; |
||||
$strings['description'] = 'L\'application permet à un étudiant à l\'intérieur d\'un cours de la plate-forme avec des outils externes qui est noté (Services d\'affectation et de notes) et de générer des rapports de leurs membres (Services NRP). |
||||
Voici les détails de votre connexion LTI pour essayer cette application :'; |
||||
$strings['LtiProviderDescription'] = 'La première chose dont vous aurez besoin est de configurer votre enregistrement et votre déploiement. Pour configurer votre inscription |
||||
remplissez le formulaire les valeurs requises pour le déploiement dans votre plateforme'; |
||||
$strings['ConnectionDetails'] = 'Détails de connexion LTI'; |
||||
$strings['AddPlatform'] = 'Ajouter une plateforme client'; |
||||
$strings['EditPlatform'] = 'Modifier la plateforme client'; |
||||
$strings['PlatformName'] = 'LMS (émetteur)'; |
||||
$strings['PlatformEdited'] = 'Détails de la plateforme modifiés'; |
||||
$strings['PlatformDeleted'] = 'Plateforme supprimée'; |
||||
$strings['client_id'] = 'Client ID'; |
||||
$strings['launch_url'] = 'Lancer l\'URL'; |
||||
$strings['login_url'] = 'URL de connexion'; |
||||
$strings['redirect_url'] = 'URL de redirection'; |
||||
$strings['auth_login_url'] = 'URL d\'authentification OIDC'; |
||||
$strings['auth_token_url'] = 'URL du jeton d\'accès OAuth2'; |
||||
$strings['key_set_url'] = 'URL du jeu de clés'; |
||||
$strings['deployment_id'] = 'ID de déploiement'; |
||||
$strings['kid'] = 'kid'; |
||||
$strings['public_key'] = 'Clé publique'; |
||||
$strings['name'] = 'Nom du fournisseur'; |
||||
$strings['enabled'] = 'Enabled'; |
||||
$strings['GenerateKeyPairInfo'] = 'Une nouvelle paire de clés privée et publique sera créée lors de l\'activation.'; |
||||
$strings['URLs'] = 'Endpoints Urls'; |
||||
$strings['PlatformConnectionAdded'] = 'Une connexion de plate-forme est ajoutée.'; |
||||
|
||||
@ -1,3 +1,30 @@ |
||||
<?php |
||||
/* For license terms, see /license.txt */ |
||||
|
||||
$strings['HelloPlugin'] = "Hola chaval!"; |
||||
$strings['plugin_title'] = 'Proveedor de ventajas LTI 1.3'; |
||||
$strings['plugin_comment'] = 'Aplicación simple desarrollada como una forma de demostrar cómo construir un proveedor de herramientas IMS LTI'; |
||||
$strings['description'] = 'La aplicación permite a un alumno entrar en un curso de la plataforma con herramientas externas que se puntúan (Assigment and Grade Services) y generar informes de sus miembros (NRP Services). |
||||
Aquí están los detalles de su conexión LTI para probar esta aplicación: '; |
||||
$strings['LtiProviderDescription'] = 'Lo primero que necesitará es configurar su registro y despliegue. Para configurar su registro |
||||
complete el formulario con los valores requeridos para el despliegue en su plataforma '; |
||||
$strings['ConnectionDetails'] = 'Detalles de la conexión LTI'; |
||||
$strings['AddPlatform'] = 'Agregar una plataforma de cliente'; |
||||
$strings['EditPlatform'] = 'Edite la plataforma del cliente'; |
||||
$strings['PlatformName'] = 'LMS (emisor)'; |
||||
$strings['PlatformEdited'] = 'Detalles de la plataforma editados'; |
||||
$strings['PlatformDeleted'] = 'Plataforma eliminada'; |
||||
$strings['client_id'] = 'ID de cliente'; |
||||
$strings['launch_url'] = 'URL de lanzamiento'; |
||||
$strings['login_url'] = 'URL de inicio de sesión'; |
||||
$strings['redirect_url'] = 'URL de redireccionamiento'; |
||||
$strings['auth_login_url'] = 'URL de autenticación OIDC'; |
||||
$strings['auth_token_url'] = 'URL del token de acceso de OAuth2'; |
||||
$strings['key_set_url'] = 'URL del conjunto de claves'; |
||||
$strings['deployment_id'] = 'ID de implementación'; |
||||
$strings['kid'] = 'Kid'; |
||||
$strings['public_key'] = 'Clave pública'; |
||||
$strings['name'] = 'Nombre del proveedor'; |
||||
$strings['enabled'] = 'Habilitado'; |
||||
$strings['GenerateKeyPairInfo'] = 'Se creará un nuevo par de claves pública y privada cuando se habilite.'; |
||||
$strings['URLs'] = 'URL de puntos finales'; |
||||
$strings['PlatformConnectionAdded'] = 'Se agrega una conexión de plataforma.'; |
||||
|
||||
@ -1 +1 @@ |
||||
{"CURSO02":{"2":{"score":"2","time":"3","name":"Christian"},"3":{"score":"6","time":"10","name":"Miguel"},"4":{"score":"15","time":"20","name":"Rosa Emerita"}},"CURSOBASE":{"1":{"name":"John","score":"4","time":"6"}},"CURSODECHRISTIAN":{"1":{"name":"Doe admin","score":"5","time":"8"}},"CURSO04":{"2":{"name":"Juan","score":"9","time":"16"}},"CURSO05":{"2":{"name":"Juan","score":"15","time":"22"}}} |
||||
{"CURSO02":{"2":{"score":"2","time":"3","name":"Christian"},"3":{"score":"6","time":"10","name":"Miguel"},"4":{"score":"15","time":"20","name":"Rosa Emerita"}},"CURSOBASE":{"1":{"name":"John","score":"4","time":"6"}},"CURSODECHRISTIAN":{"1":{"name":"Doe admin","score":"5","time":"8"}},"CURSO04":{"2":{"name":"Juan","score":"9","time":"16"}},"CURSO05":{"2":{"name":"Juan","score":"15","time":"22"}},"CURSO06":{"2":{"name":"Juan","score":"8","time":"10"}}} |
||||
Loading…
Reference in new issue