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",
|
||||
"test": "grunt test",
|
||||
"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.
|
||||
|
|
|
@ -45,7 +45,6 @@ class ToBase32 extends Operation {
|
|||
chr1, chr2, chr3, chr4, chr5,
|
||||
enc1, enc2, enc3, enc4, enc5, enc6, enc7, enc8,
|
||||
i = 0;
|
||||
|
||||
while (i < input.length) {
|
||||
chr1 = input[i++];
|
||||
chr2 = input[i++];
|
||||
|
@ -76,7 +75,6 @@ class ToBase32 extends Operation {
|
|||
alphabet.charAt(enc4) + alphabet.charAt(enc5) + alphabet.charAt(enc6) +
|
||||
alphabet.charAt(enc7) + alphabet.charAt(enc8);
|
||||
}
|
||||
|
||||
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";
|
||||
};
|
||||
|
||||
import Chef from "../core/Chef";
|
||||
// import Chef from "../core/Chef";
|
||||
|
||||
const CyberChef = {
|
||||
// const CyberChef = {
|
||||
|
||||
bake: function(input, recipeConfig) {
|
||||
this.chef = new Chef();
|
||||
return this.chef.bake(
|
||||
input,
|
||||
recipeConfig,
|
||||
{},
|
||||
0,
|
||||
false
|
||||
);
|
||||
// bake: function(input, recipeConfig) {
|
||||
// this.chef = new Chef();
|
||||
// return this.chef.bake(
|
||||
// input,
|
||||
// recipeConfig,
|
||||
// {},
|
||||
// 0,
|
||||
// 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 {CyberChef};
|
||||
export default cyberChef;
|
||||
export {cyberChef};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue