1
1
'use strict' ;
2
2
3
- var util = require ( 'util' ) ;
4
3
var uuid = require ( 'uuid' ) ;
5
4
var crypto = require ( 'crypto' ) ;
6
5
var ecdsaSigFormatter = require ( 'ecdsa-sig-formatter' ) ;
7
- var properties = require ( './properties.json ' ) ;
6
+ var errors = require ( './errors ' ) ;
8
7
9
8
var algCryptoMap = {
10
9
HS256 : 'SHA256' ,
@@ -68,22 +67,6 @@ function handleError(cb,err,value){
68
67
}
69
68
}
70
69
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
-
87
70
function JwtBody ( claims ) {
88
71
if ( ! ( this instanceof JwtBody ) ) {
89
72
return new JwtBody ( claims ) ;
@@ -194,7 +177,7 @@ Jwt.prototype.setSigningKey = function setSigningKey(key) {
194
177
} ;
195
178
Jwt . prototype . setSigningAlgorithm = function setSigningAlgorithm ( alg ) {
196
179
if ( ! this . isSupportedAlg ( alg ) ) {
197
- throw new JwtError ( properties . errors . UNSUPPORTED_SIGNING_ALG ) ;
180
+ throw new errors . UnsupportedSigningAlgorithmJwtError ( ) ;
198
181
}
199
182
this . header . alg = alg ;
200
183
return this ;
@@ -207,7 +190,7 @@ Jwt.prototype.sign = function sign(payload, algorithm, cryptoInput) {
207
190
var signingType = algTypeMap [ algorithm ] ;
208
191
209
192
if ( ! cryptoAlgName ) {
210
- throw new JwtError ( properties . errors . UNSUPPORTED_SIGNING_ALG ) ;
193
+ throw new errors . UnsupportedSigningAlgorithmJwtError ( ) ;
211
194
}
212
195
213
196
if ( signingType === 'hmac' ) {
@@ -234,12 +217,13 @@ Jwt.prototype.compact = function compact() {
234
217
segments . push ( this . body . compact ( ) ) ;
235
218
236
219
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 ( ) ;
242
222
}
223
+
224
+ this . signature = this . sign ( segments . join ( '.' ) , this . header . alg , this . signingKey ) ;
225
+
226
+ segments . push ( this . signature ) ;
243
227
}
244
228
245
229
return segments . join ( '.' ) ;
@@ -278,7 +262,7 @@ Parser.prototype.parse = function parse(jwtString,cb){
278
262
var signature ;
279
263
280
264
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 ) ) ;
282
266
}
283
267
284
268
var header = this . safeJsonParse ( segments [ 0 ] ) ;
@@ -290,10 +274,10 @@ Parser.prototype.parse = function parse(jwtString,cb){
290
274
}
291
275
292
276
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 ) ) ;
294
278
}
295
279
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 ) ) ;
297
281
}
298
282
var jwt = new Jwt ( body , false ) ;
299
283
jwt . setSigningAlgorithm ( header . alg ) ;
@@ -312,7 +296,7 @@ function Verifier(){
312
296
}
313
297
Verifier . prototype . setSigningAlgorithm = function setSigningAlgorithm ( alg ) {
314
298
if ( ! this . isSupportedAlg ( alg ) ) {
315
- throw new JwtError ( properties . errors . UNSUPPORTED_SIGNING_ALG ) ;
299
+ throw new errors . UnsupportedSigningAlgorithmJwtError ( ) ;
316
300
}
317
301
this . signingAlgorithm = alg ;
318
302
return this ;
@@ -342,15 +326,15 @@ Verifier.prototype.verify = function verify(jwtString,cb){
342
326
var signingType = algTypeMap [ header . alg ] ;
343
327
344
328
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 ) ) ;
346
330
}
347
331
348
332
if ( jwt . isExpired ( ) ) {
349
- return done ( new JwtParseError ( properties . errors . EXPIRED , jwtString , header , body ) ) ;
333
+ return done ( new errors . ExpiredJwtParseError ( jwtString , header , body ) ) ;
350
334
}
351
335
352
336
if ( jwt . isNotBefore ( ) ) {
353
- return done ( new JwtParseError ( properties . errors . NOT_ACTIVE , jwtString , header , body ) ) ;
337
+ return done ( new errors . NotActiveJwtParseError ( jwtString , header , body ) ) ;
354
338
}
355
339
356
340
var digstInput = jwt . verificationInput ;
@@ -371,7 +355,7 @@ Verifier.prototype.verify = function verify(jwtString,cb){
371
355
try {
372
356
unescapedSignature = ecdsaSigFormatter . joseToDer ( signature , header . alg ) ;
373
357
} 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 ) ) ;
375
359
}
376
360
} else {
377
361
signatureType = 'base64' ;
@@ -392,7 +376,7 @@ Verifier.prototype.verify = function verify(jwtString,cb){
392
376
newJwt . header = new JwtHeader ( header ) ;
393
377
394
378
if ( ! verified ) {
395
- return done ( new JwtParseError ( properties . errors . SIGNATURE_MISMTACH , jwtString , header , body ) ) ;
379
+ return done ( new errors . SignatureMismatchJwtParseError ( jwtString , header , body ) ) ;
396
380
}
397
381
398
382
return done ( null , newJwt ) ;
@@ -441,15 +425,22 @@ var jwtLib = {
441
425
} else {
442
426
jwt = new Jwt ( claims ) ;
443
427
}
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 ( ) ;
449
431
}
432
+
433
+ jwt . setSigningAlgorithm ( args . length === 3 ? alg : 'HS256' ) ;
434
+ jwt . setSigningKey ( secret ) ;
450
435
jwt . setExpiration ( ( nowEpochSeconds ( ) + ( 60 * 60 ) ) * 1000 ) ; // one hour
436
+
451
437
return jwt ;
452
438
}
453
439
} ;
454
440
441
+ // Copy errors onto export object.
442
+ for ( var key in errors ) {
443
+ jwtLib [ key ] = errors [ key ] ;
444
+ }
445
+
455
446
module . exports = jwtLib ;
0 commit comments