mirror of
https://github.com/elyby/oauth2-server.git
synced 2025-01-03 10:41:51 +05:30
added the ability to change the algorithm used to generate the token strings
This commit is contained in:
parent
54ffa58e7b
commit
901aab9deb
@ -11,11 +11,16 @@
|
|||||||
|
|
||||||
namespace League\OAuth2\Server\Util;
|
namespace League\OAuth2\Server\Util;
|
||||||
|
|
||||||
|
use League\OAuth2\Server\Util\KeyAlgorithm\DefaultAlgorithm;
|
||||||
|
use League\OAuth2\Server\Util\KeyAlgorithm\KeyAlgorithmInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SecureKey class
|
* SecureKey class
|
||||||
*/
|
*/
|
||||||
class SecureKey
|
class SecureKey
|
||||||
{
|
{
|
||||||
|
protected static $algorithm;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate a new unique code
|
* Generate a new unique code
|
||||||
* @param integer $len Length of the generated code
|
* @param integer $len Length of the generated code
|
||||||
@ -23,18 +28,27 @@ class SecureKey
|
|||||||
*/
|
*/
|
||||||
public static function make($len = 40)
|
public static function make($len = 40)
|
||||||
{
|
{
|
||||||
// We generate twice as many bytes here because we want to ensure we have
|
return self::getAlgorithm()->make($len);
|
||||||
// enough after we base64 encode it to get the length we need because we
|
}
|
||||||
// take out the "/", "+", and "=" characters.
|
|
||||||
$bytes = openssl_random_pseudo_bytes($len * 2, $strong);
|
|
||||||
|
|
||||||
// We want to stop execution if the key fails because, well, that is bad.
|
/**
|
||||||
if ($bytes === false || $strong === false) {
|
* @param KeyAlgorithmInterface $algorithm
|
||||||
// @codeCoverageIgnoreStart
|
*/
|
||||||
throw new \Exception('Error Generating Key');
|
public static function setAlgorithm(KeyAlgorithmInterface $algorithm)
|
||||||
// @codeCoverageIgnoreEnd
|
{
|
||||||
|
self::$algorithm = $algorithm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return KeyAlgorithmInterface
|
||||||
|
*/
|
||||||
|
public static function getAlgorithm()
|
||||||
|
{
|
||||||
|
if (!self::$algorithm) {
|
||||||
|
|
||||||
|
self::$algorithm = new DefaultAlgorithm();
|
||||||
}
|
}
|
||||||
|
|
||||||
return substr(str_replace(array('/', '+', '='), '', base64_encode($bytes)), 0, $len);
|
return self::$algorithm;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -12,4 +12,21 @@ class Secure_Key_test extends PHPUnit_Framework_TestCase
|
|||||||
$this->assertTrue($v1 !== $v2);
|
$this->assertTrue($v1 !== $v2);
|
||||||
$this->assertEquals(50, strlen($v3));
|
$this->assertEquals(50, strlen($v3));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_make_with_different_algorithm()
|
||||||
|
{
|
||||||
|
$algorithm = $this->getMock('League\OAuth2\Server\Util\KeyAlgorithm\KeyAlgorithmInterface');
|
||||||
|
|
||||||
|
$result = 'dasdsdsaads';
|
||||||
|
$algorithm
|
||||||
|
->expects($this->once())
|
||||||
|
->method('make')
|
||||||
|
->with(11)
|
||||||
|
->will($this->returnValue($result))
|
||||||
|
;
|
||||||
|
|
||||||
|
League\OAuth2\Server\Util\SecureKey::setAlgorithm($algorithm);
|
||||||
|
$this->assertSame($algorithm, League\OAuth2\Server\Util\SecureKey::getAlgorithm());
|
||||||
|
$this->assertEquals($result, League\OAuth2\Server\Util\SecureKey::make(11));
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user