11'use strict' ;
22
3- var util = require ( 'util' ) ;
43var uuid = require ( 'uuid' ) ;
54var crypto = require ( 'crypto' ) ;
65var ecdsaSigFormatter = require ( 'ecdsa-sig-formatter' ) ;
7- var properties = require ( './properties.json ' ) ;
6+ var errors = require ( './errors ' ) ;
87
98var algCryptoMap = {
109 HS256 : 'SHA256' ,
@@ -68,22 +67,6 @@ function handleError(cb,err,value){
6867 }
6968}
7069
71- function JwtError ( message ) {
72- this . name = 'JwtError' ;
73- this . message = this . userMessage = message ;
74- }
75- util . inherits ( JwtError , Error ) ;
76-
77- function JwtParseError ( message , jwtString , parsedHeader , parsedBody , innerError ) {
78- this . name = 'JwtParseError' ;
79- this . message = this . userMessage = message ;
80- this . jwtString = jwtString ;
81- this . parsedHeader = parsedHeader ;
82- this . parsedBody = parsedBody ;
83- this . innerError = innerError ;
84- }
85- util . inherits ( JwtParseError , Error ) ;
86-
8770function JwtBody ( claims ) {
8871 if ( ! ( this instanceof JwtBody ) ) {
8972 return new JwtBody ( claims ) ;
@@ -194,7 +177,7 @@ Jwt.prototype.setSigningKey = function setSigningKey(key) {
194177} ;
195178Jwt . prototype . setSigningAlgorithm = function setSigningAlgorithm ( alg ) {
196179 if ( ! this . isSupportedAlg ( alg ) ) {
197- throw new JwtError ( properties . errors . UNSUPPORTED_SIGNING_ALG ) ;
180+ throw new errors . UnsupportedSigningAlgorithmJwtError ( ) ;
198181 }
199182 this . header . alg = alg ;
200183 return this ;
@@ -207,7 +190,7 @@ Jwt.prototype.sign = function sign(payload, algorithm, cryptoInput) {
207190 var signingType = algTypeMap [ algorithm ] ;
208191
209192 if ( ! cryptoAlgName ) {
210- throw new JwtError ( properties . errors . UNSUPPORTED_SIGNING_ALG ) ;
193+ throw new errors . UnsupportedSigningAlgorithmJwtError ( ) ;
211194 }
212195
213196 if ( signingType === 'hmac' ) {
@@ -234,12 +217,13 @@ Jwt.prototype.compact = function compact() {
234217 segments . push ( this . body . compact ( ) ) ;
235218
236219 if ( this . header . alg !== 'none' ) {
237- if ( this . signingKey ) {
238- this . signature = this . sign ( segments . join ( '.' ) , this . header . alg , this . signingKey ) ;
239- segments . push ( this . signature ) ;
240- } else {
241- throw new Error ( properties . errors . SIGNING_KEY_REQUIRED ) ;
220+ if ( ! this . signingKey ) {
221+ throw new errors . SigningKeyRequiredJwtError ( ) ;
242222 }
223+
224+ this . signature = this . sign ( segments . join ( '.' ) , this . header . alg , this . signingKey ) ;
225+
226+ segments . push ( this . signature ) ;
243227 }
244228
245229 return segments . join ( '.' ) ;
@@ -278,7 +262,7 @@ Parser.prototype.parse = function parse(jwtString,cb){
278262 var signature ;
279263
280264 if ( segments . length < 2 || segments . length > 3 ) {
281- return done ( new JwtParseError ( properties . errors . PARSE_ERROR , jwtString , null , null ) ) ;
265+ return done ( new errors . JwtParseError ( jwtString ) ) ;
282266 }
283267
284268 var header = this . safeJsonParse ( segments [ 0 ] ) ;
@@ -290,10 +274,10 @@ Parser.prototype.parse = function parse(jwtString,cb){
290274 }
291275
292276 if ( header instanceof Error ) {
293- return done ( new JwtParseError ( properties . errors . PARSE_ERROR , jwtString , null , null , header ) ) ;
277+ return done ( new errors . JwtParseError ( jwtString , null , null , header ) ) ;
294278 }
295279 if ( body instanceof Error ) {
296- return done ( new JwtParseError ( properties . errors . PARSE_ERROR , jwtString , header , null , body ) ) ;
280+ return done ( new errors . JwtParseError ( jwtString , header , null , body ) ) ;
297281 }
298282 var jwt = new Jwt ( body , false ) ;
299283 jwt . setSigningAlgorithm ( header . alg ) ;
@@ -312,7 +296,7 @@ function Verifier(){
312296}
313297Verifier . prototype . setSigningAlgorithm = function setSigningAlgorithm ( alg ) {
314298 if ( ! this . isSupportedAlg ( alg ) ) {
315- throw new JwtError ( properties . errors . UNSUPPORTED_SIGNING_ALG ) ;
299+ throw new errors . UnsupportedSigningAlgorithmJwtError ( ) ;
316300 }
317301 this . signingAlgorithm = alg ;
318302 return this ;
@@ -342,15 +326,15 @@ Verifier.prototype.verify = function verify(jwtString,cb){
342326 var signingType = algTypeMap [ header . alg ] ;
343327
344328 if ( header . alg !== this . signingAlgorithm ) {
345- return done ( new JwtParseError ( properties . errors . SIGNATURE_ALGORITHM_MISMTACH , jwtString , header , body ) ) ;
329+ return done ( new errors . SignatureAlgorithmMismatchJwtParseError ( jwtString , header , body ) ) ;
346330 }
347331
348332 if ( jwt . isExpired ( ) ) {
349- return done ( new JwtParseError ( properties . errors . EXPIRED , jwtString , header , body ) ) ;
333+ return done ( new errors . ExpiredJwtParseError ( jwtString , header , body ) ) ;
350334 }
351335
352336 if ( jwt . isNotBefore ( ) ) {
353- return done ( new JwtParseError ( properties . errors . NOT_ACTIVE , jwtString , header , body ) ) ;
337+ return done ( new errors . NotActiveJwtParseError ( jwtString , header , body ) ) ;
354338 }
355339
356340 var digstInput = jwt . verificationInput ;
@@ -371,7 +355,7 @@ Verifier.prototype.verify = function verify(jwtString,cb){
371355 try {
372356 unescapedSignature = ecdsaSigFormatter . joseToDer ( signature , header . alg ) ;
373357 } catch ( err ) {
374- return done ( new JwtParseError ( properties . errors . SIGNATURE_MISMTACH , jwtString , header , body , err ) ) ;
358+ return done ( new errors . SignatureMismatchJwtParseError ( jwtString , header , body , err ) ) ;
375359 }
376360 } else {
377361 signatureType = 'base64' ;
@@ -392,7 +376,7 @@ Verifier.prototype.verify = function verify(jwtString,cb){
392376 newJwt . header = new JwtHeader ( header ) ;
393377
394378 if ( ! verified ) {
395- return done ( new JwtParseError ( properties . errors . SIGNATURE_MISMTACH , jwtString , header , body ) ) ;
379+ return done ( new errors . SignatureMismatchJwtParseError ( jwtString , header , body ) ) ;
396380 }
397381
398382 return done ( null , newJwt ) ;
@@ -441,15 +425,22 @@ var jwtLib = {
441425 } else {
442426 jwt = new Jwt ( claims ) ;
443427 }
444- if ( alg !== 'none' && ! secret ) {
445- throw new Error ( properties . errors . SIGNING_KEY_REQUIRED ) ;
446- } else {
447- jwt . setSigningAlgorithm ( args . length === 3 ? alg : 'HS256' ) ;
448- jwt . setSigningKey ( secret ) ;
428+
429+ if ( alg !== 'none' && ! secret ) {
430+ throw new errors . SigningKeyRequiredJwtError ( ) ;
449431 }
432+
433+ jwt . setSigningAlgorithm ( args . length === 3 ? alg : 'HS256' ) ;
434+ jwt . setSigningKey ( secret ) ;
450435 jwt . setExpiration ( ( nowEpochSeconds ( ) + ( 60 * 60 ) ) * 1000 ) ; // one hour
436+
451437 return jwt ;
452438 }
453439} ;
454440
441+ // Copy errors onto export object.
442+ for ( var key in errors ) {
443+ jwtLib [ key ] = errors [ key ] ;
444+ }
445+
455446module . exports = jwtLib ;
0 commit comments