u2f.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. "use strict";
  2. /* global u2f */
  3. // js/vendor/u2f-api-polyfill.js
  4. AJAX.registerOnload('u2f.js', function () {
  5. var $inputReg = $('#u2f_registration_response');
  6. if ($inputReg.length > 0) {
  7. var $formReg = $inputReg.parents('form');
  8. $formReg.find('input[type=submit]').hide();
  9. setTimeout(function () {
  10. // A magic JS function that talks to the USB device. This function will keep polling for the USB device until it finds one.
  11. var request = JSON.parse($inputReg.attr('data-request'));
  12. u2f.register(request.appId, [request], JSON.parse($inputReg.attr('data-signatures')), function (data) {
  13. // Handle returning error data
  14. if (data.errorCode && data.errorCode !== 0) {
  15. switch (data.errorCode) {
  16. case 5:
  17. Functions.ajaxShowMessage(Messages.strU2FTimeout, false, 'error');
  18. break;
  19. case 4:
  20. Functions.ajaxShowMessage(Messages.strU2FErrorRegister, false, 'error');
  21. break;
  22. case 3:
  23. Functions.ajaxShowMessage(Messages.strU2FInvalidClient, false, 'error');
  24. break;
  25. case 2:
  26. Functions.ajaxShowMessage(Messages.strU2FBadRequest, false, 'error');
  27. break;
  28. default:
  29. Functions.ajaxShowMessage(Messages.strU2FUnknown, false, 'error');
  30. break;
  31. }
  32. return;
  33. } // Fill and submit form.
  34. $inputReg.val(JSON.stringify(data));
  35. $formReg.trigger('submit');
  36. });
  37. }, 1000);
  38. }
  39. var $inputAuth = $('#u2f_authentication_response');
  40. if ($inputAuth.length > 0) {
  41. var $formAuth = $inputAuth.parents('form');
  42. $formAuth.find('input[type=submit]').hide();
  43. setTimeout(function () {
  44. // Magic JavaScript talking to your HID
  45. // appid, challenge, authenticateRequests
  46. var request = JSON.parse($inputAuth.attr('data-request'));
  47. u2f.sign(request[0].appId, request[0].challenge, request, function (data) {
  48. // Handle returning error data
  49. if (data.errorCode && data.errorCode !== 0) {
  50. switch (data.errorCode) {
  51. case 5:
  52. Functions.ajaxShowMessage(Messages.strU2FTimeout, false, 'error');
  53. break;
  54. case 4:
  55. Functions.ajaxShowMessage(Messages.strU2FErrorAuthenticate, false, 'error');
  56. break;
  57. case 3:
  58. Functions.ajaxShowMessage(Messages.strU2FInvalidClient, false, 'error');
  59. break;
  60. case 2:
  61. Functions.ajaxShowMessage(Messages.strU2FBadRequest, false, 'error');
  62. break;
  63. default:
  64. Functions.ajaxShowMessage(Messages.strU2FUnknown, false, 'error');
  65. break;
  66. }
  67. return;
  68. } // Fill and submit form.
  69. $inputAuth.val(JSON.stringify(data));
  70. $formAuth.trigger('submit');
  71. });
  72. }, 1000);
  73. }
  74. });