mirror of
https://github.com/gchq/CyberChef.git
synced 2025-04-22 07:46:16 -04:00
Exporing options with API.
This commit is contained in:
parent
30aa4e05ef
commit
59877b5138
5 changed files with 149 additions and 17 deletions
|
@ -118,6 +118,7 @@
|
||||||
"build": "grunt prod",
|
"build": "grunt prod",
|
||||||
"test": "grunt test",
|
"test": "grunt test",
|
||||||
"docs": "grunt docs",
|
"docs": "grunt docs",
|
||||||
"lint": "grunt lint"
|
"lint": "grunt lint",
|
||||||
|
"build-node": "grunt node"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -240,6 +240,26 @@ class Dish {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
findType() {
|
||||||
|
if (!this.value) {
|
||||||
|
throw "Dish has no value";
|
||||||
|
}
|
||||||
|
|
||||||
|
const types = [Dish.BYTE_ARRAY, Dish.STRING, Dish.HTML, Dish.NUMBER, Dish.ARRAY_BUFFER, Dish.BIG_NUMBER, Dish.LIST_FILE];
|
||||||
|
|
||||||
|
types.find((type) => {
|
||||||
|
this.type = type;
|
||||||
|
if (this.valid()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return this.type;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines how much space the Dish takes up.
|
* Determines how much space the Dish takes up.
|
||||||
|
|
|
@ -45,7 +45,6 @@ class ToBase32 extends Operation {
|
||||||
chr1, chr2, chr3, chr4, chr5,
|
chr1, chr2, chr3, chr4, chr5,
|
||||||
enc1, enc2, enc3, enc4, enc5, enc6, enc7, enc8,
|
enc1, enc2, enc3, enc4, enc5, enc6, enc7, enc8,
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
while (i < input.length) {
|
while (i < input.length) {
|
||||||
chr1 = input[i++];
|
chr1 = input[i++];
|
||||||
chr2 = input[i++];
|
chr2 = input[i++];
|
||||||
|
@ -76,7 +75,6 @@ class ToBase32 extends Operation {
|
||||||
alphabet.charAt(enc4) + alphabet.charAt(enc5) + alphabet.charAt(enc6) +
|
alphabet.charAt(enc4) + alphabet.charAt(enc5) + alphabet.charAt(enc6) +
|
||||||
alphabet.charAt(enc7) + alphabet.charAt(enc8);
|
alphabet.charAt(enc7) + alphabet.charAt(enc8);
|
||||||
}
|
}
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
99
src/node/Wrapper.mjs
Normal file
99
src/node/Wrapper.mjs
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
/**
|
||||||
|
* 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";
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
export default class Wrapper {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param arg
|
||||||
|
*/
|
||||||
|
extractArg(arg) {
|
||||||
|
if (arg.type === "option" || arg.type === "editableOption") {
|
||||||
|
return arg.value[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return arg.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
wrap(operation) {
|
||||||
|
this.operation = new operation();
|
||||||
|
// This for just exposing run function:
|
||||||
|
// return this.run.bind(this);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param input
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
const _run = async(input, args=null) => {
|
||||||
|
const dish = new Dish(input);
|
||||||
|
|
||||||
|
try {
|
||||||
|
dish.findType();
|
||||||
|
} catch (e) {
|
||||||
|
log.debug(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!args) {
|
||||||
|
args = this.operation.args.map(this.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(this.operation.inputType));
|
||||||
|
return this.operation.innerRun(transformedInput, args);
|
||||||
|
};
|
||||||
|
|
||||||
|
// There's got to be a nicer way to do this!
|
||||||
|
this.operation.innerRun = this.operation.run;
|
||||||
|
this.operation.run = _run;
|
||||||
|
|
||||||
|
return this.operation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param input
|
||||||
|
*/
|
||||||
|
async run(input, args = null) {
|
||||||
|
const dish = new Dish(input);
|
||||||
|
|
||||||
|
try {
|
||||||
|
dish.findType();
|
||||||
|
} catch (e) {
|
||||||
|
log.debug(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!args) {
|
||||||
|
args = this.operation.args.map(this.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(this.operation.inputType));
|
||||||
|
return this.operation.run(transformedInput, args);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,22 +18,36 @@ global.ENVIRONMENT_IS_WEB = function() {
|
||||||
return typeof window === "object";
|
return typeof window === "object";
|
||||||
};
|
};
|
||||||
|
|
||||||
import Chef from "../core/Chef";
|
// import Chef from "../core/Chef";
|
||||||
|
|
||||||
const CyberChef = {
|
// const CyberChef = {
|
||||||
|
|
||||||
bake: function(input, recipeConfig) {
|
// bake: function(input, recipeConfig) {
|
||||||
this.chef = new Chef();
|
// this.chef = new Chef();
|
||||||
return this.chef.bake(
|
// return this.chef.bake(
|
||||||
input,
|
// input,
|
||||||
recipeConfig,
|
// recipeConfig,
|
||||||
{},
|
// {},
|
||||||
0,
|
// 0,
|
||||||
false
|
// false
|
||||||
);
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
|
// };
|
||||||
|
|
||||||
|
// export default CyberChef;
|
||||||
|
// export {CyberChef};
|
||||||
|
|
||||||
|
import Wrapper from "./Wrapper";
|
||||||
|
|
||||||
|
import * as operations from "../core/operations/index";
|
||||||
|
|
||||||
|
const cyberChef = {
|
||||||
|
base32: {
|
||||||
|
from: new Wrapper().wrap(operations.FromBase32),
|
||||||
|
to: new Wrapper().wrap(operations.ToBase32),
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default CyberChef;
|
export default cyberChef;
|
||||||
export {CyberChef};
|
export {cyberChef};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue