Greasy Fork 支持简体中文。

Gab Encryption

Encrypt and decrypt messages on Gab on the fly.

  1. // ==UserScript==
  2. // @name Gab Encryption
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description Encrypt and decrypt messages on Gab on the fly.
  6. // @author Undead Mockingbird
  7. // @match https://www.gab.com/*
  8. // @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. /************************************************
  13. * HOW TO USE HOW TO USE HOW TO USE HOW TO USE
  14. ************************************************
  15. * Encrypt a message on minds by ending it with
  16. * two slashes and then hitting space.
  17. *
  18. * Messages that have been encrypted with the
  19. * the same password will be automatically
  20. * decrypted and appear in red.
  21. */
  22.  
  23. // CONFIG: Insert your password here.
  24. var password = "adfaldskfjlkadsf";
  25. /////////////////////////////////////
  26.  
  27. // Replace any messages we manage to decrypt.
  28. function decryptDiscordMessages(password) {
  29. setTimeout(function(){decryptDiscordMessages(password)}, 10);
  30. var nodes = document.querySelectorAll('.gab__body, .post-comment__content__body');
  31.  
  32. for (var i = nodes.length; i--;) {
  33. if (nodes[i].__decrypted != undefined) continue;
  34. nodes[i].__decrypted = true;
  35.  
  36. var text = nodes[i].innerText;
  37. if (text.endsWith('(edited)')) {
  38. text = text.slice(0, -'(edited)'.length);
  39. }
  40. var decrypted = CryptoJS.AES.decrypt(text, password);
  41. if (decrypted == "") continue;
  42. try {
  43. var message = decrypted.toString(CryptoJS.enc.Utf8);
  44. if (message == "") continue;
  45. nodes[i].innerHTML = '<div style="color:red">' + message + '</div>';
  46. } catch (error) {}
  47. }
  48. }
  49. decryptDiscordMessages(password);
  50.  
  51. function registerMessageHook() {
  52. setTimeout(registerMessageHook, 50);
  53. var iframe = document.getElementsByTagName('iframe')[0];
  54. if (iframe == undefined) return;
  55.  
  56. var targetNode = iframe.contentDocument.getElementById('tinymce');
  57. if (targetNode == undefined) return;
  58.  
  59. targetNode.onkeydown = function(e){
  60. var message = targetNode.innerText;
  61. if (message.endsWith('//') && e.keyCode == 32) {
  62. message = message.slice(0, -2);
  63. console.log(message);
  64. var cypher = CryptoJS.AES.encrypt(message, password);
  65. targetNode.innerText = cypher;
  66. return false;
  67. }
  68. };
  69. }
  70. registerMessageHook();
  71.  
  72. function registerMessageHook2() {
  73. setTimeout(registerMessageHook2, 50);
  74.  
  75. var targetNode = document.querySelector('div.post-comment-form__input textarea');
  76. if (targetNode == undefined) return;
  77.  
  78. targetNode.onkeydown = function(e){
  79. var message = targetNode.value;
  80. if (message.endsWith('//') && e.keyCode == 32) {
  81. message = message.slice(0, -2);
  82. console.log(message);
  83. var cypher = CryptoJS.AES.encrypt(message, password);
  84. targetNode.value = cypher;
  85. return false;
  86. }
  87. };
  88. }
  89. registerMessageHook2();