From 21117bb330fca248209518e065169cf56d03c4e6 Mon Sep 17 00:00:00 2001 From: Gunnar Wrobel
Date: Tue, 30 Nov 2010 08:29:38 +0100 Subject: [PATCH] Test the token_lifetime parameter. --- framework/Token/lib/Horde/Token/Base.php | 13 +++++++-- framework/Token/test/Horde/Token/Unit/FileTest.php | 31 +++++++++++++++++++--- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/framework/Token/lib/Horde/Token/Base.php b/framework/Token/lib/Horde/Token/Base.php index 865ecff0c..bc770440f 100644 --- a/framework/Token/lib/Horde/Token/Base.php +++ b/framework/Token/lib/Horde/Token/Base.php @@ -35,6 +35,9 @@ abstract class Horde_Token_Base * @param array $params Required parameters: *
* 'secret' - (string) The secret string used for signing tokens.
+ * 'token_lifetime' - (int) The number of seconds after which tokens time out.
+ * Negative numbers represent "no timeout".
+ * The default is "-1".
*
* Optional parameters:
*
@@ -46,6 +49,9 @@ abstract class Horde_Token_Base
if (!isset($params['secret'])) {
throw new Horde_Token_Exception('Missing secret parameter.');
}
+ if (!isset($params['token_lifetime'])) {
+ $params['token_lifetime'] = -1;
+ }
if (isset($params['logger'])) {
$this->_logger = $params['logger'];
unset($params['logger']);
@@ -129,7 +135,7 @@ abstract class Horde_Token_Base
*
* @return boolean True if the token was valid.
*/
- public function validate($token, $seed = '', $timeout = -1, $unique = false)
+ public function validate($token, $seed = '', $timeout = null, $unique = false)
{
$b = Horde_Url::uriB64Decode($token);
$nonce = substr($b, 0, 6);
@@ -139,7 +145,10 @@ abstract class Horde_Token_Base
}
$timestamp = unpack('N', substr($nonce, 0, 4));
$timestamp = array_pop($timestamp);
- if ($timeout >= 0 && $timestamp + $timeout >= time()) {
+ if ($timeout === null) {
+ $timeout = $this->_params['token_lifetime'];
+ }
+ if ($timeout >= 0 && ($timestamp + $timeout - time()) <= 0) {
return false;
}
if ($unique) {
diff --git a/framework/Token/test/Horde/Token/Unit/FileTest.php b/framework/Token/test/Horde/Token/Unit/FileTest.php
index b7a9d4e04..81929f3e6 100644
--- a/framework/Token/test/Horde/Token/Unit/FileTest.php
+++ b/framework/Token/test/Horde/Token/Unit/FileTest.php
@@ -75,17 +75,42 @@ class Horde_Token_Unit_FileTest extends PHPUnit_Framework_TestCase
$this->assertFalse($t->validate($t->get('a'), 'b'));
}
+ public function testActiveToken()
+ {
+ $t = new Horde_Token_File(array('secret' => 'abc'));
+ $this->assertTrue($t->validate($t->get('a'), 'a', 10));
+ }
+
public function testImmediateTimeout()
{
$t = new Horde_Token_File(array('secret' => 'abc'));
- $this->assertFalse($t->validate($t->get('a'), 'a', 1));
+ $this->assertFalse($t->validate($t->get('a'), 'a', 0));
}
public function testTimeoutAfterOneSecond()
{
- $t = new Horde_Token_File(array('secret' => 'abc'));
+ $t = new Horde_Token_File(
+ array(
+ 'secret' => 'abc',
+ 'token_lifetime' => 1
+ )
+ );
+ $token = $t->get('a');
sleep(1);
- $this->assertFalse($t->validate($t->get('a'), 'a', 1));
+ $this->assertFalse($t->validate($token, 'a', 1));
+ // Pack two assertions in this test to avoid sleeping twice
+ $this->assertFalse($t->validate($token, 'a'));
+ }
+
+ public function testTokenLifetimeParameter()
+ {
+ $t = new Horde_Token_File(
+ array(
+ 'secret' => 'abc',
+ 'token_lifetime' => -1
+ )
+ );
+ $this->assertTrue($t->validate($t->get()));
}
public function testUniqueToken()
--
2.11.0