Bläddra i källkod

Removed Clippy

n1474335 5 år sedan
förälder
incheckning
223743e3b5

+ 1 - 2
.eslintignore

@@ -1,2 +1 @@
-src/core/vendor/**
-src/web/static/clippy_assets/**
+src/core/vendor/**

+ 30 - 19
package-lock.json

@@ -3190,14 +3190,6 @@
       "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
       "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
       "dev": true
       "dev": true
     },
     },
-    "clippyjs": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/clippyjs/-/clippyjs-0.0.3.tgz",
-      "integrity": "sha512-i4sPaKbCA6PfXiwxNK35E1io6AXN7VGwEGZR9sE8RqOgXPNtRWKbFubmx87JwSuwIrdClO/rkTMjhl2ZyOHjug==",
-      "requires": {
-        "jquery": "^3.2.1"
-      }
-    },
     "cliui": {
     "cliui": {
       "version": "3.2.0",
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
@@ -6026,7 +6018,8 @@
         "ansi-regex": {
         "ansi-regex": {
           "version": "2.1.1",
           "version": "2.1.1",
           "bundled": true,
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         },
         "aproba": {
         "aproba": {
           "version": "1.2.0",
           "version": "1.2.0",
@@ -6047,12 +6040,14 @@
         "balanced-match": {
         "balanced-match": {
           "version": "1.0.0",
           "version": "1.0.0",
           "bundled": true,
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         },
         "brace-expansion": {
         "brace-expansion": {
           "version": "1.1.11",
           "version": "1.1.11",
           "bundled": true,
           "bundled": true,
           "dev": true,
           "dev": true,
+          "optional": true,
           "requires": {
           "requires": {
             "balanced-match": "^1.0.0",
             "balanced-match": "^1.0.0",
             "concat-map": "0.0.1"
             "concat-map": "0.0.1"
@@ -6067,17 +6062,20 @@
         "code-point-at": {
         "code-point-at": {
           "version": "1.1.0",
           "version": "1.1.0",
           "bundled": true,
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         },
         "concat-map": {
         "concat-map": {
           "version": "0.0.1",
           "version": "0.0.1",
           "bundled": true,
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         },
         "console-control-strings": {
         "console-control-strings": {
           "version": "1.1.0",
           "version": "1.1.0",
           "bundled": true,
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         },
         "core-util-is": {
         "core-util-is": {
           "version": "1.0.2",
           "version": "1.0.2",
@@ -6194,7 +6192,8 @@
         "inherits": {
         "inherits": {
           "version": "2.0.3",
           "version": "2.0.3",
           "bundled": true,
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         },
         "ini": {
         "ini": {
           "version": "1.3.5",
           "version": "1.3.5",
@@ -6206,6 +6205,7 @@
           "version": "1.0.0",
           "version": "1.0.0",
           "bundled": true,
           "bundled": true,
           "dev": true,
           "dev": true,
+          "optional": true,
           "requires": {
           "requires": {
             "number-is-nan": "^1.0.0"
             "number-is-nan": "^1.0.0"
           }
           }
@@ -6220,6 +6220,7 @@
           "version": "3.0.4",
           "version": "3.0.4",
           "bundled": true,
           "bundled": true,
           "dev": true,
           "dev": true,
+          "optional": true,
           "requires": {
           "requires": {
             "brace-expansion": "^1.1.7"
             "brace-expansion": "^1.1.7"
           }
           }
@@ -6227,12 +6228,14 @@
         "minimist": {
         "minimist": {
           "version": "0.0.8",
           "version": "0.0.8",
           "bundled": true,
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         },
         "minipass": {
         "minipass": {
           "version": "2.3.5",
           "version": "2.3.5",
           "bundled": true,
           "bundled": true,
           "dev": true,
           "dev": true,
+          "optional": true,
           "requires": {
           "requires": {
             "safe-buffer": "^5.1.2",
             "safe-buffer": "^5.1.2",
             "yallist": "^3.0.0"
             "yallist": "^3.0.0"
@@ -6251,6 +6254,7 @@
           "version": "0.5.1",
           "version": "0.5.1",
           "bundled": true,
           "bundled": true,
           "dev": true,
           "dev": true,
+          "optional": true,
           "requires": {
           "requires": {
             "minimist": "0.0.8"
             "minimist": "0.0.8"
           }
           }
@@ -6331,7 +6335,8 @@
         "number-is-nan": {
         "number-is-nan": {
           "version": "1.0.1",
           "version": "1.0.1",
           "bundled": true,
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         },
         "object-assign": {
         "object-assign": {
           "version": "4.1.1",
           "version": "4.1.1",
@@ -6343,6 +6348,7 @@
           "version": "1.4.0",
           "version": "1.4.0",
           "bundled": true,
           "bundled": true,
           "dev": true,
           "dev": true,
+          "optional": true,
           "requires": {
           "requires": {
             "wrappy": "1"
             "wrappy": "1"
           }
           }
@@ -6428,7 +6434,8 @@
         "safe-buffer": {
         "safe-buffer": {
           "version": "5.1.2",
           "version": "5.1.2",
           "bundled": true,
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         },
         "safer-buffer": {
         "safer-buffer": {
           "version": "2.1.2",
           "version": "2.1.2",
@@ -6464,6 +6471,7 @@
           "version": "1.0.2",
           "version": "1.0.2",
           "bundled": true,
           "bundled": true,
           "dev": true,
           "dev": true,
+          "optional": true,
           "requires": {
           "requires": {
             "code-point-at": "^1.0.0",
             "code-point-at": "^1.0.0",
             "is-fullwidth-code-point": "^1.0.0",
             "is-fullwidth-code-point": "^1.0.0",
@@ -6483,6 +6491,7 @@
           "version": "3.0.1",
           "version": "3.0.1",
           "bundled": true,
           "bundled": true,
           "dev": true,
           "dev": true,
+          "optional": true,
           "requires": {
           "requires": {
             "ansi-regex": "^2.0.0"
             "ansi-regex": "^2.0.0"
           }
           }
@@ -6526,12 +6535,14 @@
         "wrappy": {
         "wrappy": {
           "version": "1.0.2",
           "version": "1.0.2",
           "bundled": true,
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         },
         "yallist": {
         "yallist": {
           "version": "3.0.3",
           "version": "3.0.3",
           "bundled": true,
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         }
         }
       }
       }
     },
     },

+ 0 - 1
package.json

@@ -95,7 +95,6 @@
     "bootstrap-material-design": "^4.1.2",
     "bootstrap-material-design": "^4.1.2",
     "bson": "^4.0.2",
     "bson": "^4.0.2",
     "chi-squared": "^1.1.0",
     "chi-squared": "^1.1.0",
-    "clippyjs": "0.0.3",
     "core-js": "^3.2.1",
     "core-js": "^3.2.1",
     "crypto-api": "^0.8.5",
     "crypto-api": "^0.8.5",
     "crypto-js": "^3.1.9-1",
     "crypto-js": "^3.1.9-1",

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/web/static/clippy_assets/agents/Clippy/agent.js


BIN
src/web/static/clippy_assets/agents/Clippy/map.png


+ 0 - 62
src/web/static/clippy_assets/clippy.css

@@ -1,62 +0,0 @@
-.clippy, .clippy-balloon {
-    position: fixed;
-    z-index: 1000;
-    cursor: pointer;
-}
-
-.clippy-balloon {
-
-    background: #FFC;
-    color: black;
-    padding: 8px;
-    border: 1px solid black;
-    border-radius: 5px;
-
-}
-
-.clippy-content {
-    max-width: 200px;
-    min-width: 120px;
-    font-family: "Microsoft Sans", sans-serif;
-    font-size: 10pt;
-}
-
-.clippy-tip {
-    width: 10px;
-    height: 16px;
-    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAMAAAAlvKiEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRF///MAAAA////52QwgAAAAAN0Uk5T//8A18oNQQAAAGxJREFUeNqs0kEOwCAIRFHn3//QTUU6xMyyxii+jQosrTPkyPEM6IN3FtzIRk1U4dFeKWQiH6pRRowMVKEmvronEynkwj0uZJgR22+YLopPSo9P34wJSamLSU7lSIWLJU7NkNomNlhqxUeAAQC+TQLZyEuJBwAAAABJRU5ErkJggg==) no-repeat;
-    position: absolute;
-}
-
-.clippy-top-left .clippy-tip {
-    top: 100%;
-    margin-top: 0px;
-    left: 100%;
-    margin-left: -50px;
-}
-
-.clippy-top-right .clippy-tip {
-    top: 100%;
-    margin-top: 0px;
-    left: 0;
-    margin-left: 50px;
-    background-position: -10px 0;
-
-}
-
-.clippy-bottom-right .clippy-tip {
-    top: 0;
-    margin-top: -16px;
-    left: 0;
-    margin-left: 50px;
-    background-position: -10px -16px;
-}
-
-.clippy-bottom-left .clippy-tip {
-    top: 0;
-    margin-top: -16px;
-    left: 100%;
-    margin-left: -50px;
-    background-position: 0px -16px;
-}
-

BIN
src/web/static/clippy_assets/images/border.png


BIN
src/web/static/clippy_assets/images/tip.png


+ 0 - 1
src/web/stylesheets/index.js

@@ -8,7 +8,6 @@
 
 
 /* Libraries */
 /* Libraries */
 import "highlight.js/styles/vs.css";
 import "highlight.js/styles/vs.css";
-import "../static/clippy_assets/clippy.css";
 
 
 /* Frameworks */
 /* Frameworks */
 import "./vendors/bootstrap.scss";
 import "./vendors/bootstrap.scss";

+ 1 - 294
src/web/waiters/SeasonalWaiter.mjs

@@ -4,17 +4,13 @@
  * @license Apache-2.0
  * @license Apache-2.0
  */
  */
 
 
-import clippy from "clippyjs";
-import "../static/clippy_assets/agents/Clippy/agent.js";
-import clippyMap from "../static/clippy_assets/agents/Clippy/map.png";
-
 /**
 /**
  * Waiter to handle seasonal events and easter eggs.
  * Waiter to handle seasonal events and easter eggs.
  */
  */
 class SeasonalWaiter {
 class SeasonalWaiter {
 
 
     /**
     /**
-     * SeasonalWaiter contructor.
+     * SeasonalWaiter constructor.
      *
      *
      * @param {App} app - The main view object for CyberChef.
      * @param {App} app - The main view object for CyberChef.
      * @param {Manager} manager - The CyberChef event manager.
      * @param {Manager} manager - The CyberChef event manager.
@@ -22,8 +18,6 @@ class SeasonalWaiter {
     constructor(app, manager) {
     constructor(app, manager) {
         this.app = app;
         this.app = app;
         this.manager = manager;
         this.manager = manager;
-
-        this.clippyAgent = null;
     }
     }
 
 
 
 
@@ -34,14 +28,6 @@ class SeasonalWaiter {
         // Konami code
         // Konami code
         this.kkeys = [];
         this.kkeys = [];
         window.addEventListener("keydown", this.konamiCodeListener.bind(this));
         window.addEventListener("keydown", this.konamiCodeListener.bind(this));
-
-        // Clippy
-        const now = new Date();
-        if (now.getMonth() === 3 && now.getDate() === 1) {
-            this.addClippyOption();
-            this.manager.addDynamicListener(".option-item #clippy", "change", this.setupClippy, this);
-            this.setupClippy();
-        }
     }
     }
 
 
 
 
@@ -65,285 +51,6 @@ class SeasonalWaiter {
         }
         }
     }
     }
 
 
-    /**
-     * Creates an option in the Options menu for turning Clippy on or off
-     */
-    addClippyOption() {
-        const optionsBody = document.getElementById("options-body"),
-            optionItem = document.createElement("span");
-
-        optionItem.className = "bmd-form-group is-filled";
-        optionItem.innerHTML = `<div class="checkbox option-item">
-            <label for="clippy">
-                <input type="checkbox" option="clippy" id="clippy" checked="">
-                Use the Clippy helper
-            </label>
-        </div>`;
-        optionsBody.appendChild(optionItem);
-
-        if (!("clippy" in this.app.options)) {
-            this.app.options.clippy = true;
-        }
-
-        this.manager.options.load();
-    }
-
-    /**
-     * Sets up Clippy for April Fools Day
-     */
-    setupClippy() {
-        // Destroy any previous agents
-        if (this.clippyAgent) {
-            this.clippyAgent.closeBalloonImmediately();
-            this.clippyAgent.hide();
-        }
-
-        if (!this.app.options.clippy) {
-            if (this.clippyTimeouts) this.clippyTimeouts.forEach(t => clearTimeout(t));
-            return;
-        }
-
-        // Set base path to # to prevent external network requests
-        const clippyAssets = "#";
-        // Shim the library to prevent external network requests
-        shimClippy(clippy);
-
-        const self = this;
-        clippy.load("Clippy", (agent) => {
-            shimClippyAgent(agent);
-            self.clippyAgent = agent;
-            agent.show();
-            agent.speak("Hello, I'm Clippy, your personal cyber assistant!");
-        }, undefined, clippyAssets);
-
-        // Watch for the Auto Magic button appearing
-        const magic = document.getElementById("magic");
-        const observer = new MutationObserver((mutationsList, observer) => {
-            // Read in message and recipe
-            let msg, recipe;
-            for (const mutation of mutationsList) {
-                if (mutation.attributeName === "data-original-title") {
-                    msg = magic.getAttribute("data-original-title");
-                }
-                if (mutation.attributeName === "data-recipe") {
-                    recipe = magic.getAttribute("data-recipe");
-                }
-            }
-
-            // Close balloon if it is currently showing a magic hint
-            const balloon = self.clippyAgent._balloon._balloon;
-            if (balloon.is(":visible") && balloon.text().indexOf("That looks like encoded data") >= 0) {
-                self.clippyAgent._balloon.hide(true);
-                this.clippyAgent._balloon._hidden = true;
-            }
-
-            // If a recipe was found, get Clippy to tell the user
-            if (recipe) {
-                recipe = this.manager.controls.generateStateUrl(true, true, JSON.parse(recipe));
-                msg = `That looks like encoded data!<br><br>${msg}<br><br>Click <a class="clippyMagicRecipe" href="${recipe}">here</a> to load this recipe.`;
-
-                // Stop current balloon activity immediately and trigger speak again
-                this.clippyAgent.closeBalloonImmediately();
-                self.clippyAgent.speak(msg, true);
-                // self.clippyAgent._queue.next();
-            }
-        });
-        observer.observe(document.getElementById("magic"), {attributes: true});
-
-        // Play animations for various things
-        this.manager.addListeners("#search", "click", () => {
-            this.clippyAgent.play("Searching");
-        }, this);
-        this.manager.addListeners("#save,#save-to-file", "click", () => {
-            this.clippyAgent.play("Save");
-        }, this);
-        this.manager.addListeners("#clr-recipe,#clr-io", "click", () => {
-            this.clippyAgent.play("EmptyTrash");
-        }, this);
-        this.manager.addListeners("#bake", "click", e => {
-            if (e.target.closest("button").textContent.toLowerCase().indexOf("bake") >= 0) {
-                this.clippyAgent.play("Thinking");
-            } else {
-                this.clippyAgent.play("EmptyTrash");
-            }
-            this.clippyAgent._queue.clear();
-        }, this);
-        this.manager.addListeners("#input-text", "keydown", () => {
-            this.clippyAgent.play("Writing");
-            this.clippyAgent._queue.clear();
-        }, this);
-        this.manager.addDynamicListener("a.clippyMagicRecipe", "click", (e) => {
-            this.clippyAgent.play("Congratulate");
-        }, this);
-
-        this.clippyTimeouts = [];
-        // Show challenge after timeout
-        this.clippyTimeouts.push(setTimeout(() => {
-            const hex = "1f 8b 08 00 ae a1 9b 5c 00 ff 05 40 a1 12 00 10 0c fd 26 61 5b 76 aa 9d 26 a8 02 02 37 84 f7 fb bb c5 a4 5f 22 c6 09 e5 6e c5 4c 2d 3f e9 30 a6 ea 41 a2 f2 ac 1c 00 00 00";
-            self.clippyAgent.speak(`How about a fun challenge?<br><br>Try decoding this (click to load):<br><a href="#recipe=[]&input=${encodeURIComponent(btoa(hex))}">${hex}</a>`, true);
-            self.clippyAgent.play("GetAttention");
-        }, 1 * 60 * 1000));
-
-        this.clippyTimeouts.push(setTimeout(() => {
-            self.clippyAgent.speak("<i>Did you know?</i><br><br>You can load files into CyberChef up to around 500MB using drag and drop or the load file button.", 15000);
-            self.clippyAgent.play("Wave");
-        }, 2 * 60 * 1000));
-
-        this.clippyTimeouts.push(setTimeout(() => {
-            self.clippyAgent.speak("<i>Did you know?</i><br><br>You can use the 'Fork' operation to split up your input and run the recipe over each branch separately.<br><br><a class='clippyMagicRecipe' href=\"#recipe=Fork('%5C%5Cn','%5C%5Cn',false)From_UNIX_Timestamp('Seconds%20(s)')&amp;input=OTc4MzQ2ODAwCjEwMTI2NTEyMDAKMTA0NjY5NjQwMAoxMDgxMDg3MjAwCjExMTUzMDUyMDAKMTE0OTYwOTYwMA\">Here's an example</a>.", 15000);
-            self.clippyAgent.play("Print");
-        }, 3 * 60 * 1000));
-
-        this.clippyTimeouts.push(setTimeout(() => {
-            self.clippyAgent.speak("<i>Did you know?</i><br><br>The 'Magic' operation uses a number of methods to detect encoded data and the operations which can be used to make sense of it. A technical description of these methods can be found <a href=\"https://github.com/gchq/CyberChef/wiki/Automatic-detection-of-encoded-data-using-CyberChef-Magic\">here</a>.", 15000);
-            self.clippyAgent.play("Alert");
-        }, 4 * 60 * 1000));
-
-        this.clippyTimeouts.push(setTimeout(() => {
-            self.clippyAgent.speak("<i>Did you know?</i><br><br>You can use parts of the input as arguments to operations.<br><br><a class='clippyMagicRecipe' href=\"#recipe=Register('key%3D(%5B%5C%5Cda-f%5D*)',true,false)Find_/_Replace(%7B'option':'Regex','string':'.*data%3D(.*)'%7D,'$1',true,false,true)RC4(%7B'option':'Hex','string':'$R0'%7D,'Hex','Latin1')&amp;input=aHR0cDovL21hbHdhcmV6LmJpei9iZWFjb24ucGhwP2tleT0wZTkzMmE1YyZkYXRhPThkYjdkNWViZTM4NjYzYTU0ZWNiYjMzNGUzZGIxMQ\">Click here for an example</a>.", 15000);
-            self.clippyAgent.play("CheckingSomething");
-        }, 5 * 60 * 1000));
-    }
-
-}
-
-
-/**
- * Shims various ClippyJS functions to modify behaviour.
- *
- * @param {Clippy} clippy - The Clippy library
- */
-function shimClippy(clippy) {
-    // Shim _loadSounds so that it doesn't actually try to load any sounds
-    clippy.load._loadSounds = function _loadSounds (name, path) {
-        let dfd = clippy.load._sounds[name];
-        if (dfd) return dfd;
-
-        // set dfd if not defined
-        dfd = clippy.load._sounds[name] = $.Deferred();
-
-        // Resolve immediately without loading
-        dfd.resolve({});
-
-        return dfd.promise();
-    };
-
-    // Shim _loadMap so that it uses the local copy
-    clippy.load._loadMap = function _loadMap (path) {
-        let dfd = clippy.load._maps[path];
-        if (dfd) return dfd;
-
-        // set dfd if not defined
-        dfd = clippy.load._maps[path] = $.Deferred();
-
-        const src = clippyMap;
-        const img = new Image();
-
-        img.onload = dfd.resolve;
-        img.onerror = dfd.reject;
-
-        // start loading the map;
-        img.setAttribute("src", src);
-
-        return dfd.promise();
-    };
-
-    // Make sure we don't request the remote map
-    clippy.Animator.prototype._setupElement = function _setupElement (el) {
-        const frameSize = this._data.framesize;
-        el.css("display", "none");
-        el.css({ width: frameSize[0], height: frameSize[1] });
-        el.css("background", "url('" + clippyMap + "') no-repeat");
-
-        return el;
-    };
-}
-
-/**
- * Shims various ClippyJS Agent functions to modify behaviour.
- *
- * @param {Agent} agent - The Clippy Agent
- */
-function shimClippyAgent(agent) {
-    // Turn off all sounds
-    agent._animator._playSound = () => {};
-
-    // Improve speak function to support HTML markup
-    const self = agent._balloon;
-    agent._balloon.speak = (complete, text, hold) => {
-        self._hidden = false;
-        self.show();
-        const c = self._content;
-        // set height to auto
-        c.height("auto");
-        c.width("auto");
-        // add the text
-        c.html(text);
-        // set height
-        c.height(c.height());
-        c.width(c.width());
-        c.text("");
-        self.reposition();
-
-        self._complete = complete;
-        self._sayWords(text, hold, complete);
-        if (hold) agent._queue.next();
-    };
-
-    // Improve the _sayWords function to allow HTML and support timeouts
-    agent._balloon.WORD_SPEAK_TIME = 60;
-    agent._balloon._sayWords = (text, hold, complete) => {
-        self._active = true;
-        self._hold = hold;
-        const words = text.split(/[^\S-]/);
-        const time = self.WORD_SPEAK_TIME;
-        const el = self._content;
-        let idx = 1;
-        clearTimeout(self.holdTimeout);
-
-        self._addWord = $.proxy(function () {
-            if (!self._active) return;
-            if (idx > words.length) {
-                delete self._addWord;
-                self._active = false;
-                if (!self._hold) {
-                    complete();
-                    self.hide();
-                } else if (typeof hold === "number") {
-                    self.holdTimeout = setTimeout(() => {
-                        self._hold = false;
-                        complete();
-                        self.hide();
-                    }, hold);
-                }
-            } else {
-                el.html(words.slice(0, idx).join(" "));
-                idx++;
-                self._loop = window.setTimeout($.proxy(self._addWord, self), time);
-            }
-        }, self);
-
-        self._addWord();
-    };
-
-    // Add break-word to balloon CSS
-    agent._balloon._balloon.css("word-break", "break-word");
-
-    // Close the balloon on click (unless it was a link)
-    agent._balloon._balloon.click(e => {
-        if (e.target.nodeName !== "A") {
-            agent._balloon.hide(true);
-            agent._balloon._hidden = true;
-        }
-    });
-
-    // Add function to immediately close the balloon even if it is currently doing something
-    agent.closeBalloonImmediately = () => {
-        agent._queue.clear();
-        agent._balloon.hide(true);
-        agent._balloon._hidden = true;
-        agent._queue.next();
-    };
 }
 }
 
 
 export default SeasonalWaiter;
 export default SeasonalWaiter;

Vissa filer visades inte eftersom för många filer har ändrats