summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/JWT.php26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/JWT.php b/src/JWT.php
index 78512a1..7228e96 100644
--- a/src/JWT.php
+++ b/src/JWT.php
@@ -29,6 +29,14 @@ class JWT
*/
public static $leeway = 0;
+ /**
+ * Allow the current timestamp to be specified.
+ * Useful for fixing a value within unit testing.
+ *
+ * Will default to PHP time() value if null.
+ */
+ public static $timestamp = null;
+
public static $supported_algs = array(
'HS256' => array('hash_hmac', 'SHA256'),
'HS512' => array('hash_hmac', 'SHA512'),
@@ -39,11 +47,11 @@ class JWT
/**
* Decodes a JWT string into a PHP object.
*
- * @param string $jwt The JWT
- * @param string|array|null $key The key, or map of keys.
- * If the algorithm used is asymmetric, this is the public key
- * @param array $allowed_algs List of supported verification algorithms
- * Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'
+ * @param string $jwt The JWT
+ * @param string|array $key The key, or map of keys.
+ * If the algorithm used is asymmetric, this is the public key
+ * @param array $allowed_algs List of supported verification algorithms
+ * Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'
*
* @return object The JWT's payload as a PHP object
*
@@ -59,6 +67,8 @@ class JWT
*/
public static function decode($jwt, $key, $allowed_algs = array())
{
+ $timestamp = is_null(self::$timestamp) ? time() : self::$timestamp;
+
if (empty($key)) {
throw new InvalidArgumentException('Key may not be empty');
}
@@ -99,7 +109,7 @@ class JWT
// Check if the nbf if it is defined. This is the time that the
// token can actually be used. If it's not yet that time, abort.
- if (isset($payload->nbf) && $payload->nbf > (time() + self::$leeway)) {
+ if (isset($payload->nbf) && $payload->nbf > ($timestamp + self::$leeway)) {
throw new BeforeValidException(
'Cannot handle token prior to ' . date(DateTime::ISO8601, $payload->nbf)
);
@@ -108,14 +118,14 @@ class JWT
// Check that this token has been created before 'now'. This prevents
// using tokens that have been created for later use (and haven't
// correctly used the nbf claim).
- if (isset($payload->iat) && $payload->iat > (time() + self::$leeway)) {
+ if (isset($payload->iat) && $payload->iat > ($timestamp + self::$leeway)) {
throw new BeforeValidException(
'Cannot handle token prior to ' . date(DateTime::ISO8601, $payload->iat)
);
}
// Check if this token has expired.
- if (isset($payload->exp) && (time() - self::$leeway) >= $payload->exp) {
+ if (isset($payload->exp) && ($timestamp - self::$leeway) >= $payload->exp) {
throw new ExpiredException('Expired token');
}