Skip to content

Commit d9c7db2

Browse files
committed
Fixes #242: autodetect key type when pasting it.
1 parent ba880a2 commit d9c7db2

File tree

2 files changed

+51
-5
lines changed

2 files changed

+51
-5
lines changed

js/app.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,8 @@ FaFp+DyAe+b4nDwuJaW2LURbr8AEZga7oQj0uYxcYw==\n\
395395
}
396396
}
397397

398+
validateKey.apply($('textarea[name="public-key"]'));
399+
398400
callback();
399401
} catch(e) {
400402
console.error(e);
@@ -642,16 +644,17 @@ FaFp+DyAe+b4nDwuJaW2LURbr8AEZga7oQj0uYxcYw==\n\
642644

643645
function validateKey() {
644646
var $textarea = $(this);
645-
var valid;
647+
var valid = window.isValidKey($textarea.val());
646648

647-
if($textarea.prop('name') === 'public-key') {
649+
/*if($textarea.prop('name') === 'public-key') {
648650
valid = /-----BEGIN (PUBLIC KEY|CERTIFICATE)-----(.|\n)*-----END (PUBLIC KEY|CERTIFICATE)-----/.test($textarea.val());
649651
} else {
650652
valid = /-----BEGIN RSA PRIVATE KEY-----(.|\n)*-----END RSA PRIVATE KEY-----/.test($textarea.val());
651-
}
653+
}*/
652654

653-
if (valid) {
655+
if (valid.valid) {
654656
$textarea.removeClass('error');
657+
$textarea.val(valid.key);
655658
} else {
656659
$textarea.addClass('error');
657660
}
@@ -670,7 +673,10 @@ FaFp+DyAe+b4nDwuJaW2LURbr8AEZga7oQj0uYxcYw==\n\
670673
updateSignature();
671674
});
672675

673-
$('.jwt-signature textarea[name="public-key"]').on('input', updateSignature);
676+
$('.jwt-signature textarea[name="public-key"]').on('input', function() {
677+
validateKey.apply(this);
678+
updateSignature();
679+
});
674680
$('.jwt-signature textarea[name="private-key"]').on('input', function () {
675681
validateKey.apply(this);
676682
refreshTokenEditor();

js/jwt.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,3 +167,43 @@ window.verify = function (algorithm, value, key, isSecretBase64Encoded) {
167167

168168
return {result: result, error: error};
169169
};
170+
171+
window.isValidKey = function(key) {
172+
// Four tries: no header, header for cert, header for pub key,
173+
// header for priv key
174+
175+
var headers = [{
176+
prologue: '',
177+
epilogue: ''
178+
},{
179+
prologue: '-----BEGIN CERTIFICATE-----\n',
180+
epilogue: '-----END CERTIFICATE-----\n'
181+
}, {
182+
prologue: '-----BEGIN PUBLIC KEY-----\n',
183+
epilogue: '-----END PUBLIC KEY-----\n'
184+
}, {
185+
prologue: '-----BEGIN RSA PRIVATE KEY-----\n',
186+
epilogue: '-----END RSA PRIVATE KEY-----\n'
187+
}];
188+
189+
for(var i = 0; i < headers.length; ++i) {
190+
var header = headers[i];
191+
try {
192+
var newKey = header.prologue;
193+
newKey += key + '\n';
194+
newKey += header.epilogue;
195+
196+
return {
197+
valid: !!KEYUTIL.getKey(newKey),
198+
key: newKey
199+
};
200+
} catch(e2) {
201+
// Ignore
202+
}
203+
}
204+
205+
return {
206+
valid: false,
207+
key: key
208+
};
209+
};

0 commit comments

Comments
 (0)