1
0

Prompt.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. 'use strict';
  2. require('../common');
  3. const fc = require('fast-check');
  4. describe('Prompt', function () {
  5. describe('requestPassword & getPassword', function () {
  6. this.timeout(30000);
  7. it('returns the password fed into the dialog', () => {
  8. fc.assert(fc.property(
  9. fc.string(),
  10. function (password) {
  11. password = password.replace(/\r+|\n+/g, '');
  12. const clean = globalThis.cleanup('', {url: 'ftp://example.com/?0000000000000000'});
  13. document.body.innerHTML = `
  14. <div id="passwordmodal" class="modal fade" role="dialog">
  15. <div class="modal-dialog">
  16. <div class="modal-content">
  17. <div class="modal-body">
  18. <form id="passwordform" role="form">
  19. <div class="form-group">
  20. <input id="passworddecrypt" type="password"
  21. class="form-control" placeholder="Enter password">
  22. </div>
  23. <button type="submit">Decrypt</button>
  24. </form>
  25. </div>
  26. </div>
  27. </div>
  28. </div>
  29. `;
  30. // Initialize the Prompt module to set up event listeners
  31. PrivateBin.Prompt.init();
  32. PrivateBin.Prompt.requestPassword();
  33. // Simulate user input
  34. const passwordInput = document.getElementById('passworddecrypt');
  35. passwordInput.value = password;
  36. // Simulate form submission to trigger password capture
  37. const passwordForm = document.getElementById('passwordform');
  38. /** {@type SubmitEvent} */
  39. const submitEvent = new Event('submit', { bubbles: true, cancelable: true });
  40. passwordForm.dispatchEvent(submitEvent);
  41. // Verify that getPassword returns the submitted password
  42. const result = PrivateBin.Prompt.getPassword();
  43. clean();
  44. return result === password;
  45. }
  46. ));
  47. });
  48. });
  49. });