33var Boom = require ( 'boom' ) ;
44var Hoek = require ( 'hoek' ) ;
55var jwt = require ( 'jsonwebtoken' ) ;
6+ var Joi = require ( 'joi' ) ;
67
8+ var optionsSchema = Joi . object ( ) . keys ( {
9+ key : Joi . alternatives ( ) . try ( Joi . binary ( ) , Joi . func ( ) ) . required ( ) ,
10+ validateFunc : Joi . func ( ) ,
11+ algorithms : Joi . array ( ) . items ( Joi . string ( ) ) ,
12+ audience : Joi . alternatives ( ) . try ( Joi . string ( ) , Joi . array ( ) . items ( Joi . string ( ) ) ) ,
13+ issuer : Joi . alternatives ( ) . try ( Joi . string ( ) , Joi . array ( ) . items ( Joi . string ( ) ) ) ,
14+ subject : Joi . string ( )
15+ } ) . label ( 'jwt auth strategy options' ) ;
716
817// Declare internals
9-
1018var internals = { } ;
1119
1220
@@ -26,8 +34,11 @@ function isFunction(functionToCheck) {
2634
2735internals . implementation = function ( server , options ) {
2836
29- Hoek . assert ( options , 'Missing jwt auth strategy options' ) ;
30- Hoek . assert ( options . key , 'Missing required private key in configuration' ) ;
37+ var validationResult = Joi . validate ( options , optionsSchema ) ;
38+
39+ if ( validationResult . error ) {
40+ throw new Error ( validationResult . error . message ) ;
41+ }
3142
3243 var settings = Hoek . clone ( options ) ;
3344
@@ -62,13 +73,11 @@ internals.implementation = function (server, options) {
6273
6374 getKey ( request , token , function ( err , key , extraInfo ) {
6475 if ( err ) { return reply ( Boom . wrap ( err ) ) ; }
65-
6676 // handle err
67- jwt . verify ( token , key , function ( err , decoded ) {
68- if ( err && err . message === 'jwt expired' ) {
69- return reply ( Boom . unauthorized ( 'Expired token received for JSON Web Token validation' , 'Bearer' ) ) ;
70- } else if ( err ) {
71- return reply ( Boom . unauthorized ( 'Invalid signature received for JSON Web Token validation' , 'Bearer' ) ) ;
77+ jwt . verify ( token , key , settings , function ( err , decoded ) {
78+
79+ if ( err ) {
80+ return reply ( Boom . unauthorized ( 'JSON Web Token validation failed: ' + err . message , 'Bearer' ) ) ;
7281 }
7382
7483 if ( ! settings . validateFunc ) {
@@ -102,5 +111,6 @@ internals.implementation = function (server, options) {
102111 }
103112 } ;
104113
105- return scheme ;
114+ return scheme ;
115+
106116} ;
0 commit comments