* @param array $params Required parameters:
* <pre>
* '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".
* </pre>
* Optional parameters:
* <pre>
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']);
*
* @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);
}
$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) {
$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()