You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							47 lines
						
					
					
						
							1.0 KiB
						
					
					
				
			
		
		
	
	
							47 lines
						
					
					
						
							1.0 KiB
						
					
					
				<?php
 | 
						|
/* For licensing terms, see /license.txt */
 | 
						|
 | 
						|
use Chamilo\PluginBundle\Entity\ImsLti\Platform;
 | 
						|
use Firebase\JWT\JWT;
 | 
						|
use phpseclib\Crypt\RSA;
 | 
						|
 | 
						|
$cidReset = true;
 | 
						|
 | 
						|
require_once __DIR__.'/../../main/inc/global.inc.php';
 | 
						|
 | 
						|
$plugin = ImsLtiPlugin::create();
 | 
						|
 | 
						|
if ($plugin->get('enabled') !== 'true') {
 | 
						|
    die;
 | 
						|
}
 | 
						|
 | 
						|
/** @var Platform $platform */
 | 
						|
$platform = Database::getManager()
 | 
						|
    ->getRepository('ChamiloPluginBundle:ImsLti\Platform')
 | 
						|
    ->findOneBy([]);
 | 
						|
 | 
						|
if (!$platform) {
 | 
						|
    exit;
 | 
						|
}
 | 
						|
 | 
						|
$jwks = [];
 | 
						|
 | 
						|
$key = new RSA();
 | 
						|
$key->setHash('sha256');
 | 
						|
$key->loadKey($platform->getPrivateKey());
 | 
						|
$key->setPublicKey(false, RSA::PUBLIC_FORMAT_PKCS8);
 | 
						|
 | 
						|
if ($key->publicExponent) {
 | 
						|
    $jwks = [
 | 
						|
        'kty' => 'RSA',
 | 
						|
        'alg' => 'RS256',
 | 
						|
        'use' => 'sig',
 | 
						|
        'e' => JWT::urlsafeB64Encode($key->publicExponent->toBytes()),
 | 
						|
        'n' => JWT::urlsafeB64Encode($key->modulus->toBytes()),
 | 
						|
        'kid' => $platform->getKid(),
 | 
						|
    ];
 | 
						|
}
 | 
						|
 | 
						|
header('Content-Type: application/json');
 | 
						|
 | 
						|
echo json_encode(['keys' => [$jwks]]);
 | 
						|
 |