فهرست منبع

function tidy, add comments

d98762625 7 سال پیش
والد
کامیت
b8b98358d0
3فایلهای تغییر یافته به همراه119 افزوده شده و 69 حذف شده
  1. 0 54
      src/node/Wrapper.mjs
  2. 112 0
      src/node/apiUtils.mjs
  3. 7 15
      src/node/index.mjs

+ 0 - 54
src/node/Wrapper.mjs

@@ -1,54 +0,0 @@
-/**
- * Wrap operations in a
- *
- * @author d98762625 [d98762625@gmail.com]
- * @copyright Crown Copyright 2018
- * @license Apache-2.0
- */
-
-import Dish from "../core/Dish";
-import log from "loglevel";
-
-/**
- * Extract default arg value from operation argument
- * @param {Object} arg - an arg from an operation
- */
-function extractArg(arg) {
-    if (arg.type === "option" || arg.type === "editableOption") {
-        return arg.value[0];
-    }
-
-    return arg.value;
-}
-
-/**
- * Wrap an operation to be consumed by node API.
- * new Operation().run() becomes operation()
- * @param Operation 
- */
-export default function wrap(Operation) {
-    /**
-     * 
-     */
-    return async (input, args=null) => {
-        const operation = new Operation();
-        const dish = new Dish(input);
-
-        try {
-            dish.findType();
-        } catch (e) {
-            log.debug(e);
-        }
-
-        if (!args) {
-            args = operation.args.map(extractArg);
-        } else {
-            // Allows single arg ops to have arg defined not in array
-            if (!(args instanceof Array)) {
-                args = [args];
-            }
-        }
-        const transformedInput = await dish.get(Dish.typeEnum(operation.inputType));
-        return operation.run(transformedInput, args);
-    };
-}

+ 112 - 0
src/node/apiUtils.mjs

@@ -0,0 +1,112 @@
+/**
+ * Wrap operations for consumption in Node
+ *
+ * @author d98762625 [d98762625@gmail.com]
+ * @copyright Crown Copyright 2018
+ * @license Apache-2.0
+ */
+
+import Dish from "../core/Dish";
+import log from "loglevel";
+
+/**
+ * Extract default arg value from operation argument
+ * @param {Object} arg - an arg from an operation
+ */
+function extractArg(arg) {
+    if (arg.type === "option" || arg.type === "editableOption") {
+        return arg.value[0];
+    }
+
+    return arg.value;
+}
+
+/**
+ * Wrap an operation to be consumed by node API.
+ * new Operation().run() becomes operation()
+ * Perform type conversion on input
+ * @param {Operation} Operation
+ * @returns {Function} The operation's run function, wrapped in
+ * some type conversion logic
+ */
+export function wrap(Operation) {
+    /**
+     * Wrapped operation run function
+     */
+    return async (input, args=null) => {
+        const operation = new Operation();
+        const dish = new Dish(input);
+
+        try {
+            dish.findType();
+        } catch (e) {
+            log.debug(e);
+        }
+
+        if (!args) {
+            args = operation.args.map(extractArg);
+        } else {
+            // Allows single arg ops to have arg defined not in array
+            if (!(args instanceof Array)) {
+                args = [args];
+            }
+        }
+        const transformedInput = await dish.get(Dish.typeEnum(operation.inputType));
+        return operation.run(transformedInput, args);
+    };
+}
+
+/**
+ * 
+ * @param searchTerm 
+ */
+export function search(searchTerm) {
+
+}
+
+
+/**
+ * Extract properties from an operation by instantiating it and
+ * returning some of its properties for reference.
+ * @param {Operation}  Operation - the operation to extract info from
+ * @returns {Object} operation properties
+ */
+function extractOperationInfo(Operation) {
+    const operation = new Operation();
+    return {
+        name: operation.name,
+        module: operation.module,
+        description: operation.description,
+        inputType: operation.inputType,
+        outputType: operation.outputType,
+        args: Object.assign([], operation.args),
+    };
+}
+
+
+/**
+ * @param {Object} operations - an object filled with operations.
+ * @param {String} searchTerm - the name of the operation to get help for.
+ * Case and whitespace are ignored in search.
+ * @returns {Object} listing properties of function
+ */
+export function help(operations, searchTerm) {
+    if (typeof searchTerm === "string") {
+        const operation = operations[Object.keys(operations).find(o =>
+            o.toLowerCase() === searchTerm.replace(/ /g, "").toLowerCase())];
+        if (operation) {
+            return extractOperationInfo(operation);
+        }
+    }
+    return null;
+}
+
+
+/**
+ * SomeName => someName
+ * @param {String} name - string to be altered
+ * @returns {String} decapitalised
+ */
+export function decapitalise(name) {
+    return `${name.charAt(0).toLowerCase()}${name.substr(1)}`;
+}

+ 7 - 15
src/node/index.mjs

@@ -2,11 +2,14 @@
  * Node view for CyberChef.
  *
  * @author n1474335 [n1474335@gmail.com]
- * @copyright Crown Copyright 2017
+ * @copyright Crown Copyright 2018
  * @license Apache-2.0
  */
 import "babel-polyfill";
 
+import {wrap, help, decapitalise} from "./apiUtils";
+import * as operations from "../core/operations/index";
+
 // Define global environment functions
 global.ENVIRONMENT_IS_WORKER = function() {
     return typeof importScripts === "function";
@@ -19,24 +22,13 @@ global.ENVIRONMENT_IS_WEB = function() {
 };
 
 
-import wrap from "./Wrapper";
-
-import * as operations from "../core/operations/index";
-
-/**
- * 
- * @param name 
- */
-function decapitalise(name) {
-    return `${name.charAt(0).toLowerCase()}${name.substr(1)}`;
-}
-
-
-// console.log(operations);
 const chef = {};
+
+// Add in wrapped operations with camelCase names
 Object.keys(operations).forEach(op =>
     chef[decapitalise(op)] = wrap(operations[op]));
 
+chef.help = help.bind(null, operations);
 
 export default chef;
 export {chef};