secrets.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. }
  12. });
  13. // Locking a secret
  14. $('button.lock-secret').click(function (event) {
  15. var secret_id = $(this).attr('secret-id');
  16. var secret_div = $('#secret_' + secret_id);
  17. // Delete the plaintext
  18. secret_div.html('********');
  19. $(this).hide();
  20. $(this).siblings('button.unlock-secret').show();
  21. });
  22. // Adding/editing a secret
  23. private_key_field = $('#id_private_key');
  24. private_key_field.parents('form').submit(function(event) {
  25. console.log("form submitted");
  26. var private_key = sessionStorage.getItem('private_key');
  27. if (private_key) {
  28. private_key_field.val(private_key);
  29. } else if ($('form .requires-private-key:first').val()) {
  30. console.log("we need a key!");
  31. $('#privkey_modal').modal('show');
  32. return false;
  33. }
  34. });
  35. // Saving a private RSA key locally
  36. $('#submit_privkey').click(function() {
  37. var private_key = $('#user_privkey').val();
  38. sessionStorage.setItem('private_key', private_key);
  39. });
  40. // Generate a new public/private key pair via the API
  41. $('#generate_keypair').click(function() {
  42. $('#new_keypair_modal').modal('show');
  43. $.ajax({
  44. url: '/api/secrets/generate-keys/',
  45. type: 'GET',
  46. dataType: 'json',
  47. success: function (response, status) {
  48. var public_key = response.public_key;
  49. var private_key = response.private_key;
  50. $('#new_pubkey').val(public_key);
  51. $('#new_privkey').val(private_key);
  52. },
  53. error: function (xhr, ajaxOptions, thrownError) {
  54. alert("There was an error generating a new key pair.");
  55. }
  56. });
  57. });
  58. // Enter a newly generated public key
  59. $('#use_new_pubkey').click(function() {
  60. var new_pubkey = $('#new_pubkey');
  61. if (new_pubkey.val()) {
  62. $('#id_public_key').val(new_pubkey.val());
  63. }
  64. });
  65. // Retrieve a secret via the API
  66. function unlock_secret(secret_id, private_key) {
  67. var csrf_token = $('input[name=csrfmiddlewaretoken]').val();
  68. $.ajax({
  69. url: '/api/secrets/secrets/' + secret_id + '/',
  70. type: 'POST',
  71. data: {
  72. private_key: private_key
  73. },
  74. dataType: 'json',
  75. beforeSend: function(xhr, settings) {
  76. xhr.setRequestHeader("X-CSRFToken", csrf_token);
  77. },
  78. success: function (response, status) {
  79. $('#secret_' + secret_id).html(response.plaintext);
  80. $('button.unlock-secret[secret-id=' + secret_id + ']').hide();
  81. $('button.lock-secret[secret-id=' + secret_id + ']').show();
  82. },
  83. error: function (xhr, ajaxOptions, thrownError) {
  84. if (xhr.status == 403) {
  85. alert("Permission denied");
  86. } else {
  87. var json = jQuery.parseJSON(xhr.responseText);
  88. alert("Decryption failed: " + json['error']);
  89. }
  90. }
  91. });
  92. }
  93. });