69 lines
1.4 KiB
PHP
69 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace Packback\Lti1p3;
|
|
|
|
/**
|
|
* Used for migrations from LTI 1.1 to LTI 1.3
|
|
*
|
|
* @see IMigrationDatabase
|
|
*/
|
|
class Lti1p1Key
|
|
{
|
|
private ?string $key;
|
|
private ?string $secret;
|
|
|
|
public function __construct(?array $key = null)
|
|
{
|
|
$this->key = $key['key'] ?? null;
|
|
$this->secret = $key['secret'] ?? null;
|
|
}
|
|
|
|
public function getKey(): ?string
|
|
{
|
|
return $this->key;
|
|
}
|
|
|
|
public function setKey(string $key): self
|
|
{
|
|
$this->key = $key;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getSecret(): ?string
|
|
{
|
|
return $this->secret;
|
|
}
|
|
|
|
public function setSecret(string $secret): self
|
|
{
|
|
$this->secret = $secret;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Create a signature using the key and secret
|
|
*
|
|
* @see https://www.imsglobal.org/spec/lti/v1p3/migr#oauth_consumer_key_sign
|
|
*/
|
|
public function sign(string $deploymentId, string $iss, string $clientId, string $exp, string $nonce): string
|
|
{
|
|
$signatureComponents = [
|
|
$this->getKey(),
|
|
$deploymentId,
|
|
$iss,
|
|
$clientId,
|
|
$exp,
|
|
$nonce,
|
|
];
|
|
|
|
$baseString = implode('&', $signatureComponents);
|
|
$utf8String = mb_convert_encoding($baseString, 'utf8', mb_detect_encoding($baseString));
|
|
$hash = hash_hmac('sha256', $utf8String, $this->getSecret(), true);
|
|
|
|
return base64_encode($hash);
|
|
}
|
|
|
|
}
|