AutorÃa | Ultima modificación | Ver Log |
<?php
namespace Packback\Lti1p3;
use Firebase\JWT\JWT;
use Packback\Lti1p3\Interfaces\ILtiRegistration;
class LtiDeepLink
{
public function __construct(
private ILtiRegistration $registration,
private string $deployment_id,
private array $deep_link_settings
) {
}
public function getResponseJwt(array $resources): string
{
$message_jwt = [
'iss' => $this->registration->getClientId(),
'aud' => [$this->registration->getIssuer()],
'exp' => time() + 600,
'iat' => time(),
'nonce' => LtiOidcLogin::secureRandomString('nonce-'),
LtiConstants::DEPLOYMENT_ID => $this->deployment_id,
LtiConstants::MESSAGE_TYPE => LtiConstants::MESSAGE_TYPE_DEEPLINK_RESPONSE,
LtiConstants::VERSION => LtiConstants::V1_3,
LtiConstants::DL_CONTENT_ITEMS => array_map(function ($resource) {
return $resource->toArray();
}, $resources),
];
// https://www.imsglobal.org/spec/lti-dl/v2p0/#deep-linking-request-message
// 'data' is an optional property which, if it exists, must be returned by the tool
if (isset($this->deep_link_settings['data'])) {
$message_jwt[LtiConstants::DL_DATA] = $this->deep_link_settings['data'];
}
return JWT::encode($message_jwt, $this->registration->getToolPrivateKey(), 'RS256', $this->registration->getKid());
}
}