@@ -348,6 +348,60 @@ FaFp+DyAe+b4nDwuJaW2LURbr8AEZga7oQj0uYxcYw==\n\
348
348
349
349
}
350
350
351
+ function downloadPublicKeyIfPossible ( token , callback ) {
352
+ var decoded = window . decodeJWT ( token ) ;
353
+ if ( decoded . error ) {
354
+ console . error ( decoded . error ) ;
355
+ callback ( ) ;
356
+ return ;
357
+ }
358
+
359
+ if ( decoded . result . header . alg . indexOf ( 'RS' ) !== 0 ||
360
+ ! decoded . result . header . kid ||
361
+ ! decoded . result . payload . iss ) {
362
+ callback ( ) ;
363
+ return ;
364
+ }
365
+
366
+ var url = decoded . result . payload . iss + '.well-known/jwks.json' ;
367
+ $ . get ( url , function ( data ) {
368
+ try {
369
+ if ( ! data . keys || ! ( data . keys instanceof Array ) ) {
370
+ callback ( ) ;
371
+ return ;
372
+ }
373
+
374
+ for ( var i = 0 ; i < data . keys . length ; ++ i ) {
375
+ if ( data . keys [ i ] . kid === decoded . result . header . kid ) {
376
+ var x5c = data . keys [ i ] . x5c ;
377
+ if ( ! ( x5c instanceof Array ) ) {
378
+ x5c = [ x5c ] ;
379
+ }
380
+
381
+ var certChain = '' ;
382
+ x5c . forEach ( function ( cert ) {
383
+ certChain += '-----BEGIN CERTIFICATE-----\n' ;
384
+ certChain += cert + '\n' ;
385
+ certChain += '-----END CERTIFICATE-----\n' ;
386
+ } ) ;
387
+
388
+ var publicKeyElement = $ ( 'textarea[name="public-key"]' ) ;
389
+ publicKeyElement . val ( certChain ) ;
390
+
391
+ var privateKeyElement = $ ( 'textarea[name="private-key"]' ) ;
392
+ privateKeyElement . val ( '' ) ;
393
+
394
+ break ;
395
+ }
396
+ }
397
+
398
+ callback ( ) ;
399
+ } catch ( e ) {
400
+ console . error ( e ) ;
401
+ callback ( ) ;
402
+ }
403
+ } ) ;
404
+ }
351
405
352
406
function tokenEditorOnChangeListener ( instance ) {
353
407
var value = getTrimmedValue ( instance ) ;
@@ -367,21 +421,25 @@ FaFp+DyAe+b4nDwuJaW2LURbr8AEZga7oQj0uYxcYw==\n\
367
421
368
422
try {
369
423
selectDetectedAlgorithm ( JSON . parse ( decodedHeader . result ) . alg ) ;
370
- } catch ( e ) {
424
+ } catch ( e ) {
371
425
console . error ( 'Invalid header decoded' ) ;
372
426
}
373
427
374
- var selector = $ ( '.jwt-header' ) ;
375
- setJSONEditorContent ( headerEditor , decodedHeader , selector ) ;
376
- var decodedPayload = window . decode ( parts [ 1 ] ) ;
377
- selector = $ ( '.jwt-payload' ) ;
378
- setJSONEditorContent ( payloadEditor , decodedPayload , selector ) ;
428
+ downloadPublicKeyIfPossible ( value , function ( ) {
379
429
380
- fireEvent ( secretElement ) ;
430
+ var selector = $ ( '.jwt-header' ) ;
431
+ setJSONEditorContent ( headerEditor , decodedHeader , selector ) ;
432
+ var decodedPayload = window . decode ( parts [ 1 ] ) ;
433
+ selector = $ ( '.jwt-payload' ) ;
434
+ setJSONEditorContent ( payloadEditor , decodedPayload , selector ) ;
381
435
382
- if ( window . matchMedia ( '(min-width: 768px)' ) . matches ) {
383
- autoHeightInput ( ) ;
384
- }
436
+ fireEvent ( secretElement ) ;
437
+
438
+ if ( window . matchMedia ( '(min-width: 768px)' ) . matches ) {
439
+ autoHeightInput ( ) ;
440
+ }
441
+
442
+ } ) ;
385
443
}
386
444
387
445
function selectDetectedAlgorithm ( alg ) {
0 commit comments