From bb6d53b94367d4e32bbcc0f7e90b658b37fdbdfd Mon Sep 17 00:00:00 2001 From: Joseph McDermott Date: Fri, 29 Apr 2016 15:18:23 +0100 Subject: [PATCH 1/2] Allow timestamp to be specified rather than relying on PHP time() function --- src/JWT.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/JWT.php b/src/JWT.php index b3532df7..6a120631 100644 --- a/src/JWT.php +++ b/src/JWT.php @@ -29,6 +29,13 @@ 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'), @@ -59,6 +66,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 +108,7 @@ public static function decode($jwt, $key, $allowed_algs = array()) // 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 +117,14 @@ public static function decode($jwt, $key, $allowed_algs = array()) // 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'); } From d6e222c1406367e879668d24968e087de1241c0f Mon Sep 17 00:00:00 2001 From: Joseph McDermott Date: Tue, 3 May 2016 09:43:19 +0100 Subject: [PATCH 2/2] Commit with Google email address for CLA --- src/JWT.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/JWT.php b/src/JWT.php index 6a120631..5b430404 100644 --- a/src/JWT.php +++ b/src/JWT.php @@ -32,6 +32,7 @@ class JWT /** * 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;