secrets.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. $(document).ready(function() {
  2. // Unlocking a secret
  3. $('button.unlock-secret').click(function (event) {
  4. var secret_id = $(this).attr('secret-id');
  5. // Retrieve from storage or prompt for private key
  6. var private_key = sessionStorage.getItem('private_key');
  7. if (!private_key) {
  8. $('#privkey_modal').modal('show');
  9. } else {
  10. unlock_secret(secret_id, private_key);
  11. $(this).hide();
  12. $(this).siblings('button.lock-secret').show();
  13. }
  14. });
  15. // Locking a secret
  16. $('button.lock-secret').click(function (event) {
  17. var secret_id = $(this).attr('secret-id');
  18. $('#secret_' + secret_id).html('********');
  19. $(this).hide();
  20. $(this).siblings('button.unlock-secret').show();
  21. });
  22. // Adding/editing a secret
  23. $('form.requires-private-key').submit(function(event) {
  24. var private_key = sessionStorage.getItem('private_key');
  25. if (private_key) {
  26. $('#id_private_key').val(private_key);
  27. } else {
  28. $('#privkey_modal').modal('show');
  29. return false;
  30. }
  31. });
  32. // Prompt the user to enter a private RSA key for decryption
  33. $('#submit_privkey').click(function() {
  34. var private_key = $('#user_privkey').val();
  35. sessionStorage.setItem('private_key', private_key);
  36. });
  37. // Generate a new public/private key pair via the API
  38. $('#generate_keypair').click(function() {
  39. $('#new_keypair_modal').modal('show');
  40. $.ajax({
  41. url: '/api/secrets/generate-keys/',
  42. type: 'GET',
  43. dataType: 'json',
  44. success: function (response, status) {
  45. var public_key = response.public_key;
  46. var private_key = response.private_key;
  47. $('#new_pubkey').val(public_key);
  48. $('#new_privkey').val(private_key);
  49. },
  50. error: function (xhr, ajaxOptions, thrownError) {
  51. alert("There was an error generating a new key pair.");
  52. }
  53. });
  54. });
  55. // Enter a newly generated public key
  56. $('#use_new_pubkey').click(function() {
  57. var new_pubkey = $('#new_pubkey');
  58. if (new_pubkey.val()) {
  59. $('#id_public_key').val(new_pubkey.val());
  60. }
  61. });
  62. // Retrieve a secret via the API
  63. function unlock_secret(secret_id, private_key) {
  64. var csrf_token = $('input[name=csrfmiddlewaretoken]').val();
  65. $.ajax({
  66. url: '/api/secrets/secrets/' + secret_id + '/decrypt/',
  67. type: 'POST',
  68. data: {
  69. private_key: private_key
  70. },
  71. dataType: 'json',
  72. beforeSend: function(xhr, settings) {
  73. xhr.setRequestHeader("X-CSRFToken", csrf_token);
  74. },
  75. success: function (response, status) {
  76. var secret_plaintext = response.plaintext;
  77. $('#secret_' + secret_id).html(secret_plaintext);
  78. return true;
  79. },
  80. error: function (xhr, ajaxOptions, thrownError) {
  81. if (xhr.status == 403) {
  82. alert("Decryption failed: " + xhr.statusText);
  83. }
  84. }
  85. });
  86. }
  87. });