aboutsummaryrefslogtreecommitdiff
path: root/_www
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2023-11-11 02:20:42 +0700
committerShulhan <ms@kilabit.info>2023-11-11 02:20:42 +0700
commitbddf2a866c38792fa8be5c657e23728c0f5b38e6 (patch)
tree3694b63a092b60a416bb76c02912ffb48352e2f7 /_www
parent5f1c70acef379310409eb28f94f2aefd0e5390bf (diff)
downloadgorankusu-bddf2a866c38792fa8be5c657e23728c0f5b38e6.tar.xz
_www: update wui module
While at it reformat all files using default prettier.
Diffstat (limited to '_www')
-rw-r--r--_www/environment.js1
-rw-r--r--_www/environment.ts232
-rw-r--r--_www/functions.js71
-rw-r--r--_www/functions.ts412
-rw-r--r--_www/http_target.js124
-rw-r--r--_www/http_target.ts742
-rw-r--r--_www/index.js18
-rw-r--r--_www/index.ts8
-rw-r--r--_www/interface.js1
-rw-r--r--_www/interface.ts188
-rw-r--r--_www/nav_links.ts133
-rw-r--r--_www/target.js22
-rw-r--r--_www/target.ts401
-rw-r--r--_www/trunks.js404
-rw-r--r--_www/trunks.ts791
-rw-r--r--_www/tsconfig.json33
-rw-r--r--_www/vars.js1
-rw-r--r--_www/vars.ts4
-rw-r--r--_www/ws_target.js36
-rw-r--r--_www/ws_target.ts260
m---------_www/wui0
21 files changed, 1875 insertions, 2007 deletions
diff --git a/_www/environment.js b/_www/environment.js
index ccd9216..6d26afb 100644
--- a/_www/environment.js
+++ b/_www/environment.js
@@ -102,4 +102,3 @@ export class Environment {
this.com_results_suffix.Set(opts.ResultsSuffix);
}
}
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0REFBNEQ7QUFDNUQsNENBQTRDO0FBRTVDLE9BQU8sRUFBRSxjQUFjLEVBQXNCLE1BQU0sdUJBQXVCLENBQUE7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQTtBQUUxRSxPQUFPLEVBQ04sV0FBVyxFQUNYLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEdBR2hCLE1BQU0sZ0JBQWdCLENBQUE7QUFFdkIsTUFBTSxPQUFPLFdBQVc7SUFVdkIsWUFDUSxNQUF1QixFQUN2QixJQUEwQjtRQUQxQixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUN2QixTQUFJLEdBQUosSUFBSSxDQUFzQjtRQVhsQyxXQUFNLEdBQWdCLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbEQsZUFBVSxHQUFnQixRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBWXRELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQTtRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7WUFDMUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDckQsQ0FBQyxDQUFBO1FBRUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO0lBQ3ZCLENBQUM7SUFFTyxlQUFlO1FBQ3RCLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDM0MsUUFBUSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUE7UUFFbEMsSUFBSSxtQkFB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 \ No newline at end of file
diff --git a/_www/environment.ts b/_www/environment.ts
index 6cc643d..d68eb09 100644
--- a/_www/environment.ts
+++ b/_www/environment.ts
@@ -1,140 +1,132 @@
// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
// SPDX-License-Identifier: GPL-3.0-or-later
-import { WuiInputString, WuiInputStringOpts } from "./wui/input/string.js"
-import { WuiInputNumber, WuiInputNumberOpts } from "./wui/input/number.js"
+import { WuiInputString, WuiInputStringOpts } from "./wui/input/string.js";
+import { WuiInputNumber, WuiInputNumberOpts } from "./wui/input/number.js";
import {
- CLASS_INPUT,
- CLASS_INPUT_LABEL,
- CLASS_NAV_TARGET,
- HASH_ENVIRONMENT,
- EnvironmentInterface,
- TrunksInterface,
-} from "./interface.js"
+ CLASS_INPUT,
+ CLASS_INPUT_LABEL,
+ CLASS_NAV_TARGET,
+ HASH_ENVIRONMENT,
+ EnvironmentInterface,
+ TrunksInterface,
+} from "./interface.js";
export class Environment {
- el_nav: HTMLElement = document.createElement("h3")
- el_content: HTMLElement = document.createElement("div")
+ el_nav: HTMLElement = document.createElement("h3");
+ el_content: HTMLElement = document.createElement("div");
- com_listen_address!: WuiInputString
- com_max_attack_dur!: WuiInputNumber
- com_max_attack_rate!: WuiInputNumber
- com_results_dir!: WuiInputString
- com_results_suffix!: WuiInputString
+ com_listen_address!: WuiInputString;
+ com_max_attack_dur!: WuiInputNumber;
+ com_max_attack_rate!: WuiInputNumber;
+ com_results_dir!: WuiInputString;
+ com_results_suffix!: WuiInputString;
- constructor(
- public trunks: TrunksInterface,
- public opts: EnvironmentInterface,
- ) {
- this.el_nav.classList.add(CLASS_NAV_TARGET)
- this.el_nav.innerText = "Environment"
- this.el_nav.onclick = () => {
- trunks.SetContent(HASH_ENVIRONMENT, this.el_content)
- }
+ constructor(
+ public trunks: TrunksInterface,
+ public opts: EnvironmentInterface,
+ ) {
+ this.el_nav.classList.add(CLASS_NAV_TARGET);
+ this.el_nav.innerText = "Environment";
+ this.el_nav.onclick = () => {
+ trunks.SetContent(HASH_ENVIRONMENT, this.el_content);
+ };
- this.generateContent()
- }
+ this.generateContent();
+ }
- private generateContent() {
- let el_title = document.createElement("h2")
- el_title.innerText = "Environment"
+ private generateContent() {
+ let el_title = document.createElement("h2");
+ el_title.innerText = "Environment";
- let opts_listen_address: WuiInputStringOpts = {
- label: "Listen address",
- hint: "The address and port where Trunks is running.",
- value: this.opts.ListenAddress,
- is_disabled: true,
- class_input: CLASS_INPUT,
- class_label: CLASS_INPUT_LABEL,
- is_hint_toggled: true,
- onChangeHandler: (v: string) => {
- this.opts.ListenAddress = v
- },
- }
- this.com_listen_address = new WuiInputString(
- opts_listen_address,
- )
+ let opts_listen_address: WuiInputStringOpts = {
+ label: "Listen address",
+ hint: "The address and port where Trunks is running.",
+ value: this.opts.ListenAddress,
+ is_disabled: true,
+ class_input: CLASS_INPUT,
+ class_label: CLASS_INPUT_LABEL,
+ is_hint_toggled: true,
+ onChangeHandler: (v: string) => {
+ this.opts.ListenAddress = v;
+ },
+ };
+ this.com_listen_address = new WuiInputString(opts_listen_address);
- let opts_max_attack_dur: WuiInputNumberOpts = {
- label: "Max. attack duration (seconds)",
- hint: "Maximum attack duration for all targets, in seconds.",
- value: this.opts.MaxAttackDuration / 1e9,
- min: 1,
- is_disabled: true,
- class_input: CLASS_INPUT,
- class_label: CLASS_INPUT_LABEL,
- is_hint_toggled: true,
- onChangeHandler: (v: number) => {
- this.opts.MaxAttackDuration = v * 1e9
- },
- }
- this.com_max_attack_dur = new WuiInputNumber(
- opts_max_attack_dur,
- )
+ let opts_max_attack_dur: WuiInputNumberOpts = {
+ label: "Max. attack duration (seconds)",
+ hint: "Maximum attack duration for all targets, in seconds.",
+ value: this.opts.MaxAttackDuration / 1e9,
+ min: 1,
+ is_disabled: true,
+ class_input: CLASS_INPUT,
+ class_label: CLASS_INPUT_LABEL,
+ is_hint_toggled: true,
+ onChangeHandler: (v: number) => {
+ this.opts.MaxAttackDuration = v * 1e9;
+ },
+ };
+ this.com_max_attack_dur = new WuiInputNumber(opts_max_attack_dur);
- let opts_max_attack_rate: WuiInputNumberOpts = {
- label: "Max. attack rate",
- hint: "Maximum attack rate for all targets.",
- value: this.opts.MaxAttackRate,
- min: 1,
- is_disabled: true,
- class_input: CLASS_INPUT,
- class_label: CLASS_INPUT_LABEL,
- is_hint_toggled: true,
- onChangeHandler: (v: number) => {
- this.opts.MaxAttackRate = v
- },
- }
- this.com_max_attack_rate = new WuiInputNumber(
- opts_max_attack_rate,
- )
+ let opts_max_attack_rate: WuiInputNumberOpts = {
+ label: "Max. attack rate",
+ hint: "Maximum attack rate for all targets.",
+ value: this.opts.MaxAttackRate,
+ min: 1,
+ is_disabled: true,
+ class_input: CLASS_INPUT,
+ class_label: CLASS_INPUT_LABEL,
+ is_hint_toggled: true,
+ onChangeHandler: (v: number) => {
+ this.opts.MaxAttackRate = v;
+ },
+ };
+ this.com_max_attack_rate = new WuiInputNumber(opts_max_attack_rate);
- let opts_results_dir: WuiInputStringOpts = {
- label: "Results directory",
- hint: "The directory where the attack result will be saved.",
- value: this.opts.ResultsDir,
- is_disabled: true,
- class_input: CLASS_INPUT,
- class_label: CLASS_INPUT_LABEL,
- is_hint_toggled: true,
- onChangeHandler: (v: string) => {
- this.opts.ResultsDir = v
- },
- }
- this.com_results_dir = new WuiInputString(opts_results_dir)
+ let opts_results_dir: WuiInputStringOpts = {
+ label: "Results directory",
+ hint: "The directory where the attack result will be saved.",
+ value: this.opts.ResultsDir,
+ is_disabled: true,
+ class_input: CLASS_INPUT,
+ class_label: CLASS_INPUT_LABEL,
+ is_hint_toggled: true,
+ onChangeHandler: (v: string) => {
+ this.opts.ResultsDir = v;
+ },
+ };
+ this.com_results_dir = new WuiInputString(opts_results_dir);
- let opts_results_suffix: WuiInputStringOpts = {
- label: "Results suffix",
- hint: "Optional suffix for the file name of attack result.",
- value: this.opts.ResultsSuffix,
- is_disabled: true,
- class_input: CLASS_INPUT,
- class_label: CLASS_INPUT_LABEL,
- is_hint_toggled: true,
- onChangeHandler: (v: string) => {
- this.opts.ResultsSuffix = v
- },
- }
- this.com_results_suffix = new WuiInputString(
- opts_results_suffix,
- )
+ let opts_results_suffix: WuiInputStringOpts = {
+ label: "Results suffix",
+ hint: "Optional suffix for the file name of attack result.",
+ value: this.opts.ResultsSuffix,
+ is_disabled: true,
+ class_input: CLASS_INPUT,
+ class_label: CLASS_INPUT_LABEL,
+ is_hint_toggled: true,
+ onChangeHandler: (v: string) => {
+ this.opts.ResultsSuffix = v;
+ },
+ };
+ this.com_results_suffix = new WuiInputString(opts_results_suffix);
- this.el_content.appendChild(el_title)
- this.el_content.appendChild(this.com_listen_address.el)
- this.el_content.appendChild(this.com_max_attack_dur.el)
- this.el_content.appendChild(this.com_max_attack_rate.el)
- this.el_content.appendChild(this.com_results_dir.el)
- this.el_content.appendChild(this.com_results_suffix.el)
- }
+ this.el_content.appendChild(el_title);
+ this.el_content.appendChild(this.com_listen_address.el);
+ this.el_content.appendChild(this.com_max_attack_dur.el);
+ this.el_content.appendChild(this.com_max_attack_rate.el);
+ this.el_content.appendChild(this.com_results_dir.el);
+ this.el_content.appendChild(this.com_results_suffix.el);
+ }
- Set(opts: EnvironmentInterface) {
- this.opts = opts
+ Set(opts: EnvironmentInterface) {
+ this.opts = opts;
- this.com_listen_address.Set(opts.ListenAddress)
- this.com_max_attack_dur.Set(opts.MaxAttackDuration / 1e9)
- this.com_max_attack_rate.Set(opts.MaxAttackRate)
- this.com_results_dir.Set(opts.ResultsDir)
- this.com_results_suffix.Set(opts.ResultsSuffix)
- }
+ this.com_listen_address.Set(opts.ListenAddress);
+ this.com_max_attack_dur.Set(opts.MaxAttackDuration / 1e9);
+ this.com_max_attack_rate.Set(opts.MaxAttackRate);
+ this.com_results_dir.Set(opts.ResultsDir);
+ this.com_results_suffix.Set(opts.ResultsSuffix);
+ }
}
diff --git a/_www/functions.js b/_www/functions.js
index baded27..d151cf6 100644
--- a/_www/functions.js
+++ b/_www/functions.js
@@ -76,8 +76,15 @@ export function HttpMethodToString(m) {
//
export function LoadHttpTargetHeader(target, httpTarget, key) {
let storageKey = `${target.ID}.http.${httpTarget.ID}.header.${key}`;
- return (window.localStorage.getItem(storageKey) ||
- httpTarget.Headers[key].value);
+ const val = window.localStorage.getItem(storageKey);
+ if (val) {
+ return val;
+ }
+ const header = httpTarget.Headers[key];
+ if (header) {
+ return header.value;
+ }
+ return "";
}
function saveHttpTargetHeader(target, httpTarget, key, value) {
let storageKey = `${target.ID}.http.${httpTarget.ID}.header.${key}`;
@@ -89,8 +96,15 @@ function saveHttpTargetHeader(target, httpTarget, key, value) {
//
export function LoadHttpTargetParam(target, httpTarget, key) {
let storageKey = `${target.ID}.http.${httpTarget.ID}.param.${key}`;
- return (window.localStorage.getItem(storageKey) ||
- httpTarget.Params[key].value);
+ const val = window.localStorage.getItem(storageKey);
+ if (val) {
+ return val;
+ }
+ const param = httpTarget.Params[key];
+ if (param) {
+ return param.value;
+ }
+ return "";
}
function saveHttpTargetParam(target, httpTarget, key, value) {
let storageKey = `${target.ID}.http.${httpTarget.ID}.param.${key}`;
@@ -138,8 +152,15 @@ function saveTargetOptTimeout(target) {
//
export function LoadTargetVar(target, key) {
let storageKey = `${target.ID}.var.${key}`;
- return (window.localStorage.getItem(storageKey) ||
- target.Vars[key].value);
+ const val = window.localStorage.getItem(storageKey);
+ if (val) {
+ return val;
+ }
+ const tvar = target.Vars[key];
+ if (tvar) {
+ return tvar.value;
+ }
+ return "";
}
function saveTargetVar(target, key, value) {
let storageKey = `${target.ID}.var.${key}`;
@@ -150,8 +171,15 @@ function saveTargetVar(target, key, value) {
//
export function LoadWsTargetHeader(target, wsTarget, key) {
let storageKey = `${target.ID}.ws.${wsTarget.ID}.header.${key}`;
- return (window.localStorage.getItem(storageKey) ||
- wsTarget.Headers[key].value);
+ const val = window.localStorage.getItem(storageKey);
+ if (val) {
+ return val;
+ }
+ const header = wsTarget.Headers[key];
+ if (header) {
+ return header.value;
+ }
+ return "";
}
function saveWsTargetHeader(target, wsTarget, key, value) {
let storageKey = `${target.ID}.ws.${wsTarget.ID}.header.${key}`;
@@ -163,8 +191,15 @@ function saveWsTargetHeader(target, wsTarget, key, value) {
//
export function LoadWsTargetParam(target, wsTarget, key) {
let storageKey = `${target.ID}.ws.${wsTarget.ID}.param.${key}`;
- return (window.localStorage.getItem(storageKey) ||
- wsTarget.Params[key].value);
+ let val = window.localStorage.getItem(storageKey);
+ if (val) {
+ return val;
+ }
+ const param = wsTarget.Params[key];
+ if (param) {
+ return param.value;
+ }
+ return "";
}
function saveWsTargetParam(target, wsTarget, key, value) {
let storageKey = `${target.ID}.ws.${wsTarget.ID}.param.${key}`;
@@ -178,29 +213,23 @@ export function Save(target, httpTarget, wsTarget) {
saveTargetOptDuration(target);
saveTargetOptRatePerSecond(target);
saveTargetOptTimeout(target);
- for (const k in target.Vars) {
- let fi = target.Vars[k];
+ for (const [k, fi] of Object.entries(target.Vars)) {
saveTargetVar(target, k, fi.value);
}
if (httpTarget) {
- for (const k in httpTarget.Headers) {
- let fi = httpTarget.Headers[k];
+ for (const [k, fi] of Object.entries(httpTarget.Headers)) {
saveHttpTargetHeader(target, httpTarget, k, fi.value);
}
- for (const k in httpTarget.Params) {
- let fi = httpTarget.Params[k];
+ for (const [k, fi] of Object.entries(httpTarget.Params)) {
saveHttpTargetParam(target, httpTarget, k, fi.value);
}
}
if (wsTarget) {
- for (const k in wsTarget.Headers) {
- let fi = wsTarget.Headers[k];
+ for (const [k, fi] of Object.entries(wsTarget.Headers)) {
saveWsTargetHeader(target, wsTarget, k, fi.value);
}
- for (const k in wsTarget.Params) {
- let fi = wsTarget.Params[k];
+ for (const [k, fi] of Object.entries(wsTarget.Params)) {
saveWsTargetParam(target, wsTarget, k, fi.value);
}
}
}
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDREQUE0RDtBQUM1RCw0Q0FBNEM7QUFFNUMsT0FBTyxFQUFFLGNBQWMsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQTtBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFzQixNQUFNLHVCQUF1QixDQUFBO0FBRTFFLE9BQU8sRUFDTixXQUFXLEVBQ1gsaUJBQWlCLEVBRWpCLG1CQUFtQixHQUtuQixNQUFNLGdCQUFnQixDQUFBO0FBRXZCLE1BQU0sVUFBVSxpQkFBaUI7SUFDaEMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFBO0lBQ2hCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FDZCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLEVBQzdELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsRUFDN0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUM3RCxDQUFBO0FBQ0YsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxNQUFtQixFQUFFLEVBQWE7SUFDbkUsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFO1FBQ2hCLEtBQUssbUJBQW1CO1lBQ3ZCLElBQUkscUJBQXFCLEdBQXVCO2dCQUMvQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUs7Z0JBQ2YsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJO2dCQUNiLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLO2dCQUNoQixXQUFXLEVBQUUsV0FBVztnQkFDeEIsV0FBVyxFQUFFLGlCQUFp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 \ No newline at end of file
diff --git a/_www/functions.ts b/_www/functions.ts
index 60d3af2..8810640 100644
--- a/_www/functions.ts
+++ b/_www/functions.ts
@@ -1,97 +1,92 @@
// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
// SPDX-License-Identifier: GPL-3.0-or-later
-import { WuiInputNumber, WuiInputNumberOpts } from "./wui/input/number.js"
-import { WuiInputString, WuiInputStringOpts } from "./wui/input/string.js"
+import { WuiInputNumber, WuiInputNumberOpts } from "./wui/input/number.js";
+import { WuiInputString, WuiInputStringOpts } from "./wui/input/string.js";
import {
- CLASS_INPUT,
- CLASS_INPUT_LABEL,
- FormInput,
- FormInputKindNumber,
- FormInputKindString,
- HttpTargetInterface,
- TargetInterface,
- WebSocketTargetInterface,
-} from "./interface.js"
+ CLASS_INPUT,
+ CLASS_INPUT_LABEL,
+ FormInput,
+ FormInputKindNumber,
+ HttpTargetInterface,
+ TargetInterface,
+ WebSocketTargetInterface,
+} from "./interface.js";
export function GetDocumentHeight() {
- var D = document
- return Math.max(
- Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
- Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
- Math.max(D.body.clientHeight, D.documentElement.clientHeight),
- )
+ var D = document;
+ return Math.max(
+ Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
+ Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
+ Math.max(D.body.clientHeight, D.documentElement.clientHeight),
+ );
}
export function GenerateFormInput(parent: HTMLElement, fi: FormInput) {
- switch (fi.kind) {
- case FormInputKindNumber:
- let wui_input_number_opts: WuiInputNumberOpts = {
- label: fi.label,
- hint: fi.hint,
- value: +fi.value,
- class_input: CLASS_INPUT,
- class_label: CLASS_INPUT_LABEL,
- is_hint_toggled: true,
- onChangeHandler: (new_value: number) => {
- fi.value = "" + new_value
- },
- }
- if (fi.max) {
- wui_input_number_opts.max = fi.max
- }
- if (fi.min) {
- wui_input_number_opts.min = fi.min
- }
- let wui_input_number = new WuiInputNumber(
- wui_input_number_opts,
- )
- parent.appendChild(wui_input_number.el)
- break
+ switch (fi.kind) {
+ case FormInputKindNumber:
+ let wui_input_number_opts: WuiInputNumberOpts = {
+ label: fi.label,
+ hint: fi.hint,
+ value: +fi.value,
+ class_input: CLASS_INPUT,
+ class_label: CLASS_INPUT_LABEL,
+ is_hint_toggled: true,
+ onChangeHandler: (new_value: number) => {
+ fi.value = "" + new_value;
+ },
+ };
+ if (fi.max) {
+ wui_input_number_opts.max = fi.max;
+ }
+ if (fi.min) {
+ wui_input_number_opts.min = fi.min;
+ }
+ let wui_input_number = new WuiInputNumber(wui_input_number_opts);
+ parent.appendChild(wui_input_number.el);
+ break;
- default:
- let wui_input_string_opts: WuiInputStringOpts = {
- label: fi.label,
- hint: fi.hint,
- value: fi.value,
- class_input: CLASS_INPUT,
- class_label: CLASS_INPUT_LABEL,
- is_hint_toggled: true,
- onChangeHandler: (new_value: string) => {
- fi.value = new_value
- },
- }
- let wui_input_string = new WuiInputString(
- wui_input_string_opts,
- )
- parent.appendChild(wui_input_string.el)
- break
- }
+ default:
+ let wui_input_string_opts: WuiInputStringOpts = {
+ label: fi.label,
+ hint: fi.hint,
+ value: fi.value,
+ class_input: CLASS_INPUT,
+ class_label: CLASS_INPUT_LABEL,
+ is_hint_toggled: true,
+ onChangeHandler: (new_value: string) => {
+ fi.value = new_value;
+ },
+ };
+ let wui_input_string = new WuiInputString(wui_input_string_opts);
+ parent.appendChild(wui_input_string.el);
+ break;
+ }
}
export function HttpMethodToString(m: number): string {
- switch (m) {
- case 0:
- return "GET"
- case 1:
- return "CONNECT"
- case 2:
- return "DELETE"
- case 3:
- return "HEAD"
- case 4:
- return "OPTIONS"
- case 5:
- return "PATCH"
- case 6:
- return "POST"
- case 7:
- return "PUT"
- case 8:
- return "TRACE"
- }
- return "???"
+ switch (m) {
+ case 0:
+ return "GET";
+ case 1:
+ return "CONNECT";
+ case 2:
+ return "DELETE";
+ case 3:
+ return "HEAD";
+ case 4:
+ return "OPTIONS";
+ case 5:
+ return "PATCH";
+ case 6:
+ return "POST";
+ case 7:
+ return "PUT";
+ case 8:
+ return "TRACE";
+ }
+ return "???";
}
//
@@ -99,25 +94,30 @@ export function HttpMethodToString(m: number): string {
// If no header exist in storage return the one from HttpTarget itself.
//
export function LoadHttpTargetHeader(
- target: TargetInterface,
- httpTarget: HttpTargetInterface,
- key: string,
+ target: TargetInterface,
+ httpTarget: HttpTargetInterface,
+ key: string,
): string {
- let storageKey = `${target.ID}.http.${httpTarget.ID}.header.${key}`
- return (
- window.localStorage.getItem(storageKey) ||
- httpTarget.Headers[key].value
- )
+ let storageKey = `${target.ID}.http.${httpTarget.ID}.header.${key}`;
+ const val = window.localStorage.getItem(storageKey);
+ if (val) {
+ return val;
+ }
+ const header = httpTarget.Headers[key];
+ if (header) {
+ return header.value;
+ }
+ return "";
}
function saveHttpTargetHeader(
- target: TargetInterface,
- httpTarget: HttpTargetInterface,
- key: string,
- value: string,
+ target: TargetInterface,
+ httpTarget: HttpTargetInterface,
+ key: string,
+ value: string,
) {
- let storageKey = `${target.ID}.http.${httpTarget.ID}.header.${key}`
- window.localStorage.setItem(storageKey, value)
+ let storageKey = `${target.ID}.http.${httpTarget.ID}.header.${key}`;
+ window.localStorage.setItem(storageKey, value);
}
//
@@ -125,70 +125,72 @@ function saveHttpTargetHeader(
// If no parameter exist in storage return the one from HttpTarget itself.
//
export function LoadHttpTargetParam(
- target: TargetInterface,
- httpTarget: HttpTargetInterface,
- key: string,
+ target: TargetInterface,
+ httpTarget: HttpTargetInterface,
+ key: string,
): string {
- let storageKey = `${target.ID}.http.${httpTarget.ID}.param.${key}`
- return (
- window.localStorage.getItem(storageKey) ||
- httpTarget.Params[key].value
- )
+ let storageKey = `${target.ID}.http.${httpTarget.ID}.param.${key}`;
+ const val = window.localStorage.getItem(storageKey);
+ if (val) {
+ return val;
+ }
+ const param = httpTarget.Params[key];
+ if (param) {
+ return param.value;
+ }
+ return "";
}
function saveHttpTargetParam(
- target: TargetInterface,
- httpTarget: HttpTargetInterface,
- key: string,
- value: string,
+ target: TargetInterface,
+ httpTarget: HttpTargetInterface,
+ key: string,
+ value: string,
) {
- let storageKey = `${target.ID}.http.${httpTarget.ID}.param.${key}`
- window.localStorage.setItem(storageKey, value)
+ let storageKey = `${target.ID}.http.${httpTarget.ID}.param.${key}`;
+ window.localStorage.setItem(storageKey, value);
}
export function LoadTargetOptDuration(target: TargetInterface): number {
- let storageKey = `${target.ID}.opt.Duration`
- let val = window.localStorage.getItem(storageKey)
- if (val) {
- return +val / 1e9
- }
- return target.Opts.Duration / 1e9
+ let storageKey = `${target.ID}.opt.Duration`;
+ let val = window.localStorage.getItem(storageKey);
+ if (val) {
+ return +val / 1e9;
+ }
+ return target.Opts.Duration / 1e9;
}
function saveTargetOptDuration(target: TargetInterface) {
- let storageKey = `${target.ID}.opt.Duration`
- window.localStorage.setItem(storageKey, "" + target.Opts.Duration)
+ let storageKey = `${target.ID}.opt.Duration`;
+ window.localStorage.setItem(storageKey, "" + target.Opts.Duration);
}
export function LoadTargetOptRatePerSecond(target: TargetInterface): number {
- let storageKey = `${target.ID}.opt.RatePerSecond`
- let val = window.localStorage.getItem(storageKey)
- if (val) {
- return +val
- }
- return target.Opts.RatePerSecond
+ let storageKey = `${target.ID}.opt.RatePerSecond`;
+ let val = window.localStorage.getItem(storageKey);
+ if (val) {
+ return +val;
+ }
+ return target.Opts.RatePerSecond;
}
function saveTargetOptRatePerSecond(target: TargetInterface) {
- let storageKey = `${target.ID}.opt.RatePerSecond`
- window.localStorage.setItem(
- storageKey,
- "" + target.Opts.RatePerSecond,
- )
+ let storageKey = `${target.ID}.opt.RatePerSecond`;
+ window.localStorage.setItem(storageKey, "" + target.Opts.RatePerSecond);
}
export function LoadTargetOptTimeout(target: TargetInterface): number {
- let storageKey = `${target.ID}.opt.Timeout`
- let val = window.localStorage.getItem(storageKey)
- if (val) {
- return +val / 1e9
- }
- return target.Opts.Timeout / 1e9
+ let storageKey = `${target.ID}.opt.Timeout`;
+ let val = window.localStorage.getItem(storageKey);
+ if (val) {
+ return +val / 1e9;
+ }
+ return target.Opts.Timeout / 1e9;
}
function saveTargetOptTimeout(target: TargetInterface) {
- let storageKey = `${target.ID}.opt.Timeout`
- window.localStorage.setItem(storageKey, "" + target.Opts.Timeout)
+ let storageKey = `${target.ID}.opt.Timeout`;
+ window.localStorage.setItem(storageKey, "" + target.Opts.Timeout);
}
//
@@ -196,41 +198,51 @@ function saveTargetOptTimeout(target: TargetInterface) {
// value.
//
export function LoadTargetVar(target: TargetInterface, key: string): string {
- let storageKey = `${target.ID}.var.${key}`
- return (
- window.localStorage.getItem(storageKey) ||
- target.Vars[key].value
- )
+ let storageKey = `${target.ID}.var.${key}`;
+ const val = window.localStorage.getItem(storageKey);
+ if (val) {
+ return val;
+ }
+ const tvar = target.Vars[key];
+ if (tvar) {
+ return tvar.value;
+ }
+ return "";
}
function saveTargetVar(target: TargetInterface, key: string, value: string) {
- let storageKey = `${target.ID}.var.${key}`
- window.localStorage.setItem(storageKey, value)
+ let storageKey = `${target.ID}.var.${key}`;
+ window.localStorage.setItem(storageKey, value);
}
//
// LoadWsTargetHeader get the WebSocketTarget from local storage by key.
//
export function LoadWsTargetHeader(
- target: TargetInterface,
- wsTarget: WebSocketTargetInterface,
- key: string,
+ target: TargetInterface,
+ wsTarget: WebSocketTargetInterface,
+ key: string,
): string {
- let storageKey = `${target.ID}.ws.${wsTarget.ID}.header.${key}`
- return (
- window.localStorage.getItem(storageKey) ||
- wsTarget.Headers[key].value
- )
+ let storageKey = `${target.ID}.ws.${wsTarget.ID}.header.${key}`;
+ const val = window.localStorage.getItem(storageKey);
+ if (val) {
+ return val;
+ }
+ const header = wsTarget.Headers[key];
+ if (header) {
+ return header.value;
+ }
+ return "";
}
function saveWsTargetHeader(
- target: TargetInterface,
- wsTarget: WebSocketTargetInterface,
- key: string,
- value: string,
+ target: TargetInterface,
+ wsTarget: WebSocketTargetInterface,
+ key: string,
+ value: string,
) {
- let storageKey = `${target.ID}.ws.${wsTarget.ID}.header.${key}`
- window.localStorage.setItem(storageKey, value)
+ let storageKey = `${target.ID}.ws.${wsTarget.ID}.header.${key}`;
+ window.localStorage.setItem(storageKey, value);
}
//
@@ -238,25 +250,30 @@ function saveWsTargetHeader(
// return the one from wsTarget if its not exist.
//
export function LoadWsTargetParam(
- target: TargetInterface,
- wsTarget: WebSocketTargetInterface,
- key: string,
+ target: TargetInterface,
+ wsTarget: WebSocketTargetInterface,
+ key: string,
): string {
- let storageKey = `${target.ID}.ws.${wsTarget.ID}.param.${key}`
- return (
- window.localStorage.getItem(storageKey) ||
- wsTarget.Params[key].value
- )
+ let storageKey = `${target.ID}.ws.${wsTarget.ID}.param.${key}`;
+ let val = window.localStorage.getItem(storageKey);
+ if (val) {
+ return val;
+ }
+ const param = wsTarget.Params[key];
+ if (param) {
+ return param.value;
+ }
+ return "";
}
function saveWsTargetParam(
- target: TargetInterface,
- wsTarget: WebSocketTargetInterface,
- key: string,
- value: string,
+ target: TargetInterface,
+ wsTarget: WebSocketTargetInterface,
+ key: string,
+ value: string,
) {
- let storageKey = `${target.ID}.ws.${wsTarget.ID}.param.${key}`
- window.localStorage.setItem(storageKey, value)
+ let storageKey = `${target.ID}.ws.${wsTarget.ID}.param.${key}`;
+ window.localStorage.setItem(storageKey, value);
}
//
@@ -264,36 +281,31 @@ function saveWsTargetParam(
// WebSocket to local storage.
//
export function Save(
- target: TargetInterface,
- httpTarget: HttpTargetInterface | null,
- wsTarget: WebSocketTargetInterface | null,
+ target: TargetInterface,
+ httpTarget: HttpTargetInterface | null,
+ wsTarget: WebSocketTargetInterface | null,
) {
- saveTargetOptDuration(target)
- saveTargetOptRatePerSecond(target)
- saveTargetOptTimeout(target)
+ saveTargetOptDuration(target);
+ saveTargetOptRatePerSecond(target);
+ saveTargetOptTimeout(target);
- for (const k in target.Vars) {
- let fi = target.Vars[k]
- saveTargetVar(target, k, fi.value)
- }
- if (httpTarget) {
- for (const k in httpTarget.Headers) {
- let fi = httpTarget.Headers[k]
- saveHttpTargetHeader(target, httpTarget, k, fi.value)
- }
- for (const k in httpTarget.Params) {
- let fi = httpTarget.Params[k]
- saveHttpTargetParam(target, httpTarget, k, fi.value)
- }
- }
- if (wsTarget) {
- for (const k in wsTarget.Headers) {
- let fi = wsTarget.Headers[k]
- saveWsTargetHeader(target, wsTarget, k, fi.value)
- }
- for (const k in wsTarget.Params) {
- let fi = wsTarget.Params[k]
- saveWsTargetParam(target, wsTarget, k, fi.value)
- }
- }
+ for (const [k, fi] of Object.entries(target.Vars)) {
+ saveTargetVar(target, k, fi.value);
+ }
+ if (httpTarget) {
+ for (const [k, fi] of Object.entries(httpTarget.Headers)) {
+ saveHttpTargetHeader(target, httpTarget, k, fi.value);
+ }
+ for (const [k, fi] of Object.entries(httpTarget.Params)) {
+ saveHttpTargetParam(target, httpTarget, k, fi.value);
+ }
+ }
+ if (wsTarget) {
+ for (const [k, fi] of Object.entries(wsTarget.Headers)) {
+ saveWsTargetHeader(target, wsTarget, k, fi.value);
+ }
+ for (const [k, fi] of Object.entries(wsTarget.Params)) {
+ saveWsTargetParam(target, wsTarget, k, fi.value);
+ }
+ }
}
diff --git a/_www/http_target.js b/_www/http_target.js
index 1b66a93..7bcb08e 100644
--- a/_www/http_target.js
+++ b/_www/http_target.js
@@ -1,14 +1,5 @@
// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
// SPDX-License-Identifier: GPL-3.0-or-later
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
import { WuiInputSelect } from "./wui/input/select.js";
import { WuiInputString } from "./wui/input/string.js";
import { GenerateFormInput, LoadHttpTargetHeader, LoadHttpTargetParam, } from "./functions.js";
@@ -126,7 +117,7 @@ export class HttpTarget {
},
},
is_disabled: !this.opts.IsCustomizable,
- onChangeHandler: (key, value) => {
+ onChangeHandler: (_, value) => {
this.opts.Method = parseInt(value);
},
};
@@ -174,7 +165,7 @@ export class HttpTarget {
class_input: CLASS_INPUT,
class_label: CLASS_INPUT_LABEL,
is_disabled: !this.opts.IsCustomizable,
- onChangeHandler: (key, value) => {
+ onChangeHandler: (_, value) => {
this.opts.RequestType = parseInt(value);
},
};
@@ -193,8 +184,7 @@ export class HttpTarget {
let legend = document.createElement("legend");
legend.innerText = "Headers";
wrapper.appendChild(legend);
- for (let key in this.opts.Headers) {
- let fi = this.opts.Headers[key];
+ for (const [key, fi] of Object.entries(this.opts.Headers)) {
fi.value = LoadHttpTargetHeader(this.target, this.opts, key);
GenerateFormInput(wrapper, fi);
}
@@ -212,8 +202,7 @@ export class HttpTarget {
let title = document.createElement("legend");
title.innerText = "Parameters";
wrapper.appendChild(title);
- for (let key in this.opts.Params) {
- let fi = this.opts.Params[key];
+ for (const [key, fi] of Object.entries(this.opts.Params)) {
fi.value = LoadHttpTargetParam(this.target, this.opts, key);
GenerateFormInput(wrapper, fi);
}
@@ -289,75 +278,62 @@ export class HttpTarget {
parent.appendChild(wrapper);
}
}
- onClickAttack() {
- return __awaiter(this, void 0, void 0, function* () {
- yield this.trunks.AttackHttp(this.target, this.opts);
- });
+ async onClickAttack() {
+ await this.trunks.AttackHttp(this.target, this.opts);
}
- onClickAttackDelete(result) {
- return __awaiter(this, void 0, void 0, function* () {
- let res = yield this.trunks.AttackHttpDelete(result.Name);
- if (!res) {
+ async onClickAttackDelete(result) {
+ let res = await this.trunks.AttackHttpDelete(result.Name);
+ if (!res) {
+ return;
+ }
+ this.opts.Results.forEach((r, x) => {
+ if (r.Name == result.Name) {
+ this.opts.Results.splice(x, 1);
+ this.generateAttackResults(this.el_out_attack_results);
return;
}
- for (let x = 0; x < this.opts.Results.length; x++) {
- let r = this.opts.Results[x];
- if (r.Name == result.Name) {
- this.opts.Results.splice(x, 1);
- this.generateAttackResults(this.el_out_attack_results);
- return;
- }
- }
});
}
- onClickAttackShow(result_name, btn, el_report_text, el_report_hist) {
- return __awaiter(this, void 0, void 0, function* () {
- if (btn.innerText === "Hide") {
- btn.innerText = "Show";
- el_report_text.style.display = "none";
- el_report_hist.style.display = "none";
- return;
- }
- let res_json = yield this.trunks.AttackHttpGet(result_name);
- if (res_json.code != 200) {
- return;
- }
- let res = res_json.data;
- el_report_text.innerText = atob(res.TextReport);
- el_report_text.style.display = "block";
- el_report_hist.innerText = atob(res.HistReport);
- el_report_hist.style.display = "block";
- btn.innerText = "Hide";
- });
+ async onClickAttackShow(result_name, btn, el_report_text, el_report_hist) {
+ if (btn.innerText === "Hide") {
+ btn.innerText = "Show";
+ el_report_text.style.display = "none";
+ el_report_hist.style.display = "none";
+ return;
+ }
+ let res_json = await this.trunks.AttackHttpGet(result_name);
+ if (res_json.code != 200) {
+ return;
+ }
+ let res = res_json.data;
+ el_report_text.innerText = atob(res.TextReport);
+ el_report_text.style.display = "block";
+ el_report_hist.innerText = atob(res.HistReport);
+ el_report_hist.style.display = "block";
+ btn.innerText = "Hide";
}
- onClickClearOutput() {
- return __awaiter(this, void 0, void 0, function* () {
- this.el_out_request.innerText = "Raw request";
- this.el_out_response.innerText = "Raw response";
- this.el_out_response_body.innerText =
- "JSON formatted response body";
- });
+ async onClickClearOutput() {
+ this.el_out_request.innerText = "Raw request";
+ this.el_out_response.innerText = "Raw response";
+ this.el_out_response_body.innerText = "JSON formatted response body";
}
- onClickRun() {
- return __awaiter(this, void 0, void 0, function* () {
- let res = yield this.trunks.RunHttp(this.target, this.opts);
- if (!res) {
- return;
- }
- this.el_out_request.innerText = atob(res.DumpRequest);
- this.el_out_response.innerText = atob(res.DumpResponse);
- let body = atob(res.ResponseBody);
- if (res.ResponseType === CONTENT_TYPE_JSON) {
- this.el_out_response_body.innerText = JSON.stringify(JSON.parse(body), null, 2);
- }
- else {
- this.el_out_response_body.innerText = body;
- }
- });
+ async onClickRun() {
+ let res = await this.trunks.RunHttp(this.target, this.opts);
+ if (!res) {
+ return;
+ }
+ this.el_out_request.innerText = atob(res.DumpRequest);
+ this.el_out_response.innerText = atob(res.DumpResponse);
+ let body = atob(res.ResponseBody);
+ if (res.ResponseType === CONTENT_TYPE_JSON) {
+ this.el_out_response_body.innerText = JSON.stringify(JSON.parse(body), null, 2);
+ }
+ else {
+ this.el_out_response_body.innerText = body;
+ }
}
AddAttackResult(result) {
this.opts.Results.push(result);
this.generateAttackResults(this.el_out_attack_results);
}
}
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cF90YXJnZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJodHRwX3RhcmdldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0REFBNEQ7QUFDNUQsNENBQTRDOzs7Ozs7Ozs7O0FBRzVDLE9BQU8sRUFBRSxjQUFjLEVBQXNCLE1BQU0sdUJBQXVCLENBQUE7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQTtBQUUxRSxPQUFPLEVBQ04saUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixtQkFBbUIsR0FDbkIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN2QixPQUFPLEVBQ04sV0FBVyxFQUNYLGlCQUFpQixHQVFqQixNQUFNLGdCQUFnQixDQUFBO0FBRXZCLE1BQU0saUJBQWlCLEdBQUcsYUFBYSxDQUFBO0FBQ3ZDLE1BQU0seUJBQXlCLEdBQUcscUJBQXFCLENBQUE7QUFDdkQsTUFBTSwrQkFBK0IsR0FBRywyQkFBMkIsQ0FBQTtBQUNuRSxNQUFNLHVDQUF1QyxHQUM1QyxtQ0FBbUMsQ0FBQTtBQUNwQyxNQUFNLHVCQUF1QixHQUFHLG1CQUFtQixDQUFBO0FBQ25ELE1BQU0sOEJBQThCLEdBQUcsMEJBQTBCLENBQUE7QUFDakUsTUFBTSw4QkFBOEIsR0FBRywwQkFBMEIsQ0FBQTtBQUNqRSxNQUFNLDRCQUE0QixHQUFHLHdCQUF3QixDQUFBO0FBQzdELE1BQU0sMEJBQTBCLEdBQUcsc0JBQXNCLENBQUE7QUFDekQsTUFBTSx5QkFBeUIsR0FBRyxxQkFBcUIsQ0FBQTtBQUV2RCxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUFBO0FBRTVDLE1BQU0sT0FBTyxVQUFVO0lBV3RCLFlBQ1EsTUFBdUIsRUFDdkIsTUFBdUIsRUFDdkIsSUFBeUI7UUFGekIsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFDdkIsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFDdkIsU0FBSSxHQUFKLElBQUksQ0FBcUI7UUFiakMsT0FBRSxHQUFnQixR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 \ No newline at end of file
diff --git a/_www/http_target.ts b/_www/http_target.ts
index 922eee9..a275908 100644
--- a/_www/http_target.ts
+++ b/_www/http_target.ts
@@ -1,456 +1,430 @@
// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
// SPDX-License-Identifier: GPL-3.0-or-later
-import { WuiInputNumber, WuiInputNumberOpts } from "./wui/input/number.js"
-import { WuiInputSelect, WuiInputSelectOpts } from "./wui/input/select.js"
-import { WuiInputString, WuiInputStringOpts } from "./wui/input/string.js"
+import { WuiInputSelect, WuiInputSelectOpts } from "./wui/input/select.js";
+import { WuiInputString, WuiInputStringOpts } from "./wui/input/string.js";
import {
- GenerateFormInput,
- LoadHttpTargetHeader,
- LoadHttpTargetParam,
-} from "./functions.js"
+ GenerateFormInput,
+ LoadHttpTargetHeader,
+ LoadHttpTargetParam,
+} from "./functions.js";
import {
- CLASS_INPUT,
- CLASS_INPUT_LABEL,
- AttackResult,
- FormInputKindNumber,
- FormInputKindString,
- HttpTargetInterface,
- KeyFormInput,
- TargetInterface,
- TrunksInterface,
-} from "./interface.js"
+ CLASS_INPUT,
+ CLASS_INPUT_LABEL,
+ AttackResult,
+ HttpTargetInterface,
+ TargetInterface,
+ TrunksInterface,
+} from "./interface.js";
-const CLASS_HTTP_TARGET = "http_target"
-const CLASS_HTTP_TARGET_ACTIONS = "http_target_actions"
-const CLASS_HTTP_TARGET_ATTACK_RESULT = "http_target_attack_result"
+const CLASS_HTTP_TARGET = "http_target";
+const CLASS_HTTP_TARGET_ACTIONS = "http_target_actions";
+const CLASS_HTTP_TARGET_ATTACK_RESULT = "http_target_attack_result";
const CLASS_HTTP_TARGET_ATTACK_RESULT_ACTIONS =
- "http_target_attack_result_actions"
-const CLASS_HTTP_TARGET_INPUT = "http_target_input"
-const CLASS_HTTP_TARGET_INPUT_HEADER = "http_target_input_header"
-const CLASS_HTTP_TARGET_INPUT_PARAMS = "http_target_input_params"
-const CLASS_HTTP_TARGET_OUT_ATTACK = "http_target_out_attack"
-const CLASS_HTTP_TARGET_OUT_MONO = "http_target_out_mono"
-const CLASS_HTTP_TARGET_OUT_RUN = "http_target_out_run"
+ "http_target_attack_result_actions";
+const CLASS_HTTP_TARGET_INPUT = "http_target_input";
+const CLASS_HTTP_TARGET_INPUT_HEADER = "http_target_input_header";
+const CLASS_HTTP_TARGET_INPUT_PARAMS = "http_target_input_params";
+const CLASS_HTTP_TARGET_OUT_ATTACK = "http_target_out_attack";
+const CLASS_HTTP_TARGET_OUT_MONO = "http_target_out_mono";
+const CLASS_HTTP_TARGET_OUT_RUN = "http_target_out_run";
-const CONTENT_TYPE_JSON = "application/json"
+const CONTENT_TYPE_JSON = "application/json";
export class HttpTarget {
- el: HTMLElement = document.createElement("div")
- el_button_run: HTMLButtonElement = document.createElement("button")
- el_button_attack: HTMLButtonElement = document.createElement("button")
- el_request_input: HTMLElement = document.createElement("div")
- el_out_request: HTMLElement = document.createElement("div")
- el_out_response: HTMLElement = document.createElement("div")
- el_out_response_body: HTMLElement = document.createElement("div")
- el_out_attack: HTMLElement = document.createElement("fieldset")
- el_out_attack_results: HTMLElement = document.createElement("div")
+ el: HTMLElement = document.createElement("div");
+ el_button_run: HTMLButtonElement = document.createElement("button");
+ el_button_attack: HTMLButtonElement = document.createElement("button");
+ el_request_input: HTMLElement = document.createElement("div");
+ el_out_request: HTMLElement = document.createElement("div");
+ el_out_response: HTMLElement = document.createElement("div");
+ el_out_response_body: HTMLElement = document.createElement("div");
+ el_out_attack: HTMLElement = document.createElement("fieldset");
+ el_out_attack_results: HTMLElement = document.createElement("div");
- constructor(
- public trunks: TrunksInterface,
- public target: TargetInterface,
- public opts: HttpTargetInterface,
- ) {
- this.el.id = opts.ID
- this.el.classList.add(CLASS_HTTP_TARGET)
+ constructor(
+ public trunks: TrunksInterface,
+ public target: TargetInterface,
+ public opts: HttpTargetInterface,
+ ) {
+ this.el.id = opts.ID;
+ this.el.classList.add(CLASS_HTTP_TARGET);
- let el_title = document.createElement("h3")
- el_title.innerText = opts.Name
- this.el.appendChild(el_title)
+ let el_title = document.createElement("h3");
+ el_title.innerText = opts.Name;
+ this.el.appendChild(el_title);
- this.generateActions(el_title)
- this.generateHint(this.el)
- this.generateInput(this.el)
- this.generateOutput(this.el)
- this.generateOutputAttack(this.el)
- }
+ this.generateActions(el_title);
+ this.generateHint(this.el);
+ this.generateInput(this.el);
+ this.generateOutput(this.el);
+ this.generateOutputAttack(this.el);
+ }
- private generateActions(parent: HTMLElement) {
- let el_actions = document.createElement("span")
- el_actions.classList.add(CLASS_HTTP_TARGET_ACTIONS)
+ private generateActions(parent: HTMLElement) {
+ let el_actions = document.createElement("span");
+ el_actions.classList.add(CLASS_HTTP_TARGET_ACTIONS);
- this.el_button_run.innerText = "Run"
- this.el_button_run.onclick = () => {
- this.onClickRun()
- }
- el_actions.appendChild(this.el_button_run)
+ this.el_button_run.innerText = "Run";
+ this.el_button_run.onclick = () => {
+ this.onClickRun();
+ };
+ el_actions.appendChild(this.el_button_run);
- if (this.opts.AllowAttack) {
- this.el_button_attack.innerText = "Attack"
- this.el_button_attack.onclick = () => {
- this.onClickAttack()
- }
- el_actions.appendChild(this.el_button_attack)
- }
+ if (this.opts.AllowAttack) {
+ this.el_button_attack.innerText = "Attack";
+ this.el_button_attack.onclick = () => {
+ this.onClickAttack();
+ };
+ el_actions.appendChild(this.el_button_attack);
+ }
- parent.appendChild(el_actions)
- }
+ parent.appendChild(el_actions);
+ }
- private generateHint(parent: HTMLElement) {
- if (!this.opts.Hint) {
- return
- }
- let el_hint = document.createElement("p")
- el_hint.innerHTML = this.opts.Hint
- parent.appendChild(el_hint)
- }
+ private generateHint(parent: HTMLElement) {
+ if (!this.opts.Hint) {
+ return;
+ }
+ let el_hint = document.createElement("p");
+ el_hint.innerHTML = this.opts.Hint;
+ parent.appendChild(el_hint);
+ }
- private generateInput(parent: HTMLElement) {
- this.el_request_input.classList.add(CLASS_HTTP_TARGET_INPUT)
+ private generateInput(parent: HTMLElement) {
+ this.el_request_input.classList.add(CLASS_HTTP_TARGET_INPUT);
- this.generateRequestMethod(this.el_request_input)
- this.generateRequestContentType(this.el_request_input)
- this.generateRequestHeaders(this.el_request_input)
- this.generateRequestParameters(this.el_request_input)
+ this.generateRequestMethod(this.el_request_input);
+ this.generateRequestContentType(this.el_request_input);
+ this.generateRequestHeaders(this.el_request_input);
+ this.generateRequestParameters(this.el_request_input);
- parent.appendChild(this.el_request_input)
- }
+ parent.appendChild(this.el_request_input);
+ }
- private generateRequestMethod(parent: HTMLElement) {
- let m = "" + this.opts.Method
- let select_opts: WuiInputSelectOpts = {
- label: "",
- name: "",
- options: {
- GET: {
- value: "0",
- selected: m === "0",
- },
- CONNECT: {
- value: "1",
- selected: m === "1",
- },
- DELETE: {
- value: "2",
- selected: m === "2",
- },
- HEAD: {
- value: "3",
- selected: m === "3",
- },
- OPTIONS: {
- value: "4",
- selected: m === "4",
- },
- PATCH: {
- value: "5",
- selected: m === "5",
- },
- POST: {
- value: "6",
- selected: m === "6",
- },
- PUT: {
- value: "7",
- selected: m === "7",
- },
- TRACE: {
- value: "8",
- selected: m === "8",
- },
- },
- is_disabled: !this.opts.IsCustomizable,
- onChangeHandler: (key: string, value: string) => {
- this.opts.Method = parseInt(value)
- },
- }
- let wui_request_method = new WuiInputSelect(select_opts)
+ private generateRequestMethod(parent: HTMLElement) {
+ let m = "" + this.opts.Method;
+ let select_opts: WuiInputSelectOpts = {
+ label: "",
+ name: "",
+ options: {
+ GET: {
+ value: "0",
+ selected: m === "0",
+ },
+ CONNECT: {
+ value: "1",
+ selected: m === "1",
+ },
+ DELETE: {
+ value: "2",
+ selected: m === "2",
+ },
+ HEAD: {
+ value: "3",
+ selected: m === "3",
+ },
+ OPTIONS: {
+ value: "4",
+ selected: m === "4",
+ },
+ PATCH: {
+ value: "5",
+ selected: m === "5",
+ },
+ POST: {
+ value: "6",
+ selected: m === "6",
+ },
+ PUT: {
+ value: "7",
+ selected: m === "7",
+ },
+ TRACE: {
+ value: "8",
+ selected: m === "8",
+ },
+ },
+ is_disabled: !this.opts.IsCustomizable,
+ onChangeHandler: (_: string, value: string) => {
+ this.opts.Method = parseInt(value);
+ },
+ };
+ let wui_request_method = new WuiInputSelect(select_opts);
- let path_opts: WuiInputStringOpts = {
- label: wui_request_method.el,
- value: this.opts.Path,
- class_input: CLASS_INPUT,
- class_label: CLASS_INPUT_LABEL,
- is_disabled: !this.opts.IsCustomizable,
- onChangeHandler: (path: string) => {
- this.opts.Path = path
- },
- }
- let wui_request_path = new WuiInputString(path_opts)
+ let path_opts: WuiInputStringOpts = {
+ label: wui_request_method.el,
+ value: this.opts.Path,
+ class_input: CLASS_INPUT,
+ class_label: CLASS_INPUT_LABEL,
+ is_disabled: !this.opts.IsCustomizable,
+ onChangeHandler: (path: string) => {
+ this.opts.Path = path;
+ },
+ };
+ let wui_request_path = new WuiInputString(path_opts);
- parent.appendChild(wui_request_path.el)
- }
+ parent.appendChild(wui_request_path.el);
+ }
- private generateRequestContentType(parent: HTMLElement) {
- let ct = "" + this.opts.RequestType
- let select_opts: WuiInputSelectOpts = {
- label: "Content type",
- name: "",
- options: {
- "(none)": {
- value: "0",
- selected: ct === "0",
- },
- "(query)": {
- value: "1",
- selected: ct === "1",
- },
- "application/x-www-form-urlencoded": {
- value: "2",
- selected: ct === "2",
- },
- "multipart/form-data": {
- value: "3",
- selected: ct === "3",
- },
- "application/json": {
- value: "4",
- selected: ct === "4",
- },
- },
- class_input: CLASS_INPUT,
- class_label: CLASS_INPUT_LABEL,
- is_disabled: !this.opts.IsCustomizable,
- onChangeHandler: (key: string, value: string) => {
- this.opts.RequestType = parseInt(value)
- },
- }
- let wui_request_type = new WuiInputSelect(select_opts)
+ private generateRequestContentType(parent: HTMLElement) {
+ let ct = "" + this.opts.RequestType;
+ let select_opts: WuiInputSelectOpts = {
+ label: "Content type",
+ name: "",
+ options: {
+ "(none)": {
+ value: "0",
+ selected: ct === "0",
+ },
+ "(query)": {
+ value: "1",
+ selected: ct === "1",
+ },
+ "application/x-www-form-urlencoded": {
+ value: "2",
+ selected: ct === "2",
+ },
+ "multipart/form-data": {
+ value: "3",
+ selected: ct === "3",
+ },
+ "application/json": {
+ value: "4",
+ selected: ct === "4",
+ },
+ },
+ class_input: CLASS_INPUT,
+ class_label: CLASS_INPUT_LABEL,
+ is_disabled: !this.opts.IsCustomizable,
+ onChangeHandler: (_: string, value: string) => {
+ this.opts.RequestType = parseInt(value);
+ },
+ };
+ let wui_request_type = new WuiInputSelect(select_opts);
- parent.appendChild(wui_request_type.el)
- }
+ parent.appendChild(wui_request_type.el);
+ }
- private generateRequestHeaders(parent: HTMLElement) {
- if (!this.opts.Headers) {
- return
- }
- if (Object.keys(this.opts.Headers).length === 0) {
- return
- }
+ private generateRequestHeaders(parent: HTMLElement) {
+ if (!this.opts.Headers) {
+ return;
+ }
+ if (Object.keys(this.opts.Headers).length === 0) {
+ return;
+ }
- let wrapper = document.createElement("fieldset")
- wrapper.classList.add(CLASS_HTTP_TARGET_INPUT_HEADER)
+ let wrapper = document.createElement("fieldset");
+ wrapper.classList.add(CLASS_HTTP_TARGET_INPUT_HEADER);
- let legend = document.createElement("legend")
- legend.innerText = "Headers"
- wrapper.appendChild(legend)
+ let legend = document.createElement("legend");
+ legend.innerText = "Headers";
+ wrapper.appendChild(legend);
- for (let key in this.opts.Headers) {
- let fi = this.opts.Headers[key]
- fi.value = LoadHttpTargetHeader(
- this.target,
- this.opts,
- key,
- )
- GenerateFormInput(wrapper, fi)
- }
+ for (const [key, fi] of Object.entries(this.opts.Headers)) {
+ fi.value = LoadHttpTargetHeader(this.target, this.opts, key);
+ GenerateFormInput(wrapper, fi);
+ }
- parent.appendChild(wrapper)
- }
+ parent.appendChild(wrapper);
+ }
- private generateRequestParameters(parent: HTMLElement) {
- if (!this.opts.Params) {
- return
- }
- if (Object.keys(this.opts.Params).length === 0) {
- return
- }
+ private generateRequestParameters(parent: HTMLElement) {
+ if (!this.opts.Params) {
+ return;
+ }
+ if (Object.keys(this.opts.Params).length === 0) {
+ return;
+ }
- let wrapper = document.createElement("fieldset")
- wrapper.classList.add(CLASS_HTTP_TARGET_INPUT_PARAMS)
+ let wrapper = document.createElement("fieldset");
+ wrapper.classList.add(CLASS_HTTP_TARGET_INPUT_PARAMS);
- let title = document.createElement("legend")
- title.innerText = "Parameters"
- wrapper.appendChild(title)
+ let title = document.createElement("legend");
+ title.innerText = "Parameters";
+ wrapper.appendChild(title);
- for (let key in this.opts.Params) {
- let fi = this.opts.Params[key]
- fi.value = LoadHttpTargetParam(
- this.target,
- this.opts,
- key,
- )
- GenerateFormInput(wrapper, fi)
- }
+ for (const [key, fi] of Object.entries(this.opts.Params)) {
+ fi.value = LoadHttpTargetParam(this.target, this.opts, key);
+ GenerateFormInput(wrapper, fi);
+ }
- parent.appendChild(wrapper)
- }
+ parent.appendChild(wrapper);
+ }
- private generateOutput(parent: HTMLElement) {
- let wrapper = document.createElement("fieldset")
- wrapper.classList.add(CLASS_HTTP_TARGET_OUT_RUN)
+ private generateOutput(parent: HTMLElement) {
+ let wrapper = document.createElement("fieldset");
+ wrapper.classList.add(CLASS_HTTP_TARGET_OUT_RUN);
- let title = document.createElement("legend")
- title.innerText = "Run output"
+ let title = document.createElement("legend");
+ title.innerText = "Run output";
- let btn_clear = document.createElement("button")
- btn_clear.innerText = "Clear"
- btn_clear.onclick = () => {
- this.onClickClearOutput()
- }
- title.appendChild(btn_clear)
+ let btn_clear = document.createElement("button");
+ btn_clear.innerText = "Clear";
+ btn_clear.onclick = () => {
+ this.onClickClearOutput();
+ };
+ title.appendChild(btn_clear);
- this.el_out_request.classList.add(CLASS_HTTP_TARGET_OUT_MONO)
- this.el_out_response.classList.add(CLASS_HTTP_TARGET_OUT_MONO)
- this.el_out_response_body.classList.add(
- CLASS_HTTP_TARGET_OUT_MONO,
- )
+ this.el_out_request.classList.add(CLASS_HTTP_TARGET_OUT_MONO);
+ this.el_out_response.classList.add(CLASS_HTTP_TARGET_OUT_MONO);
+ this.el_out_response_body.classList.add(CLASS_HTTP_TARGET_OUT_MONO);
- wrapper.appendChild(title)
- wrapper.appendChild(this.el_out_request)
- wrapper.appendChild(this.el_out_response)
- wrapper.appendChild(this.el_out_response_body)
+ wrapper.appendChild(title);
+ wrapper.appendChild(this.el_out_request);
+ wrapper.appendChild(this.el_out_response);
+ wrapper.appendChild(this.el_out_response_body);
- parent.appendChild(wrapper)
- this.onClickClearOutput()
- }
+ parent.appendChild(wrapper);
+ this.onClickClearOutput();
+ }
- private generateOutputAttack(parent: HTMLElement) {
- if (!this.opts.AllowAttack) {
- return
- }
+ private generateOutputAttack(parent: HTMLElement) {
+ if (!this.opts.AllowAttack) {
+ return;
+ }
- this.el_out_attack.classList.add(CLASS_HTTP_TARGET_OUT_ATTACK)
+ this.el_out_attack.classList.add(CLASS_HTTP_TARGET_OUT_ATTACK);
- let title = document.createElement("legend")
- title.innerText = "Attack results"
+ let title = document.createElement("legend");
+ title.innerText = "Attack results";
- this.generateAttackResults(this.el_out_attack_results)
+ this.generateAttackResults(this.el_out_attack_results);
- this.el_out_attack.appendChild(title)
- this.el_out_attack.appendChild(this.el_out_attack_results)
- parent.appendChild(this.el_out_attack)
- }
+ this.el_out_attack.appendChild(title);
+ this.el_out_attack.appendChild(this.el_out_attack_results);
+ parent.appendChild(this.el_out_attack);
+ }
- private generateAttackResults(parent: HTMLElement) {
- parent.innerText = ""
+ private generateAttackResults(parent: HTMLElement) {
+ parent.innerText = "";
- if (!this.opts.Results) {
- return
- }
+ if (!this.opts.Results) {
+ return;
+ }
- for (let result of this.opts.Results) {
- let wrapper = document.createElement("div")
- wrapper.classList.add(CLASS_HTTP_TARGET_ATTACK_RESULT)
+ for (let result of this.opts.Results) {
+ let wrapper = document.createElement("div");
+ wrapper.classList.add(CLASS_HTTP_TARGET_ATTACK_RESULT);
- let el_report_text = document.createElement("div")
- el_report_text.style.display = "none"
- el_report_text.classList.add(
- CLASS_HTTP_TARGET_OUT_MONO,
- )
+ let el_report_text = document.createElement("div");
+ el_report_text.style.display = "none";
+ el_report_text.classList.add(CLASS_HTTP_TARGET_OUT_MONO);
- let el_report_hist = document.createElement("div")
- el_report_hist.style.display = "none"
- el_report_hist.classList.add(
- CLASS_HTTP_TARGET_OUT_MONO,
- )
+ let el_report_hist = document.createElement("div");
+ el_report_hist.style.display = "none";
+ el_report_hist.classList.add(CLASS_HTTP_TARGET_OUT_MONO);
- let el = document.createElement("div")
- el.innerText = result.Name
+ let el = document.createElement("div");
+ el.innerText = result.Name;
- let actions = document.createElement("span")
- actions.classList.add(
- CLASS_HTTP_TARGET_ATTACK_RESULT_ACTIONS,
- )
+ let actions = document.createElement("span");
+ actions.classList.add(CLASS_HTTP_TARGET_ATTACK_RESULT_ACTIONS);
- let btn_attack_show = document.createElement("button")
- btn_attack_show.innerText = "Show"
- btn_attack_show.onclick = () => {
- this.onClickAttackShow(
- result.Name,
- btn_attack_show,
- el_report_text,
- el_report_hist,
- )
- }
+ let btn_attack_show = document.createElement("button");
+ btn_attack_show.innerText = "Show";
+ btn_attack_show.onclick = () => {
+ this.onClickAttackShow(
+ result.Name,
+ btn_attack_show,
+ el_report_text,
+ el_report_hist,
+ );
+ };
- let btn_attack_del = document.createElement("button")
- btn_attack_del.innerText = "Delete"
- btn_attack_del.onclick = () => {
- this.onClickAttackDelete(result)
- }
+ let btn_attack_del = document.createElement("button");
+ btn_attack_del.innerText = "Delete";
+ btn_attack_del.onclick = () => {
+ this.onClickAttackDelete(result);
+ };
- actions.appendChild(btn_attack_show)
- actions.appendChild(btn_attack_del)
- el.appendChild(actions)
+ actions.appendChild(btn_attack_show);
+ actions.appendChild(btn_attack_del);
+ el.appendChild(actions);
- wrapper.appendChild(el)
- wrapper.appendChild(el_report_text)
- wrapper.appendChild(el_report_hist)
+ wrapper.appendChild(el);
+ wrapper.appendChild(el_report_text);
+ wrapper.appendChild(el_report_hist);
- parent.appendChild(wrapper)
- }
- }
+ parent.appendChild(wrapper);
+ }
+ }
- private async onClickAttack() {
- await this.trunks.AttackHttp(this.target, this.opts)
- }
+ private async onClickAttack() {
+ await this.trunks.AttackHttp(this.target, this.opts);
+ }
- private async onClickAttackDelete(result: AttackResult) {
- let res = await this.trunks.AttackHttpDelete(result.Name)
- if (!res) {
- return
- }
- for (let x = 0; x < this.opts.Results.length; x++) {
- let r = this.opts.Results[x]
- if (r.Name == result.Name) {
- this.opts.Results.splice(x, 1)
- this.generateAttackResults(
- this.el_out_attack_results,
- )
- return
- }
- }
- }
+ private async onClickAttackDelete(result: AttackResult) {
+ let res = await this.trunks.AttackHttpDelete(result.Name);
+ if (!res) {
+ return;
+ }
+ this.opts.Results.forEach((r: AttackResult, x: number) => {
+ if (r.Name == result.Name) {
+ this.opts.Results.splice(x, 1);
+ this.generateAttackResults(this.el_out_attack_results);
+ return;
+ }
+ });
+ }
- private async onClickAttackShow(
- result_name: string,
- btn: HTMLButtonElement,
- el_report_text: HTMLElement,
- el_report_hist: HTMLElement,
- ) {
- if (btn.innerText === "Hide") {
- btn.innerText = "Show"
- el_report_text.style.display = "none"
- el_report_hist.style.display = "none"
- return
- }
+ private async onClickAttackShow(
+ result_name: string,
+ btn: HTMLButtonElement,
+ el_report_text: HTMLElement,
+ el_report_hist: HTMLElement,
+ ) {
+ if (btn.innerText === "Hide") {
+ btn.innerText = "Show";
+ el_report_text.style.display = "none";
+ el_report_hist.style.display = "none";
+ return;
+ }
- let res_json = await this.trunks.AttackHttpGet(result_name)
- if (res_json.code != 200) {
- return
- }
+ let res_json = await this.trunks.AttackHttpGet(result_name);
+ if (res_json.code != 200) {
+ return;
+ }
- let res = res_json.data as AttackResult
+ let res = res_json.data as AttackResult;
- el_report_text.innerText = atob(res.TextReport)
- el_report_text.style.display = "block"
+ el_report_text.innerText = atob(res.TextReport);
+ el_report_text.style.display = "block";
- el_report_hist.innerText = atob(res.HistReport)
- el_report_hist.style.display = "block"
+ el_report_hist.innerText = atob(res.HistReport);
+ el_report_hist.style.display = "block";
- btn.innerText = "Hide"
- }
+ btn.innerText = "Hide";
+ }
- private async onClickClearOutput() {
- this.el_out_request.innerText = "Raw request"
- this.el_out_response.innerText = "Raw response"
- this.el_out_response_body.innerText =
- "JSON formatted response body"
- }
+ private async onClickClearOutput() {
+ this.el_out_request.innerText = "Raw request";
+ this.el_out_response.innerText = "Raw response";
+ this.el_out_response_body.innerText = "JSON formatted response body";
+ }
- private async onClickRun() {
- let res = await this.trunks.RunHttp(this.target, this.opts)
- if (!res) {
- return
- }
- this.el_out_request.innerText = atob(res.DumpRequest)
- this.el_out_response.innerText = atob(res.DumpResponse)
- let body = atob(res.ResponseBody)
- if (res.ResponseType === CONTENT_TYPE_JSON) {
- this.el_out_response_body.innerText = JSON.stringify(
- JSON.parse(body),
- null,
- 2,
- )
- } else {
- this.el_out_response_body.innerText = body
- }
- }
+ private async onClickRun() {
+ let res = await this.trunks.RunHttp(this.target, this.opts);
+ if (!res) {
+ return;
+ }
+ this.el_out_request.innerText = atob(res.DumpRequest);
+ this.el_out_response.innerText = atob(res.DumpResponse);
+ let body = atob(res.ResponseBody);
+ if (res.ResponseType === CONTENT_TYPE_JSON) {
+ this.el_out_response_body.innerText = JSON.stringify(
+ JSON.parse(body),
+ null,
+ 2,
+ );
+ } else {
+ this.el_out_response_body.innerText = body;
+ }
+ }
- AddAttackResult(result: AttackResult) {
- this.opts.Results.push(result)
- this.generateAttackResults(this.el_out_attack_results)
- }
+ AddAttackResult(result: AttackResult) {
+ this.opts.Results.push(result);
+ this.generateAttackResults(this.el_out_attack_results);
+ }
}
diff --git a/_www/index.js b/_www/index.js
index 0832d94..a900993 100644
--- a/_www/index.js
+++ b/_www/index.js
@@ -1,20 +1,8 @@
// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
// SPDX-License-Identifier: GPL-3.0-or-later
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
import { Trunks } from "./trunks.js";
-function main() {
- return __awaiter(this, void 0, void 0, function* () {
- let trunks = new Trunks();
- yield trunks.Init();
- });
+async function main() {
+ let trunks = new Trunks();
+ await trunks.Init();
}
main();
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0REFBNEQ7QUFDNUQsNENBQTRDOzs7Ozs7Ozs7O0FBRTVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFcEMsU0FBZSxJQUFJOztRQUNsQixJQUFJLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO1FBRXpCLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ3BCLENBQUM7Q0FBQTtBQUVELElBQUksRUFBRSxDQUFBIn0= \ No newline at end of file
diff --git a/_www/index.ts b/_www/index.ts
index 6d605f4..8a1bf84 100644
--- a/_www/index.ts
+++ b/_www/index.ts
@@ -1,12 +1,12 @@
// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
// SPDX-License-Identifier: GPL-3.0-or-later
-import { Trunks } from "./trunks.js"
+import { Trunks } from "./trunks.js";
async function main() {
- let trunks = new Trunks()
+ let trunks = new Trunks();
- await trunks.Init()
+ await trunks.Init();
}
-main()
+main();
diff --git a/_www/interface.js b/_www/interface.js
index ff6425f..d01baf1 100644
--- a/_www/interface.js
+++ b/_www/interface.js
@@ -8,4 +8,3 @@ export const HASH_ENVIRONMENT = "environment";
export const HASH_LINKS = "links";
export const FormInputKindNumber = "number";
export const FormInputKindString = "string";
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDREQUE0RDtBQUM1RCw0Q0FBNEM7QUFFNUMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUE7QUFDckQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQTtBQUN6QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFBO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQTtBQUU1QyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUE7QUFDN0MsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQTtBQUVqQyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQUE7QUFDM0MsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFBIn0= \ No newline at end of file
diff --git a/_www/interface.ts b/_www/interface.ts
index 55ce91d..503480d 100644
--- a/_www/interface.ts
+++ b/_www/interface.ts
@@ -1,150 +1,150 @@
// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
// SPDX-License-Identifier: GPL-3.0-or-later
-export const CLASS_INPUT_LABEL = "trunks_input_label"
-export const CLASS_INPUT = "trunks_input"
-export const CLASS_NAV_LINK = "nav_link"
-export const CLASS_NAV_TARGET = "nav_target"
+export const CLASS_INPUT_LABEL = "trunks_input_label";
+export const CLASS_INPUT = "trunks_input";
+export const CLASS_NAV_LINK = "nav_link";
+export const CLASS_NAV_TARGET = "nav_target";
-export const HASH_ENVIRONMENT = "environment"
-export const HASH_LINKS = "links"
+export const HASH_ENVIRONMENT = "environment";
+export const HASH_LINKS = "links";
-export const FormInputKindNumber = "number"
-export const FormInputKindString = "string"
+export const FormInputKindNumber = "number";
+export const FormInputKindString = "string";
export interface AttackOptionsInterface {
- Duration: number
- RatePerSecond: number
- Timeout: number
+ Duration: number;
+ RatePerSecond: number;
+ Timeout: number;
}
export interface AttackResult {
- TargetID: string
- HttpTargetID: string
- Name: string
- TextReport: string
- HistReport: string
+ TargetID: string;
+ HttpTargetID: string;
+ Name: string;
+ TextReport: string;
+ HistReport: string;
}
export interface EnvironmentInterface {
- ListenAddress: string
- MaxAttackDuration: number
- MaxAttackRate: number
- ResultsDir: string
- ResultsSuffix: string
- AttackRunning: RunRequestInterface | null
+ ListenAddress: string;
+ MaxAttackDuration: number;
+ MaxAttackRate: number;
+ ResultsDir: string;
+ ResultsSuffix: string;
+ AttackRunning: RunRequestInterface | null;
}
export interface FormInput {
- label: string
- hint: string
- kind: string
- value: string
- max?: number
- min?: number
+ label: string;
+ hint: string;
+ kind: string;
+ value: string;
+ max?: number;
+ min?: number;
}
export interface HttpResponseInterface {
- code: number
- message: string
- data?: any
+ code: number;
+ message: string;
+ data?: any;
}
export interface HttpTargetInterface {
- Name: string
- Hint?: string
- ID: string
- Method: number
- Path: string
- RequestType: number
- Headers: KeyFormInput
- Params: KeyFormInput
- Results: AttackResult[]
- AllowAttack: boolean
- IsCustomizable: boolean
+ Name: string;
+ Hint?: string;
+ ID: string;
+ Method: number;
+ Path: string;
+ RequestType: number;
+ Headers: KeyFormInput;
+ Params: KeyFormInput;
+ Results: AttackResult[];
+ AllowAttack: boolean;
+ IsCustomizable: boolean;
}
export interface KeyFormInput {
- [key: string]: FormInput
+ [key: string]: FormInput;
}
export interface MapIdTarget {
- [key: string]: TargetInterface
+ [key: string]: TargetInterface;
}
export interface MapNumberString {
- [key: number]: string
+ [key: number]: string;
}
export interface NavLinkInterface {
- ID: string
- Text: string
- Href: string
- OpenInIFrame: boolean
+ ID: string;
+ Text: string;
+ Href: string;
+ OpenInIFrame: boolean;
}
export interface RunRequestInterface {
- Target: TargetInterface
- HttpTarget: HttpTargetInterface | null
- WebSocketTarget: WebSocketTargetInterface | null
- Result?: AttackResult | null
+ Target: TargetInterface;
+ HttpTarget: HttpTargetInterface | null;
+ WebSocketTarget: WebSocketTargetInterface | null;
+ Result?: AttackResult | null;
}
export interface RunResponseInterface {
- DumpRequest: string
- DumpResponse: string
- ResponseStatus: string
- ResponseStatusCode: number
- ResponseType: string
- ResponseBody: string
+ DumpRequest: string;
+ DumpResponse: string;
+ ResponseStatus: string;
+ ResponseStatusCode: number;
+ ResponseType: string;
+ ResponseBody: string;
}
export interface TargetInterface {
- ID: string
- Name: string
- Hint?: string
- BaseUrl: string
- Opts: AttackOptionsInterface
- Vars: KeyFormInput
- HttpTargets: HttpTargetInterface[]
- WebSocketTargets: WebSocketTargetInterface[]
+ ID: string;
+ Name: string;
+ Hint?: string;
+ BaseUrl: string;
+ Opts: AttackOptionsInterface;
+ Vars: KeyFormInput;
+ HttpTargets: HttpTargetInterface[];
+ WebSocketTargets: WebSocketTargetInterface[];
}
export interface TrunksInterface {
- AttackHttp(
- target: TargetInterface,
- http_target: HttpTargetInterface,
- ): Promise<HttpResponseInterface | null>
+ AttackHttp(
+ target: TargetInterface,
+ http_target: HttpTargetInterface,
+ ): Promise<HttpResponseInterface | null>;
- AttackHttpDelete(name: string): Promise<HttpResponseInterface | null>
+ AttackHttpDelete(name: string): Promise<HttpResponseInterface | null>;
- AttackHttpGet(name: string): Promise<HttpResponseInterface>
+ AttackHttpGet(name: string): Promise<HttpResponseInterface>;
- ContentRenderer(
- target: TargetInterface,
- http_target: HttpTargetInterface | null,
- ws_target: WebSocketTargetInterface | null,
- nav_link: NavLinkInterface | null,
- el: HTMLElement,
- ): void
+ ContentRenderer(
+ target: TargetInterface,
+ http_target: HttpTargetInterface | null,
+ ws_target: WebSocketTargetInterface | null,
+ nav_link: NavLinkInterface | null,
+ el: HTMLElement,
+ ): void;
- SetContent(path: string, el: HTMLElement | null): void
+ SetContent(path: string, el: HTMLElement | null): void;
- RunHttp(
- target: TargetInterface,
- http_target: HttpTargetInterface,
- ): Promise<RunResponseInterface | null>
+ RunHttp(
+ target: TargetInterface,
+ http_target: HttpTargetInterface,
+ ): Promise<RunResponseInterface | null>;
- RunWebSocket(
- target: TargetInterface,
- WebSocketTargetInterface: WebSocketTargetInterface,
- ): Promise<HttpResponseInterface | null>
+ RunWebSocket(
+ target: TargetInterface,
+ WebSocketTargetInterface: WebSocketTargetInterface,
+ ): Promise<HttpResponseInterface | null>;
}
export interface WebSocketTargetInterface {
- ID: string
- Name: string
- Hint?: string
- Headers: KeyFormInput
- Params: KeyFormInput
+ ID: string;
+ Name: string;
+ Hint?: string;
+ Headers: KeyFormInput;
+ Params: KeyFormInput;
}
diff --git a/_www/nav_links.ts b/_www/nav_links.ts
index 5d5079d..92cf667 100644
--- a/_www/nav_links.ts
+++ b/_www/nav_links.ts
@@ -2,84 +2,77 @@
// SPDX-License-Identifier: GPL-3.0-or-later
import {
- HASH_LINKS,
- CLASS_NAV_LINK,
- CLASS_NAV_TARGET,
- AttackOptionsInterface,
- KeyFormInput,
- NavLinkInterface,
- TargetInterface,
- TrunksInterface,
-} from "./interface.js"
-import { GetDocumentHeight } from "./functions.js"
+ HASH_LINKS,
+ CLASS_NAV_LINK,
+ CLASS_NAV_TARGET,
+ AttackOptionsInterface,
+ KeyFormInput,
+ NavLinkInterface,
+ TargetInterface,
+ TrunksInterface,
+} from "./interface.js";
+import { GetDocumentHeight } from "./functions.js";
export class NavLinks {
- el_nav: HTMLElement = document.createElement("div")
- el_src: HTMLElement = document.createElement("div")
- el_content: HTMLElement = document.createElement("div")
- el_iframe: HTMLIFrameElement = document.createElement("iframe")
+ el_nav: HTMLElement = document.createElement("div");
+ el_src: HTMLElement = document.createElement("div");
+ el_content: HTMLElement = document.createElement("div");
+ el_iframe: HTMLIFrameElement = document.createElement("iframe");
- constructor(
- public trunks: TrunksInterface,
- public navs: NavLinkInterface[],
- ) {
- let hdr = document.createElement("h3")
- hdr.innerText = "Links"
- hdr.onclick = () => {
- trunks.SetContent(HASH_LINKS, null)
- }
+ constructor(
+ public trunks: TrunksInterface,
+ public navs: NavLinkInterface[],
+ ) {
+ let hdr = document.createElement("h3");
+ hdr.innerText = "Links";
+ hdr.onclick = () => {
+ trunks.SetContent(HASH_LINKS, null);
+ };
- this.el_nav.classList.add(CLASS_NAV_TARGET)
- this.el_nav.appendChild(hdr)
+ this.el_nav.classList.add(CLASS_NAV_TARGET);
+ this.el_nav.appendChild(hdr);
- this.generateNav()
- this.generateContent()
- }
+ this.generateNav();
+ this.generateContent();
+ }
- generateNav() {
- for (let x = 0; x < this.navs.length; x++) {
- let nav = this.navs[x]
- let el = document.createElement("div")
- el.classList.add(CLASS_NAV_LINK)
- el.textContent = nav.Text
- el.onclick = () => {
- this.open(nav)
- }
+ generateNav() {
+ this.navs.forEach((nav: NavLinkInterface) => {
+ let el = document.createElement("div");
+ el.classList.add(CLASS_NAV_LINK);
+ el.textContent = nav.Text;
+ el.onclick = () => {
+ this.open(nav);
+ };
- this.el_nav.appendChild(el)
- }
- }
+ this.el_nav.appendChild(el);
+ });
+ }
- generateContent() {
- this.el_iframe.width = "100%"
- this.el_iframe.height = GetDocumentHeight() - 60 + ""
+ generateContent() {
+ this.el_iframe.width = "100%";
+ this.el_iframe.height = GetDocumentHeight() - 60 + "";
- this.el_content.appendChild(this.el_src)
- this.el_content.appendChild(this.el_iframe)
- }
+ this.el_content.appendChild(this.el_src);
+ this.el_content.appendChild(this.el_iframe);
+ }
- open(nav: NavLinkInterface) {
- if (nav.OpenInIFrame) {
- this.el_src.textContent = "Source: " + nav.Href
- this.el_iframe.src = nav.Href
- let target: TargetInterface = {
- ID: "nav",
- Name: "",
- BaseUrl: "",
- Opts: {} as AttackOptionsInterface,
- Vars: {} as KeyFormInput,
- HttpTargets: [],
- WebSocketTargets: [],
- }
- this.trunks.ContentRenderer(
- target,
- null,
- null,
- nav,
- this.el_content,
- )
- } else {
- window.open(nav.Href, "_blank")
- }
- }
+ open(nav: NavLinkInterface) {
+ if (nav.OpenInIFrame) {
+ this.el_src.textContent = "Source: " + nav.Href;
+ this.el_iframe.src = nav.Href;
+ let target: TargetInterface = {
+ ID: "nav",
+ Name: "",
+ BaseUrl: "",
+ Opts: {} as AttackOptionsInterface,
+ Vars: {} as KeyFormInput,
+ HttpTargets: [],
+ WebSocketTargets: [],
+ };
+ this.trunks.ContentRenderer(target, null, null, nav, this.el_content);
+ } else {
+ window.open(nav.Href, "_blank");
+ }
+ }
}
diff --git a/_www/target.js b/_www/target.js
index d8f412b..4f2391d 100644
--- a/_www/target.js
+++ b/_www/target.js
@@ -141,8 +141,7 @@ export class Target {
let legend = document.createElement("legend");
legend.innerText = "Variables";
wrapper.appendChild(legend);
- for (const key in this.opts.Vars) {
- let fi = this.opts.Vars[key];
+ for (const [key, fi] of Object.entries(this.opts.Vars)) {
fi.value = LoadTargetVar(this.opts, key);
GenerateFormInput(wrapper, fi);
}
@@ -152,23 +151,20 @@ export class Target {
if (!this.opts.HttpTargets) {
return;
}
- for (let x = 0; x < this.opts.HttpTargets.length; x++) {
- let http_target = this.opts.HttpTargets[x];
- let com_http_target = new HttpTarget(trunks, this.opts, http_target);
- this.http_targets[http_target.ID] = com_http_target;
+ this.opts.HttpTargets.forEach((httpTarget) => {
+ let com_http_target = new HttpTarget(trunks, this.opts, httpTarget);
+ this.http_targets[httpTarget.ID] = com_http_target;
this.el_content.appendChild(com_http_target.el);
- }
+ });
}
generateWebSocketTargets(trunks) {
if (!this.opts.WebSocketTargets) {
return;
}
- for (let x = 0; x < this.opts.WebSocketTargets.length; x++) {
- let ws_target = this.opts.WebSocketTargets[x];
- let com_ws_target = new WebSocketTarget(trunks, this.opts, ws_target);
- this.ws_targets[ws_target.ID] = com_ws_target;
+ this.opts.WebSocketTargets.forEach((wsTarget) => {
+ let com_ws_target = new WebSocketTarget(trunks, this.opts, wsTarget);
+ this.ws_targets[wsTarget.ID] = com_ws_target;
this.el_content.appendChild(com_ws_target.el);
- }
+ });
}
}
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGFyZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDREQUE0RDtBQUM1RCw0Q0FBNEM7QUFFNUMsT0FBTyxFQUFFLGNBQWMsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQTtBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFzQixNQUFNLHVCQUF1QixDQUFBO0FBRTFFLE9BQU8sRUFDTixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixvQkFBb0IsRUFDcEIsYUFBYSxHQUNiLE1BQU0sZ0JBQWdCLENBQUE7QUFDdkIsT0FBTyxFQUNOLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsZ0JBQWdCLEdBT2hCLE1BQU0sZ0JBQWdCLENBQUE7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVoRCxNQUFNLHFCQUFxQixHQUFHLGlCQUFpQixDQUFBO0FBQy9DLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFBO0FBVTNDLE1BQU0sT0FBTyxNQUFNO0lBT2xCLFlBQ1EsTUFBdUIsRUFDdkIsSUFBcUI7UUFEckIsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFDdkIsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFSN0IsV0FBTSxHQUFnQixRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ25ELGVBQVUsR0FBZ0IsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUV2RCxpQkFBWSxHQUFrQixFQUFFLENBQUE7UUFDaEMsZUFBVSxHQUF1QixFQUFFLENBQUE7UUFNbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzdCLENBQUM7SUFFTyxXQUFXLENBQUMsTUFBdUI7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFFM0MsSUFBSSxjQUFjLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNqRCxjQUFjLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBQ3pDLGNBQWMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO1lBQzdCLE1BQU0sQ0FBQyxlQUFlLENBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxDQUFDLFVBQVUsQ0FDZixDQUFBO1FBQ0YsQ0FBQyxDQUFBO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUE7UUFFdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUMxQixLQUFLLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNyQyxJQUFJLGNBQWMsR0FDakIsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDOUIsY0FBYyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFBO2dCQUNsQyxjQUFjLENBQUMsRUFBRSxHQUFHLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFBO2dCQUNwRCxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FDM0IscUJBQXFCLENBQ3JCLENBQUE7Z0JBQ0QsY0FBYyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7b0JBQzdCLE1BQU0sQ0FBQyxlQUFlLENBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQ1QsRUFBRSxFQUNGLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxDQUFDLFVBQVUsQ0FDZixDQUFBO2dCQUNGLENBQUMsQ0FBQTtnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQTthQUN2QztTQUNEO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQy9CLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDM0MsSUFBSSxZQUFZLEdBQ2YsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDOUIsWUFBWSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFBO2dCQUNqQyxZQUFZLENBQUMsRUFBRSxHQUFHLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFBO2dCQUNqRCxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FDekIsbUJBQW1CLENBQ25CLENBQUE7Z0JBQ0QsWUFBWSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7b0JBQzNCLE1BQU0sQ0FBQyxlQUFlLENBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxFQUNKLEdBQUcsRUFDSCxJQUFJLEVBQ0osSUFBSSxDQUFDLFVBQVUsQ0FDZixDQUFBO2dCQUNGLENBQUMsQ0FBQTtnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQTthQUNyQztTQUNEO0lBQ0YsQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUF1QjtRQUM5QyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtRQUM3QixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQTtRQUNuQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDaEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFTyxzQkFBc0I7UUFDN0IsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM3QyxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBQ3JDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUE7UUFFNUIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN6QyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQTtRQUV4QyxJQUFJLGFBQWEsR0FBdUI7WUFDdkMsS0FBSyxFQUFFLFVBQVU7WUFDakIsSUFBSSxFQUFFLDJFQUEyRTtZQUNqRixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQ3hCLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLFdBQVcsRUFBRSxpQkFBaUI7WUFDOUIsZUFBZSxFQUFFLElBQUk7WUFDckIsV0FBVyxFQUFFLElBQUk7WUFDakIsZUFBZSxFQUFFLENBQUMsQ0FBUyxFQUFFLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQTtZQUN0QixDQUFDO1NBQ0QsQ0FBQTtRQUNELElBQUksa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtTQUNwQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ25ELENBQUM7SUFFTyw0QkFBNEI7UUFDbkMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUVoRCxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzdDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUE7UUFFbkMsSUFBSSxhQUFhLEdBQXVCO1lBQ3ZDLEtBQUssRUFBRSxVQUFVO1lBQ2pCLElBQUksRUFBRSxxQ0FBcUM7WUFDM0MsS0FBSyxFQUFFLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdkMsR0FBRyxFQUFFLENBQUM7WUFDTixXQUFXLEVBQUUsV0FBVztZQUN4QixXQUFXLEVBQUUsaUJBQWlCO1lBQzlCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGVBQWUsRUFBRSxDQUFDLENBQVMsRUFBRSxFQUFFO2dCQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtZQUNsQyxDQUFDO1NBQ0QsQ0FBQTtRQUNELElBQUksa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFMUQsSUFBSSxTQUFTLEdBQXVCO1lBQ25DLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsSUFBSSxFQUFFLDhEQUE4RDtZQUNwRSxLQUFLLEVBQUUsMEJBQTBCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM1QyxHQUFHLEVBQUUsQ0FBQztZQUNOLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLFdBQVcsRUFBRSxpQkFBaUI7WUFDOUIsZUFBZSxFQUFFLElBQUk7WUFDckIsZUFBZSxFQUFFLENBQUMsQ0FBUyxFQUFFLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUE7WUFDakMsQ0FBQztTQUNELENBQUE7UUFDRCxJQUFJLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUVsRCxJQUFJLFlBQVksR0FBdUI7WUFDdEMsS0FBSyxFQUFFLG1CQUFtQjtZQUMxQixJQUFJLEVBQUUsdUNBQXVDO1lBQzdDLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3RDLEdBQUcsRUFBRSxDQUFDO1lBQ04sV0FBVyxFQUFFLFdBQVc7WUFDeEIsV0FBVyxFQUFFLGlCQUFpQjtZQUM5QixlQUFlLEVBQUUsSUFBSTtZQUNyQixlQUFlLEVBQUUsQ0FBQyxDQUFTLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUE7WUFDakMsQ0FBQztTQUNELENBQUE7UUFDRCxJQUFJLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBRXhELE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMxQyxPQUFPLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN0QyxPQUFPLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JDLENBQUM7SUFFTyxtQkFBbUI7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ3BCLE9BQU07U0FDTjtRQUVELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFaEQsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM3QyxNQUFNLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRTNCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDakMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDNUIsRUFBRSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUN4QyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUE7U0FDOUI7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRU8sbUJBQW1CLENBQUMsTUFBdUI7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzNCLE9BQU07U0FDTjtRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFFMUMsSUFBSSxlQUFlLEdBQUcsSUFBSSxVQUFVLENBQ25DLE1BQU0sRUFDTixJQUFJLENBQUMsSUFBSSxFQUNULFdBQVcsQ0FDWCxDQUFBO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFBO1lBRW5ELElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtTQUMvQztJQUNGLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxNQUF1QjtRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNoQyxPQUFNO1NBQ047UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUU3QyxJQUFJLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FDdEMsTUFBTSxFQUNOLElBQUksQ0FBQyxJQUFJLEVBQ1QsU0FBUyxDQUNULENBQUE7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUE7WUFFN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1NBQzdDO0lBQ0YsQ0FBQztDQUNEIn0= \ No newline at end of file
diff --git a/_www/target.ts b/_www/target.ts
index 52d6a5a..214abec 100644
--- a/_www/target.ts
+++ b/_www/target.ts
@@ -1,265 +1,226 @@
// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
// SPDX-License-Identifier: GPL-3.0-or-later
-import { WuiInputNumber, WuiInputNumberOpts } from "./wui/input/number.js"
-import { WuiInputString, WuiInputStringOpts } from "./wui/input/string.js"
+import { WuiInputNumber, WuiInputNumberOpts } from "./wui/input/number.js";
+import { WuiInputString, WuiInputStringOpts } from "./wui/input/string.js";
import {
- GenerateFormInput,
- LoadTargetOptDuration,
- LoadTargetOptRatePerSecond,
- LoadTargetOptTimeout,
- LoadTargetVar,
-} from "./functions.js"
+ GenerateFormInput,
+ LoadTargetOptDuration,
+ LoadTargetOptRatePerSecond,
+ LoadTargetOptTimeout,
+ LoadTargetVar,
+} from "./functions.js";
import {
- CLASS_INPUT,
- CLASS_INPUT_LABEL,
- CLASS_NAV_TARGET,
- AttackOptionsInterface,
- HttpTargetInterface,
- KeyFormInput,
- TargetInterface,
- TrunksInterface,
- WebSocketTargetInterface,
-} from "./interface.js"
-import { HttpTarget } from "./http_target.js"
-import { WebSocketTarget } from "./ws_target.js"
+ CLASS_INPUT,
+ CLASS_INPUT_LABEL,
+ CLASS_NAV_TARGET,
+ HttpTargetInterface,
+ TargetInterface,
+ TrunksInterface,
+ WebSocketTargetInterface,
+} from "./interface.js";
+import { HttpTarget } from "./http_target.js";
+import { WebSocketTarget } from "./ws_target.js";
-const CLASS_NAV_TARGET_HTTP = "nav_http_target"
-const CLASS_NAV_TARGET_WS = "nav_ws_target"
+const CLASS_NAV_TARGET_HTTP = "nav_http_target";
+const CLASS_NAV_TARGET_WS = "nav_ws_target";
interface MapHttpTarget {
- [key: string]: HttpTarget
+ [key: string]: HttpTarget;
}
interface MapWebSocketTarget {
- [key: string]: WebSocketTarget
+ [key: string]: WebSocketTarget;
}
export class Target {
- el_nav: HTMLElement = document.createElement("div")
- el_content: HTMLElement = document.createElement("div")
+ el_nav: HTMLElement = document.createElement("div");
+ el_content: HTMLElement = document.createElement("div");
- http_targets: MapHttpTarget = {}
- ws_targets: MapWebSocketTarget = {}
+ http_targets: MapHttpTarget = {};
+ ws_targets: MapWebSocketTarget = {};
- constructor(
- public trunks: TrunksInterface,
- public opts: TargetInterface,
- ) {
- this.generateNav(trunks)
- this.generateContent(trunks)
- }
+ constructor(
+ public trunks: TrunksInterface,
+ public opts: TargetInterface,
+ ) {
+ this.generateNav(trunks);
+ this.generateContent(trunks);
+ }
- private generateNav(trunks: TrunksInterface) {
- this.el_nav.classList.add(CLASS_NAV_TARGET)
+ private generateNav(trunks: TrunksInterface) {
+ this.el_nav.classList.add(CLASS_NAV_TARGET);
- let el_target_menu = document.createElement("h3")
- el_target_menu.innerHTML = this.opts.Name
- el_target_menu.onclick = () => {
- trunks.ContentRenderer(
- this.opts,
- null,
- null,
- null,
- this.el_content,
- )
- }
+ let el_target_menu = document.createElement("h3");
+ el_target_menu.innerHTML = this.opts.Name;
+ el_target_menu.onclick = () => {
+ trunks.ContentRenderer(this.opts, null, null, null, this.el_content);
+ };
- this.el_nav.appendChild(el_target_menu)
+ this.el_nav.appendChild(el_target_menu);
- if (this.opts.HttpTargets) {
- for (let ht of this.opts.HttpTargets) {
- let el_target_http =
- document.createElement("div")
- el_target_http.innerHTML = ht.Name
- el_target_http.id = `/http/${this.opts.ID}/${ht.ID}`
- el_target_http.classList.add(
- CLASS_NAV_TARGET_HTTP,
- )
- el_target_http.onclick = () => {
- trunks.ContentRenderer(
- this.opts,
- ht,
- null,
- null,
- this.el_content,
- )
- }
- this.el_nav.appendChild(el_target_http)
- }
- }
+ if (this.opts.HttpTargets) {
+ for (let ht of this.opts.HttpTargets) {
+ let el_target_http = document.createElement("div");
+ el_target_http.innerHTML = ht.Name;
+ el_target_http.id = `/http/${this.opts.ID}/${ht.ID}`;
+ el_target_http.classList.add(CLASS_NAV_TARGET_HTTP);
+ el_target_http.onclick = () => {
+ trunks.ContentRenderer(this.opts, ht, null, null, this.el_content);
+ };
+ this.el_nav.appendChild(el_target_http);
+ }
+ }
- if (this.opts.WebSocketTargets) {
- for (let wst of this.opts.WebSocketTargets) {
- let el_target_ws =
- document.createElement("div")
- el_target_ws.innerHTML = wst.Name
- el_target_ws.id = `/ws/${this.opts.ID}/${wst.ID}`
- el_target_ws.classList.add(
- CLASS_NAV_TARGET_WS,
- )
- el_target_ws.onclick = () => {
- trunks.ContentRenderer(
- this.opts,
- null,
- wst,
- null,
- this.el_content,
- )
- }
- this.el_nav.appendChild(el_target_ws)
- }
- }
- }
+ if (this.opts.WebSocketTargets) {
+ for (let wst of this.opts.WebSocketTargets) {
+ let el_target_ws = document.createElement("div");
+ el_target_ws.innerHTML = wst.Name;
+ el_target_ws.id = `/ws/${this.opts.ID}/${wst.ID}`;
+ el_target_ws.classList.add(CLASS_NAV_TARGET_WS);
+ el_target_ws.onclick = () => {
+ trunks.ContentRenderer(this.opts, null, wst, null, this.el_content);
+ };
+ this.el_nav.appendChild(el_target_ws);
+ }
+ }
+ }
- private generateContent(trunks: TrunksInterface) {
- this.generateContentBaseURL()
- this.generateContentAttackOptions()
- this.generateContentVars()
- this.generateHttpTargets(trunks)
- this.generateWebSocketTargets(trunks)
- }
+ private generateContent(trunks: TrunksInterface) {
+ this.generateContentBaseURL();
+ this.generateContentAttackOptions();
+ this.generateContentVars();
+ this.generateHttpTargets(trunks);
+ this.generateWebSocketTargets(trunks);
+ }
- private generateContentBaseURL() {
- let hdr_target = document.createElement("h2")
- hdr_target.innerText = this.opts.Name
- hdr_target.id = this.opts.ID
+ private generateContentBaseURL() {
+ let hdr_target = document.createElement("h2");
+ hdr_target.innerText = this.opts.Name;
+ hdr_target.id = this.opts.ID;
- let el_hint = document.createElement("p")
- el_hint.innerHTML = this.opts.Hint || ""
+ let el_hint = document.createElement("p");
+ el_hint.innerHTML = this.opts.Hint || "";
- let opts_base_url: WuiInputStringOpts = {
- label: "Base URL",
- hint: "The base URL where the HTTP request will be send or the target of attack.",
- value: this.opts.BaseUrl,
- class_input: CLASS_INPUT,
- class_label: CLASS_INPUT_LABEL,
- is_hint_toggled: true,
- is_disabled: true,
- onChangeHandler: (v: string) => {
- this.opts.BaseUrl = v
- },
- }
- let com_input_base_url = new WuiInputString(opts_base_url)
+ let opts_base_url: WuiInputStringOpts = {
+ label: "Base URL",
+ hint: "The base URL where the HTTP request will be send or the target of attack.",
+ value: this.opts.BaseUrl,
+ class_input: CLASS_INPUT,
+ class_label: CLASS_INPUT_LABEL,
+ is_hint_toggled: true,
+ is_disabled: true,
+ onChangeHandler: (v: string) => {
+ this.opts.BaseUrl = v;
+ },
+ };
+ let com_input_base_url = new WuiInputString(opts_base_url);
- this.el_content.appendChild(hdr_target)
- if (this.opts.Hint) {
- this.el_content.appendChild(el_hint)
- }
- this.el_content.appendChild(com_input_base_url.el)
- }
+ this.el_content.appendChild(hdr_target);
+ if (this.opts.Hint) {
+ this.el_content.appendChild(el_hint);
+ }
+ this.el_content.appendChild(com_input_base_url.el);
+ }
- private generateContentAttackOptions() {
- let wrapper = document.createElement("fieldset")
+ private generateContentAttackOptions() {
+ let wrapper = document.createElement("fieldset");
- let legend = document.createElement("legend")
- legend.innerText = "Attack options"
+ let legend = document.createElement("legend");
+ legend.innerText = "Attack options";
- let opts_duration: WuiInputNumberOpts = {
- label: "Duration",
- hint: "The duration of attack, in seconds.",
- value: LoadTargetOptDuration(this.opts),
- min: 1,
- class_input: CLASS_INPUT,
- class_label: CLASS_INPUT_LABEL,
- is_hint_toggled: true,
- onChangeHandler: (v: number) => {
- this.opts.Opts.Duration = v * 1e9
- },
- }
- let com_input_duration = new WuiInputNumber(opts_duration)
+ let opts_duration: WuiInputNumberOpts = {
+ label: "Duration",
+ hint: "The duration of attack, in seconds.",
+ value: LoadTargetOptDuration(this.opts),
+ min: 1,
+ class_input: CLASS_INPUT,
+ class_label: CLASS_INPUT_LABEL,
+ is_hint_toggled: true,
+ onChangeHandler: (v: number) => {
+ this.opts.Opts.Duration = v * 1e9;
+ },
+ };
+ let com_input_duration = new WuiInputNumber(opts_duration);
- let opts_rate: WuiInputNumberOpts = {
- label: "Rate per second",
- hint: "The number of request send per second when attacking target.",
- value: LoadTargetOptRatePerSecond(this.opts),
- min: 1,
- class_input: CLASS_INPUT,
- class_label: CLASS_INPUT_LABEL,
- is_hint_toggled: true,
- onChangeHandler: (v: number) => {
- this.opts.Opts.RatePerSecond = v
- },
- }
- let com_input_rate = new WuiInputNumber(opts_rate)
+ let opts_rate: WuiInputNumberOpts = {
+ label: "Rate per second",
+ hint: "The number of request send per second when attacking target.",
+ value: LoadTargetOptRatePerSecond(this.opts),
+ min: 1,
+ class_input: CLASS_INPUT,
+ class_label: CLASS_INPUT_LABEL,
+ is_hint_toggled: true,
+ onChangeHandler: (v: number) => {
+ this.opts.Opts.RatePerSecond = v;
+ },
+ };
+ let com_input_rate = new WuiInputNumber(opts_rate);
- let opts_timeout: WuiInputNumberOpts = {
- label: "Timeout (seconds)",
- hint: "Timeout for each request, in seconds.",
- value: LoadTargetOptTimeout(this.opts),
- min: 5,
- class_input: CLASS_INPUT,
- class_label: CLASS_INPUT_LABEL,
- is_hint_toggled: true,
- onChangeHandler: (v: number) => {
- this.opts.Opts.Timeout = v * 1e9
- },
- }
- let com_input_timeout = new WuiInputNumber(opts_timeout)
+ let opts_timeout: WuiInputNumberOpts = {
+ label: "Timeout (seconds)",
+ hint: "Timeout for each request, in seconds.",
+ value: LoadTargetOptTimeout(this.opts),
+ min: 5,
+ class_input: CLASS_INPUT,
+ class_label: CLASS_INPUT_LABEL,
+ is_hint_toggled: true,
+ onChangeHandler: (v: number) => {
+ this.opts.Opts.Timeout = v * 1e9;
+ },
+ };
+ let com_input_timeout = new WuiInputNumber(opts_timeout);
- wrapper.appendChild(legend)
- wrapper.appendChild(com_input_duration.el)
- wrapper.appendChild(com_input_rate.el)
- wrapper.appendChild(com_input_timeout.el)
- this.el_content.appendChild(wrapper)
- }
+ wrapper.appendChild(legend);
+ wrapper.appendChild(com_input_duration.el);
+ wrapper.appendChild(com_input_rate.el);
+ wrapper.appendChild(com_input_timeout.el);
+ this.el_content.appendChild(wrapper);
+ }
- private generateContentVars() {
- if (!this.opts.Vars) {
- return
- }
+ private generateContentVars() {
+ if (!this.opts.Vars) {
+ return;
+ }
- let wrapper = document.createElement("fieldset")
+ let wrapper = document.createElement("fieldset");
- let legend = document.createElement("legend")
- legend.innerText = "Variables"
- wrapper.appendChild(legend)
+ let legend = document.createElement("legend");
+ legend.innerText = "Variables";
+ wrapper.appendChild(legend);
- for (const key in this.opts.Vars) {
- let fi = this.opts.Vars[key]
- fi.value = LoadTargetVar(this.opts, key)
- GenerateFormInput(wrapper, fi)
- }
+ for (const [key, fi] of Object.entries(this.opts.Vars)) {
+ fi.value = LoadTargetVar(this.opts, key);
+ GenerateFormInput(wrapper, fi);
+ }
- this.el_content.appendChild(wrapper)
- }
+ this.el_content.appendChild(wrapper);
+ }
- private generateHttpTargets(trunks: TrunksInterface) {
- if (!this.opts.HttpTargets) {
- return
- }
+ private generateHttpTargets(trunks: TrunksInterface) {
+ if (!this.opts.HttpTargets) {
+ return;
+ }
- for (let x = 0; x < this.opts.HttpTargets.length; x++) {
- let http_target = this.opts.HttpTargets[x]
+ this.opts.HttpTargets.forEach((httpTarget: HttpTargetInterface) => {
+ let com_http_target = new HttpTarget(trunks, this.opts, httpTarget);
+ this.http_targets[httpTarget.ID] = com_http_target;
- let com_http_target = new HttpTarget(
- trunks,
- this.opts,
- http_target,
- )
- this.http_targets[http_target.ID] = com_http_target
+ this.el_content.appendChild(com_http_target.el);
+ });
+ }
- this.el_content.appendChild(com_http_target.el)
- }
- }
+ private generateWebSocketTargets(trunks: TrunksInterface) {
+ if (!this.opts.WebSocketTargets) {
+ return;
+ }
- private generateWebSocketTargets(trunks: TrunksInterface) {
- if (!this.opts.WebSocketTargets) {
- return
- }
+ this.opts.WebSocketTargets.forEach((wsTarget: WebSocketTargetInterface) => {
+ let com_ws_target = new WebSocketTarget(trunks, this.opts, wsTarget);
+ this.ws_targets[wsTarget.ID] = com_ws_target;
- for (let x = 0; x < this.opts.WebSocketTargets.length; x++) {
- let ws_target = this.opts.WebSocketTargets[x]
-
- let com_ws_target = new WebSocketTarget(
- trunks,
- this.opts,
- ws_target,
- )
- this.ws_targets[ws_target.ID] = com_ws_target
-
- this.el_content.appendChild(com_ws_target.el)
- }
- }
+ this.el_content.appendChild(com_ws_target.el);
+ });
+ }
}
diff --git a/_www/trunks.js b/_www/trunks.js
index aa68147..ae1d421 100644
--- a/_www/trunks.js
+++ b/_www/trunks.js
@@ -1,14 +1,5 @@
// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
// SPDX-License-Identifier: GPL-3.0-or-later
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
import { Environment } from "./environment.js";
import { Save } from "./functions.js";
import { HASH_ENVIRONMENT, } from "./interface.js";
@@ -83,76 +74,66 @@ export class Trunks {
wrapper.appendChild(this.el_content);
this.el.appendChild(wrapper);
}
- Init() {
- return __awaiter(this, void 0, void 0, function* () {
- yield this.apiEnvironmentGet();
- yield this.initTargets();
- yield this.initNavLinks();
+ async Init() {
+ await this.apiEnvironmentGet();
+ await this.initTargets();
+ await this.initNavLinks();
+ this.windowOnHashChange();
+ window.onhashchange = () => {
this.windowOnHashChange();
- window.onhashchange = () => {
- this.windowOnHashChange();
- };
- });
+ };
}
- apiEnvironmentGet() {
- return __awaiter(this, void 0, void 0, function* () {
- let http_res = yield fetch(API_ENVIRONMENT);
- let res = yield http_res.json();
- if (res.code != 200) {
- wui_notif.Error(res.message);
- return;
- }
- this.env = res.data;
- this.setAttackRunning(this.env.AttackRunning);
- this.com_env.Set(this.env);
- });
+ async apiEnvironmentGet() {
+ let http_res = await fetch(API_ENVIRONMENT);
+ let res = await http_res.json();
+ if (res.code != 200) {
+ wui_notif.error(res.message);
+ return;
+ }
+ this.env = res.data;
+ this.setAttackRunning(this.env.AttackRunning);
+ this.com_env.Set(this.env);
}
- initNavLinks() {
- return __awaiter(this, void 0, void 0, function* () {
- let http_res = yield fetch(API_NAVLINKS);
- let res = yield http_res.json();
- if (res.code != 200) {
- wui_notif.Error(res.message);
- return;
- }
- this.com_nav_links = new NavLinks(this, res.data);
- this.el_nav_links.appendChild(this.com_nav_links.el_nav);
- for (let nav of res.data) {
- this.navLinks[nav.ID] = nav;
- }
- });
+ async initNavLinks() {
+ let http_res = await fetch(API_NAVLINKS);
+ let res = await http_res.json();
+ if (res.code != 200) {
+ wui_notif.error(res.message);
+ return;
+ }
+ this.com_nav_links = new NavLinks(this, res.data);
+ this.el_nav_links.appendChild(this.com_nav_links.el_nav);
+ for (let nav of res.data) {
+ this.navLinks[nav.ID] = nav;
+ }
}
- initTargets() {
- return __awaiter(this, void 0, void 0, function* () {
- let http_res = yield fetch(API_TARGETS);
- let res = yield http_res.json();
- if (res.code != 200) {
- wui_notif.Error(res.message);
- return;
- }
- let targets = res.data;
- this.el_nav_content.innerHTML = "";
- for (let target of targets) {
- let com_target = new Target(this, target);
- this.targets[target.ID] = com_target;
- this.el_nav_content.appendChild(com_target.el_nav);
- }
- });
+ async initTargets() {
+ let http_res = await fetch(API_TARGETS);
+ let res = await http_res.json();
+ if (res.code != 200) {
+ wui_notif.error(res.message);
+ return;
+ }
+ let targets = res.data;
+ this.el_nav_content.innerHTML = "";
+ for (let target of targets) {
+ let com_target = new Target(this, target);
+ this.targets[target.ID] = com_target;
+ this.el_nav_content.appendChild(com_target.el_nav);
+ }
}
- onClickAttackCancel() {
- return __awaiter(this, void 0, void 0, function* () {
- let fres = yield fetch(API_ATTACK_HTTP, {
- method: "DELETE",
- });
- let json_res = yield fres.json();
- if (json_res.code != 200) {
- wui_notif.Error(json_res.message);
- return null;
- }
- wui_notif.Info(json_res.message);
- this.setAttackRunning(null);
- return json_res;
+ async onClickAttackCancel() {
+ let fres = await fetch(API_ATTACK_HTTP, {
+ method: "DELETE",
});
+ let json_res = await fres.json();
+ if (json_res.code != 200) {
+ wui_notif.error(json_res.message);
+ return null;
+ }
+ wui_notif.info(json_res.message);
+ this.setAttackRunning(null);
+ return json_res;
}
windowOnHashChange() {
// Parse the location hash.
@@ -168,7 +149,13 @@ export class Trunks {
}
console.log("paths: ", paths);
let el;
+ if (!paths[1]) {
+ return;
+ }
let target = this.targets[paths[1]];
+ if (!target) {
+ return;
+ }
switch (paths.length) {
case 2:
case 3:
@@ -191,9 +178,13 @@ export class Trunks {
this.el_content.appendChild(target.el_content);
}
else if (paths[2] === "link") {
- let nav = this.navLinks[paths[3]];
- this.el_content.innerHTML = "";
- this.com_nav_links.open(nav);
+ if (paths[3]) {
+ let nav = this.navLinks[paths[3]];
+ if (nav) {
+ this.el_content.innerHTML = "";
+ this.com_nav_links.open(nav);
+ }
+ }
}
el = document.getElementById(paths[3]);
if (el) {
@@ -220,80 +211,74 @@ export class Trunks {
this.onClickAttackCancel();
};
this.el_attack_running.appendChild(this.el_attack_cancel);
- wui_notif.Info(`Attacking "${runRequest.Target.Name}/${runRequest.HttpTarget.Name}" ...`);
+ wui_notif.info(`Attacking "${runRequest.Target.Name}/${runRequest.HttpTarget.Name}" ...`);
}
- AttackHttp(target, http_target) {
- return __awaiter(this, void 0, void 0, function* () {
- Save(target, http_target, null);
- let attackReq = {
- Target: {
- ID: target.ID,
- Opts: target.Opts,
- Vars: target.Vars,
- Name: target.Name,
- BaseUrl: target.BaseUrl,
- HttpTargets: [],
- WebSocketTargets: [],
- },
- HttpTarget: {
- ID: http_target.ID,
- Name: http_target.Name,
- Method: http_target.Method,
- Path: http_target.Path,
- RequestType: http_target.RequestType,
- Headers: http_target.Headers,
- Params: http_target.Params,
- Results: [],
- AllowAttack: http_target.AllowAttack,
- IsCustomizable: http_target.IsCustomizable,
- },
- WebSocketTarget: null,
- };
- let http_res = yield fetch(API_ATTACK_HTTP, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(attackReq),
- });
- let json_res = yield http_res.json();
- if (json_res.code != 200) {
- wui_notif.Error(json_res.message);
- return null;
- }
- this.setAttackRunning(attackReq);
- return json_res;
+ async AttackHttp(target, http_target) {
+ Save(target, http_target, null);
+ let attackReq = {
+ Target: {
+ ID: target.ID,
+ Opts: target.Opts,
+ Vars: target.Vars,
+ Name: target.Name,
+ BaseUrl: target.BaseUrl,
+ HttpTargets: [],
+ WebSocketTargets: [],
+ },
+ HttpTarget: {
+ ID: http_target.ID,
+ Name: http_target.Name,
+ Method: http_target.Method,
+ Path: http_target.Path,
+ RequestType: http_target.RequestType,
+ Headers: http_target.Headers,
+ Params: http_target.Params,
+ Results: [],
+ AllowAttack: http_target.AllowAttack,
+ IsCustomizable: http_target.IsCustomizable,
+ },
+ WebSocketTarget: null,
+ };
+ let http_res = await fetch(API_ATTACK_HTTP, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(attackReq),
});
+ let json_res = await http_res.json();
+ if (json_res.code != 200) {
+ wui_notif.error(json_res.message);
+ return null;
+ }
+ this.setAttackRunning(attackReq);
+ return json_res;
}
- AttackHttpDelete(name) {
- return __awaiter(this, void 0, void 0, function* () {
- let msg = `Are you sure you want to delete the result: ${name}?`;
- let yes = window.confirm(msg);
- if (!yes) {
- return null;
- }
- let url = API_ATTACK_RESULT + "?name=" + name;
- let fres = yield fetch(url, {
- method: "DELETE",
- });
- let json_res = yield fres.json();
- if (json_res.code != 200) {
- wui_notif.Error(json_res.message);
- return null;
- }
- return json_res;
+ async AttackHttpDelete(name) {
+ let msg = `Are you sure you want to delete the result: ${name}?`;
+ let yes = window.confirm(msg);
+ if (!yes) {
+ return null;
+ }
+ let url = API_ATTACK_RESULT + "?name=" + name;
+ let fres = await fetch(url, {
+ method: "DELETE",
});
+ let json_res = await fres.json();
+ if (json_res.code != 200) {
+ wui_notif.error(json_res.message);
+ return null;
+ }
+ return json_res;
}
- AttackHttpGet(name) {
- return __awaiter(this, void 0, void 0, function* () {
- let url = API_ATTACK_RESULT + "?name=" + name;
- let fres = yield fetch(url);
- let res = yield fres.json();
- if (res.code != 200) {
- wui_notif.Error(res.message);
- }
- return res;
- });
+ async AttackHttpGet(name) {
+ let url = API_ATTACK_RESULT + "?name=" + name;
+ let fres = await fetch(url);
+ let res = await fres.json();
+ if (res.code != 200) {
+ wui_notif.error(res.message);
+ }
+ return res;
}
ContentRenderer(target, http_target, ws_target, nav_link, el) {
let hash = "#/" + target.ID;
@@ -310,75 +295,71 @@ export class Trunks {
this.el_content.innerHTML = "";
this.el_content.appendChild(el);
}
- RunHttp(target, http_target) {
- return __awaiter(this, void 0, void 0, function* () {
- Save(target, http_target, null);
- let req = {
- Target: {
- ID: target.ID,
- Opts: target.Opts,
- Vars: target.Vars,
- Name: "",
- BaseUrl: "",
- HttpTargets: [],
- WebSocketTargets: [],
- },
- HttpTarget: http_target,
- WebSocketTarget: null,
- };
- let http_res = yield fetch(API_TARGET_RUN_HTTP, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(req),
- });
- let json_res = yield http_res.json();
- if (json_res.code != 200) {
- wui_notif.Error(json_res.message);
- return null;
- }
- let res = json_res.data;
- if (res.ResponseStatusCode != 200) {
- wui_notif.Error(`${http_target.Name}: ${res.ResponseStatus}`);
- }
- else {
- wui_notif.Info(`${http_target.Name}: ${res.ResponseStatus}`);
- }
- return res;
+ async RunHttp(target, http_target) {
+ Save(target, http_target, null);
+ let req = {
+ Target: {
+ ID: target.ID,
+ Opts: target.Opts,
+ Vars: target.Vars,
+ Name: "",
+ BaseUrl: "",
+ HttpTargets: [],
+ WebSocketTargets: [],
+ },
+ HttpTarget: http_target,
+ WebSocketTarget: null,
+ };
+ let http_res = await fetch(API_TARGET_RUN_HTTP, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(req),
});
+ let json_res = await http_res.json();
+ if (json_res.code != 200) {
+ wui_notif.error(json_res.message);
+ return null;
+ }
+ let res = json_res.data;
+ if (res.ResponseStatusCode != 200) {
+ wui_notif.error(`${http_target.Name}: ${res.ResponseStatus}`);
+ }
+ else {
+ wui_notif.info(`${http_target.Name}: ${res.ResponseStatus}`);
+ }
+ return res;
}
- RunWebSocket(target, ws_target) {
- return __awaiter(this, void 0, void 0, function* () {
- Save(target, null, ws_target);
- let req = {
- Target: {
- ID: target.ID,
- Opts: target.Opts,
- Vars: target.Vars,
- Name: "",
- BaseUrl: "",
- HttpTargets: [],
- WebSocketTargets: [],
- },
- HttpTarget: null,
- WebSocketTarget: ws_target,
- };
- let fres = yield fetch(API_TARGET_RUN_WEBSOCKET, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(req),
- });
- let json_res = yield fres.json();
- if (json_res.code != 200) {
- wui_notif.Error(json_res.message);
- return null;
- }
- wui_notif.Info(`${ws_target.Name}: success.`);
- return json_res;
+ async RunWebSocket(target, ws_target) {
+ Save(target, null, ws_target);
+ let req = {
+ Target: {
+ ID: target.ID,
+ Opts: target.Opts,
+ Vars: target.Vars,
+ Name: "",
+ BaseUrl: "",
+ HttpTargets: [],
+ WebSocketTargets: [],
+ },
+ HttpTarget: null,
+ WebSocketTarget: ws_target,
+ };
+ let fres = await fetch(API_TARGET_RUN_WEBSOCKET, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(req),
});
+ let json_res = await fres.json();
+ if (json_res.code != 200) {
+ wui_notif.error(json_res.message);
+ return null;
+ }
+ wui_notif.info(`${ws_target.Name}: success.`);
+ return json_res;
}
SetContent(path, el) {
this.el_content.innerHTML = "";
@@ -388,4 +369,3 @@ export class Trunks {
window.location.hash = "#/" + path;
}
}
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1bmtzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidHJ1bmtzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDREQUE0RDtBQUM1RCw0Q0FBNEM7Ozs7Ozs7Ozs7QUFFNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyQyxPQUFPLEVBR04sZ0JBQWdCLEdBWWhCLE1BQU0sZ0JBQWdCLENBQUE7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUVyQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQTtBQUNsRCxNQUFNLGlCQUFpQixHQUFHLDRCQUE0QixDQUFBO0FBQ3RELE1BQU0sZUFBZSxHQUFHLDBCQUEwQixDQUFBO0FBQ2xELE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFBO0FBQzVDLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFBO0FBRTFDLE1BQU0sbUJBQW1CLEdBQUcsOEJBQThCLENBQUE7QUFDMUQsTUFBTSx3QkFBd0IsR0FBRyxtQ0FBbUMsQ0FBQTtBQUVwRSxNQUFNLG9CQUFvQixHQUFHLHVCQUF1QixDQUFBO0FBQ3BELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQTtBQUNwQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUE7QUFDaEMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFBO0FBVTlCLE1BQU0sT0FBTyxNQUFNO0lBdUJsQjtRQWRBLFFBQUcsR0FBeUI7WUFDM0IsYUFBYSxFQUFFLEVBQUU7WUFDakIsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixhQUFhLEVBQUUsQ0FBQztZQUNoQixVQUFVLEVBQUUsRUFBRTtZQUNkLGFBQWEsRUFBRSxFQUFF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 \ No newline at end of file
diff --git a/_www/trunks.ts b/_www/trunks.ts
index 9b90c11..154fa41 100644
--- a/_www/trunks.ts
+++ b/_www/trunks.ts
@@ -1,485 +1,478 @@
// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
// SPDX-License-Identifier: GPL-3.0-or-later
-import { Environment } from "./environment.js"
-import { Save } from "./functions.js"
+import { Environment } from "./environment.js";
+import { Save } from "./functions.js";
import {
- CLASS_NAV_LINK,
- CLASS_NAV_TARGET,
- HASH_ENVIRONMENT,
- AttackResult,
- EnvironmentInterface,
- HttpResponseInterface,
- HttpTargetInterface,
- MapIdTarget,
- MapNumberString,
- NavLinkInterface,
- RunRequestInterface,
- RunResponseInterface,
- TargetInterface,
- WebSocketTargetInterface,
-} from "./interface.js"
-import { NavLinks } from "./nav_links.js"
-import { Target } from "./target.js"
-import { wui_notif } from "./vars.js"
+ HASH_ENVIRONMENT,
+ EnvironmentInterface,
+ HttpResponseInterface,
+ HttpTargetInterface,
+ NavLinkInterface,
+ RunRequestInterface,
+ RunResponseInterface,
+ TargetInterface,
+ WebSocketTargetInterface,
+} from "./interface.js";
+import { NavLinks } from "./nav_links.js";
+import { Target } from "./target.js";
+import { wui_notif } from "./vars.js";
-const API_ATTACK_HTTP = "/_trunks/api/attack/http"
-const API_ATTACK_RESULT = "/_trunks/api/attack/result"
-const API_ENVIRONMENT = "/_trunks/api/environment"
-const API_NAVLINKS = "/_trunks/api/navlinks"
-const API_TARGETS = "/_trunks/api/targets"
+const API_ATTACK_HTTP = "/_trunks/api/attack/http";
+const API_ATTACK_RESULT = "/_trunks/api/attack/result";
+const API_ENVIRONMENT = "/_trunks/api/environment";
+const API_NAVLINKS = "/_trunks/api/navlinks";
+const API_TARGETS = "/_trunks/api/targets";
-const API_TARGET_RUN_HTTP = "/_trunks/api/target/run/http"
-const API_TARGET_RUN_WEBSOCKET = "/_trunks/api/target/run/websocket"
+const API_TARGET_RUN_HTTP = "/_trunks/api/target/run/http";
+const API_TARGET_RUN_WEBSOCKET = "/_trunks/api/target/run/websocket";
-const CLASS_ATTACK_RUNNING = "trunks_attack_running"
-const CLASS_FOOTER = "trunks_footer"
-const CLASS_MAIN = "trunks_main"
-const CLASS_NAV = "trunks_nav"
+const CLASS_ATTACK_RUNNING = "trunks_attack_running";
+const CLASS_FOOTER = "trunks_footer";
+const CLASS_MAIN = "trunks_main";
+const CLASS_NAV = "trunks_nav";
interface MapIDTarget {
- [key: string]: Target
+ [key: string]: Target;
}
interface MapIDNavLink {
- [key: string]: NavLinkInterface
+ [key: string]: NavLinkInterface;
}
export class Trunks {
- el!: HTMLDivElement
- el_attack_running!: HTMLElement
- el_attack_cancel!: HTMLButtonElement
- el_content!: HTMLElement
- el_nav_content!: HTMLElement
- el_nav_links!: HTMLElement
- el_ws_conn_status!: HTMLElement
+ el!: HTMLDivElement;
+ el_attack_running!: HTMLElement;
+ el_attack_cancel!: HTMLButtonElement;
+ el_content!: HTMLElement;
+ el_nav_content!: HTMLElement;
+ el_nav_links!: HTMLElement;
+ el_ws_conn_status!: HTMLElement;
- env: EnvironmentInterface = {
- ListenAddress: "",
- MaxAttackDuration: 0,
- MaxAttackRate: 0,
- ResultsDir: "",
- ResultsSuffix: "",
- AttackRunning: null,
- }
+ env: EnvironmentInterface = {
+ ListenAddress: "",
+ MaxAttackDuration: 0,
+ MaxAttackRate: 0,
+ ResultsDir: "",
+ ResultsSuffix: "",
+ AttackRunning: null,
+ };
- com_env!: Environment
- com_nav_links!: NavLinks
- targets: MapIDTarget = {}
- navLinks: MapIDNavLink = {}
+ com_env!: Environment;
+ com_nav_links!: NavLinks;
+ targets: MapIDTarget = {};
+ navLinks: MapIDNavLink = {};
- constructor() {
- this.el = document.createElement("div")
+ constructor() {
+ this.el = document.createElement("div");
- this.com_env = new Environment(this, this.env)
- this.generateNav()
- this.generateContent()
+ this.com_env = new Environment(this, this.env);
+ this.generateNav();
+ this.generateContent();
- document.body.appendChild(this.el)
- }
+ document.body.appendChild(this.el);
+ }
- private generateNav() {
- let el_nav = document.createElement("div")
- el_nav.classList.add(CLASS_NAV)
+ private generateNav() {
+ let el_nav = document.createElement("div");
+ el_nav.classList.add(CLASS_NAV);
- this.el_ws_conn_status = document.createElement("div")
+ this.el_ws_conn_status = document.createElement("div");
- let fs_attack_running = document.createElement("fieldset")
- let legend = document.createElement("legend")
- legend.innerText = "Attack running"
+ let fs_attack_running = document.createElement("fieldset");
+ let legend = document.createElement("legend");
+ legend.innerText = "Attack running";
- this.el_attack_running = document.createElement("span")
- this.el_attack_running.classList.add(CLASS_ATTACK_RUNNING)
+ this.el_attack_running = document.createElement("span");
+ this.el_attack_running.classList.add(CLASS_ATTACK_RUNNING);
- this.el_nav_content = document.createElement("div")
- this.el_nav_links = document.createElement("div")
+ this.el_nav_content = document.createElement("div");
+ this.el_nav_links = document.createElement("div");
- let el_nav_footer = document.createElement("div")
- el_nav_footer.classList.add(CLASS_FOOTER)
- el_nav_footer.innerHTML = `
+ let el_nav_footer = document.createElement("div");
+ el_nav_footer.classList.add(CLASS_FOOTER);
+ el_nav_footer.innerHTML = `
<div>
<div>Powered by <a href="https://sr.ht/~shulhan/trunks" target="_blank">Trunks</a></div>
<div><a href="/doc/" target="_blank">Documentation</a></div>
</div>
- `
+ `;
- el_nav.appendChild(this.el_ws_conn_status)
+ el_nav.appendChild(this.el_ws_conn_status);
- fs_attack_running.appendChild(legend)
- fs_attack_running.appendChild(this.el_attack_running)
- el_nav.appendChild(fs_attack_running)
+ fs_attack_running.appendChild(legend);
+ fs_attack_running.appendChild(this.el_attack_running);
+ el_nav.appendChild(fs_attack_running);
- el_nav.appendChild(this.com_env.el_nav)
- el_nav.appendChild(this.el_nav_content)
- el_nav.appendChild(document.createElement("hr"))
- el_nav.appendChild(this.el_nav_links)
- el_nav.appendChild(el_nav_footer)
- this.el.appendChild(el_nav)
- }
+ el_nav.appendChild(this.com_env.el_nav);
+ el_nav.appendChild(this.el_nav_content);
+ el_nav.appendChild(document.createElement("hr"));
+ el_nav.appendChild(this.el_nav_links);
+ el_nav.appendChild(el_nav_footer);
+ this.el.appendChild(el_nav);
+ }
- private generateContent() {
- let wrapper = document.createElement("div")
- wrapper.classList.add(CLASS_MAIN)
+ private generateContent() {
+ let wrapper = document.createElement("div");
+ wrapper.classList.add(CLASS_MAIN);
- this.el_attack_cancel = document.createElement("button")
- this.el_attack_cancel.innerHTML = "Cancel"
+ this.el_attack_cancel = document.createElement("button");
+ this.el_attack_cancel.innerHTML = "Cancel";
- this.el_content = document.createElement("div")
- wrapper.appendChild(this.el_content)
+ this.el_content = document.createElement("div");
+ wrapper.appendChild(this.el_content);
- this.el.appendChild(wrapper)
- }
+ this.el.appendChild(wrapper);
+ }
- async Init() {
- await this.apiEnvironmentGet()
- await this.initTargets()
- await this.initNavLinks()
+ async Init() {
+ await this.apiEnvironmentGet();
+ await this.initTargets();
+ await this.initNavLinks();
- this.windowOnHashChange()
- window.onhashchange = () => {
- this.windowOnHashChange()
- }
- }
+ this.windowOnHashChange();
+ window.onhashchange = () => {
+ this.windowOnHashChange();
+ };
+ }
- async apiEnvironmentGet() {
- let http_res = await fetch(API_ENVIRONMENT)
- let res = await http_res.json()
- if (res.code != 200) {
- wui_notif.Error(res.message)
- return
- }
+ async apiEnvironmentGet() {
+ let http_res = await fetch(API_ENVIRONMENT);
+ let res = await http_res.json();
+ if (res.code != 200) {
+ wui_notif.error(res.message);
+ return;
+ }
- this.env = res.data
+ this.env = res.data;
- this.setAttackRunning(this.env.AttackRunning)
- this.com_env.Set(this.env)
- }
+ this.setAttackRunning(this.env.AttackRunning);
+ this.com_env.Set(this.env);
+ }
- async initNavLinks() {
- let http_res = await fetch(API_NAVLINKS)
- let res = await http_res.json()
- if (res.code != 200) {
- wui_notif.Error(res.message)
- return
- }
+ async initNavLinks() {
+ let http_res = await fetch(API_NAVLINKS);
+ let res = await http_res.json();
+ if (res.code != 200) {
+ wui_notif.error(res.message);
+ return;
+ }
- this.com_nav_links = new NavLinks(this, res.data)
- this.el_nav_links.appendChild(this.com_nav_links.el_nav)
+ this.com_nav_links = new NavLinks(this, res.data);
+ this.el_nav_links.appendChild(this.com_nav_links.el_nav);
- for (let nav of res.data) {
- this.navLinks[nav.ID] = nav
- }
- }
+ for (let nav of res.data) {
+ this.navLinks[nav.ID] = nav;
+ }
+ }
- async initTargets() {
- let http_res = await fetch(API_TARGETS)
- let res = await http_res.json()
- if (res.code != 200) {
- wui_notif.Error(res.message)
- return
- }
+ async initTargets() {
+ let http_res = await fetch(API_TARGETS);
+ let res = await http_res.json();
+ if (res.code != 200) {
+ wui_notif.error(res.message);
+ return;
+ }
- let targets = res.data
+ let targets = res.data;
- this.el_nav_content.innerHTML = ""
+ this.el_nav_content.innerHTML = "";
- for (let target of targets) {
- let com_target = new Target(this, target)
- this.targets[target.ID] = com_target
+ for (let target of targets) {
+ let com_target = new Target(this, target);
+ this.targets[target.ID] = com_target;
- this.el_nav_content.appendChild(com_target.el_nav)
- }
- }
+ this.el_nav_content.appendChild(com_target.el_nav);
+ }
+ }
- private async onClickAttackCancel() {
- let fres = await fetch(API_ATTACK_HTTP, {
- method: "DELETE",
- })
- let json_res = await fres.json()
- if (json_res.code != 200) {
- wui_notif.Error(json_res.message)
- return null
- }
- wui_notif.Info(json_res.message)
- this.setAttackRunning(null)
- return json_res
- }
+ private async onClickAttackCancel() {
+ let fres = await fetch(API_ATTACK_HTTP, {
+ method: "DELETE",
+ });
+ let json_res = await fres.json();
+ if (json_res.code != 200) {
+ wui_notif.error(json_res.message);
+ return null;
+ }
+ wui_notif.info(json_res.message);
+ this.setAttackRunning(null);
+ return json_res;
+ }
- private windowOnHashChange() {
- // Parse the location hash.
- let path = window.location.hash.substring(1)
- let paths = path.split("/")
- if (paths.length < 2) {
- return
- }
+ private windowOnHashChange() {
+ // Parse the location hash.
+ let path = window.location.hash.substring(1);
+ let paths = path.split("/");
+ if (paths.length < 2) {
+ return;
+ }
- if (paths[1] === HASH_ENVIRONMENT) {
- this.el_content.innerHTML = ""
- this.el_content.appendChild(this.com_env.el_content)
- return
- }
+ if (paths[1] === HASH_ENVIRONMENT) {
+ this.el_content.innerHTML = "";
+ this.el_content.appendChild(this.com_env.el_content);
+ return;
+ }
- console.log("paths: ", paths)
+ console.log("paths: ", paths);
- let el: HTMLElement | null
- let target = this.targets[paths[1]]
- switch (paths.length) {
- case 2:
- case 3:
- if (target) {
- this.el_content.innerHTML = ""
- this.el_content.appendChild(
- target.el_content,
- )
- el = document.getElementById(paths[1])
- if (el) {
- el.scrollIntoView()
- }
- }
- break
+ let el: HTMLElement | null;
+ if (!paths[1]) {
+ return;
+ }
+ let target = this.targets[paths[1]];
+ if (!target) {
+ return;
+ }
+ switch (paths.length) {
+ case 2:
+ case 3:
+ if (target) {
+ this.el_content.innerHTML = "";
+ this.el_content.appendChild(target.el_content);
+ el = document.getElementById(paths[1]!);
+ if (el) {
+ el.scrollIntoView();
+ }
+ }
+ break;
- case 4:
- if (paths[2] === "http") {
- this.el_content.innerHTML = ""
- this.el_content.appendChild(
- target.el_content,
- )
- } else if (paths[2] === "ws") {
- this.el_content.innerHTML = ""
- this.el_content.appendChild(
- target.el_content,
- )
- } else if (paths[2] === "link") {
- let nav = this.navLinks[paths[3]]
- this.el_content.innerHTML = ""
- this.com_nav_links.open(nav)
- }
- el = document.getElementById(paths[3])
- if (el) {
- el.scrollIntoView()
- }
- break
- }
- }
+ case 4:
+ if (paths[2] === "http") {
+ this.el_content.innerHTML = "";
+ this.el_content.appendChild(target.el_content);
+ } else if (paths[2] === "ws") {
+ this.el_content.innerHTML = "";
+ this.el_content.appendChild(target.el_content);
+ } else if (paths[2] === "link") {
+ if (paths[3]) {
+ let nav = this.navLinks[paths[3]];
+ if (nav) {
+ this.el_content.innerHTML = "";
+ this.com_nav_links.open(nav);
+ }
+ }
+ }
+ el = document.getElementById(paths[3]!);
+ if (el) {
+ el.scrollIntoView();
+ }
+ break;
+ }
+ }
- setAttackRunning(runRequest: RunRequestInterface | null) {
- if (!runRequest) {
- this.el_attack_running.innerHTML = "-"
- return
- }
- if (!runRequest.Target || !runRequest.HttpTarget) {
- this.el_attack_running.innerHTML = "-"
- return
- }
- this.el_attack_running.innerHTML = `
+ setAttackRunning(runRequest: RunRequestInterface | null) {
+ if (!runRequest) {
+ this.el_attack_running.innerHTML = "-";
+ return;
+ }
+ if (!runRequest.Target || !runRequest.HttpTarget) {
+ this.el_attack_running.innerHTML = "-";
+ return;
+ }
+ this.el_attack_running.innerHTML = `
${runRequest.Target.Name} <br/>
/ ${runRequest.HttpTarget.Name} <br/>
<br/>
- `
- this.el_attack_cancel.onclick = () => {
- this.onClickAttackCancel()
- }
- this.el_attack_running.appendChild(this.el_attack_cancel)
+ `;
+ this.el_attack_cancel.onclick = () => {
+ this.onClickAttackCancel();
+ };
+ this.el_attack_running.appendChild(this.el_attack_cancel);
- wui_notif.Info(
- `Attacking "${runRequest.Target.Name}/${runRequest.HttpTarget.Name}" ...`,
- )
- }
+ wui_notif.info(
+ `Attacking "${runRequest.Target.Name}/${runRequest.HttpTarget.Name}" ...`,
+ );
+ }
- async AttackHttp(
- target: TargetInterface,
- http_target: HttpTargetInterface,
- ): Promise<HttpResponseInterface | null> {
- Save(target, http_target, null)
+ async AttackHttp(
+ target: TargetInterface,
+ http_target: HttpTargetInterface,
+ ): Promise<HttpResponseInterface | null> {
+ Save(target, http_target, null);
- let attackReq: RunRequestInterface = {
- Target: {
- ID: target.ID,
- Opts: target.Opts,
- Vars: target.Vars,
- Name: target.Name,
- BaseUrl: target.BaseUrl,
- HttpTargets: [],
- WebSocketTargets: [],
- },
- HttpTarget: {
- ID: http_target.ID,
- Name: http_target.Name,
- Method: http_target.Method,
- Path: http_target.Path,
- RequestType: http_target.RequestType,
- Headers: http_target.Headers,
- Params: http_target.Params,
- Results: [],
- AllowAttack: http_target.AllowAttack,
- IsCustomizable: http_target.IsCustomizable,
- },
- WebSocketTarget: null,
- }
+ let attackReq: RunRequestInterface = {
+ Target: {
+ ID: target.ID,
+ Opts: target.Opts,
+ Vars: target.Vars,
+ Name: target.Name,
+ BaseUrl: target.BaseUrl,
+ HttpTargets: [],
+ WebSocketTargets: [],
+ },
+ HttpTarget: {
+ ID: http_target.ID,
+ Name: http_target.Name,
+ Method: http_target.Method,
+ Path: http_target.Path,
+ RequestType: http_target.RequestType,
+ Headers: http_target.Headers,
+ Params: http_target.Params,
+ Results: [],
+ AllowAttack: http_target.AllowAttack,
+ IsCustomizable: http_target.IsCustomizable,
+ },
+ WebSocketTarget: null,
+ };
- let http_res = await fetch(API_ATTACK_HTTP, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(attackReq),
- })
- let json_res = await http_res.json()
- if (json_res.code != 200) {
- wui_notif.Error(json_res.message)
- return null
- }
+ let http_res = await fetch(API_ATTACK_HTTP, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(attackReq),
+ });
+ let json_res = await http_res.json();
+ if (json_res.code != 200) {
+ wui_notif.error(json_res.message);
+ return null;
+ }
- this.setAttackRunning(attackReq)
+ this.setAttackRunning(attackReq);
- return json_res
- }
+ return json_res;
+ }
- async AttackHttpDelete(
- name: string,
- ): Promise<HttpResponseInterface | null> {
- let msg = `Are you sure you want to delete the result: ${name}?`
- let yes = window.confirm(msg)
- if (!yes) {
- return null
- }
+ async AttackHttpDelete(name: string): Promise<HttpResponseInterface | null> {
+ let msg = `Are you sure you want to delete the result: ${name}?`;
+ let yes = window.confirm(msg);
+ if (!yes) {
+ return null;
+ }
- let url = API_ATTACK_RESULT + "?name=" + name
- let fres = await fetch(url, {
- method: "DELETE",
- })
- let json_res = await fres.json()
- if (json_res.code != 200) {
- wui_notif.Error(json_res.message)
- return null
- }
- return json_res
- }
+ let url = API_ATTACK_RESULT + "?name=" + name;
+ let fres = await fetch(url, {
+ method: "DELETE",
+ });
+ let json_res = await fres.json();
+ if (json_res.code != 200) {
+ wui_notif.error(json_res.message);
+ return null;
+ }
+ return json_res;
+ }
- async AttackHttpGet(name: string): Promise<HttpResponseInterface> {
- let url = API_ATTACK_RESULT + "?name=" + name
- let fres = await fetch(url)
- let res = await fres.json()
- if (res.code != 200) {
- wui_notif.Error(res.message)
- }
- return res
- }
+ async AttackHttpGet(name: string): Promise<HttpResponseInterface> {
+ let url = API_ATTACK_RESULT + "?name=" + name;
+ let fres = await fetch(url);
+ let res = await fres.json();
+ if (res.code != 200) {
+ wui_notif.error(res.message);
+ }
+ return res;
+ }
- ContentRenderer(
- target: TargetInterface,
- http_target: HttpTargetInterface,
- ws_target: WebSocketTargetInterface,
- nav_link: NavLinkInterface,
- el: HTMLElement,
- ): void {
- let hash = "#/" + target.ID
- if (http_target) {
- hash += "/http/" + http_target.ID
- } else if (ws_target) {
- hash += "/ws/" + ws_target.ID
- } else if (nav_link) {
- hash += "/link/" + nav_link.ID
- }
- window.location.hash = hash
+ ContentRenderer(
+ target: TargetInterface,
+ http_target: HttpTargetInterface,
+ ws_target: WebSocketTargetInterface,
+ nav_link: NavLinkInterface,
+ el: HTMLElement,
+ ): void {
+ let hash = "#/" + target.ID;
+ if (http_target) {
+ hash += "/http/" + http_target.ID;
+ } else if (ws_target) {
+ hash += "/ws/" + ws_target.ID;
+ } else if (nav_link) {
+ hash += "/link/" + nav_link.ID;
+ }
+ window.location.hash = hash;
- this.el_content.innerHTML = ""
- this.el_content.appendChild(el)
- }
+ this.el_content.innerHTML = "";
+ this.el_content.appendChild(el);
+ }
- async RunHttp(
- target: TargetInterface,
- http_target: HttpTargetInterface,
- ): Promise<RunResponseInterface | null> {
- Save(target, http_target, null)
+ async RunHttp(
+ target: TargetInterface,
+ http_target: HttpTargetInterface,
+ ): Promise<RunResponseInterface | null> {
+ Save(target, http_target, null);
- let req: RunRequestInterface = {
- Target: {
- ID: target.ID,
- Opts: target.Opts,
- Vars: target.Vars,
- Name: "",
- BaseUrl: "",
- HttpTargets: [],
- WebSocketTargets: [],
- },
- HttpTarget: http_target,
- WebSocketTarget: null,
- }
+ let req: RunRequestInterface = {
+ Target: {
+ ID: target.ID,
+ Opts: target.Opts,
+ Vars: target.Vars,
+ Name: "",
+ BaseUrl: "",
+ HttpTargets: [],
+ WebSocketTargets: [],
+ },
+ HttpTarget: http_target,
+ WebSocketTarget: null,
+ };
- let http_res = await fetch(API_TARGET_RUN_HTTP, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(req),
- })
+ let http_res = await fetch(API_TARGET_RUN_HTTP, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(req),
+ });
- let json_res = await http_res.json()
- if (json_res.code != 200) {
- wui_notif.Error(json_res.message)
- return null
- }
+ let json_res = await http_res.json();
+ if (json_res.code != 200) {
+ wui_notif.error(json_res.message);
+ return null;
+ }
- let res = json_res.data as RunResponseInterface
+ let res = json_res.data as RunResponseInterface;
- if (res.ResponseStatusCode != 200) {
- wui_notif.Error(
- `${http_target.Name}: ${res.ResponseStatus}`,
- )
- } else {
- wui_notif.Info(
- `${http_target.Name}: ${res.ResponseStatus}`,
- )
- }
+ if (res.ResponseStatusCode != 200) {
+ wui_notif.error(`${http_target.Name}: ${res.ResponseStatus}`);
+ } else {
+ wui_notif.info(`${http_target.Name}: ${res.ResponseStatus}`);
+ }
- return res
- }
+ return res;
+ }
- async RunWebSocket(
- target: TargetInterface,
- ws_target: WebSocketTargetInterface,
- ): Promise<HttpResponseInterface | null> {
- Save(target, null, ws_target)
+ async RunWebSocket(
+ target: TargetInterface,
+ ws_target: WebSocketTargetInterface,
+ ): Promise<HttpResponseInterface | null> {
+ Save(target, null, ws_target);
- let req: RunRequestInterface = {
- Target: {
- ID: target.ID,
- Opts: target.Opts,
- Vars: target.Vars,
- Name: "",
- BaseUrl: "",
- HttpTargets: [],
- WebSocketTargets: [],
- },
- HttpTarget: null,
- WebSocketTarget: ws_target,
- }
+ let req: RunRequestInterface = {
+ Target: {
+ ID: target.ID,
+ Opts: target.Opts,
+ Vars: target.Vars,
+ Name: "",
+ BaseUrl: "",
+ HttpTargets: [],
+ WebSocketTargets: [],
+ },
+ HttpTarget: null,
+ WebSocketTarget: ws_target,
+ };
- let fres = await fetch(API_TARGET_RUN_WEBSOCKET, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(req),
- })
+ let fres = await fetch(API_TARGET_RUN_WEBSOCKET, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(req),
+ });
- let json_res = await fres.json()
- if (json_res.code != 200) {
- wui_notif.Error(json_res.message)
- return null
- }
- wui_notif.Info(`${ws_target.Name}: success.`)
- return json_res
- }
+ let json_res = await fres.json();
+ if (json_res.code != 200) {
+ wui_notif.error(json_res.message);
+ return null;
+ }
+ wui_notif.info(`${ws_target.Name}: success.`);
+ return json_res;
+ }
- SetContent(path: string, el: HTMLElement | null): void {
- this.el_content.innerHTML = ""
+ SetContent(path: string, el: HTMLElement | null): void {
+ this.el_content.innerHTML = "";
- if (el) {
- this.el_content.appendChild(el)
- }
+ if (el) {
+ this.el_content.appendChild(el);
+ }
- window.location.hash = "#/" + path
- }
+ window.location.hash = "#/" + path;
+ }
}
diff --git a/_www/tsconfig.json b/_www/tsconfig.json
index 1fe9bae..217e570 100644
--- a/_www/tsconfig.json
+++ b/_www/tsconfig.json
@@ -1,12 +1,25 @@
{
- "compilerOptions": {
- "esModuleInterop": true,
- "inlineSourceMap": true,
- "lib": ["es2015", "dom", "es2015.promise"],
- "module": "es2015",
- "moduleResolution": "node",
- "strict": true,
- "target": "es2015"
- },
- "exclude": ["doc"]
+ "compilerOptions": {
+ "target": "es2018",
+ "module": "es2020",
+ "isolatedModules": true,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "strict": true,
+ "noImplicitAny": true,
+ "noImplicitThis": true,
+ "useUnknownInCatchVariables": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "exactOptionalPropertyTypes": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedIndexedAccess": true,
+ "noImplicitOverride": true,
+ "noPropertyAccessFromIndexSignature": true,
+ "skipLibCheck": true,
+ },
+ "files": [
+ "index.ts"
+ ]
}
diff --git a/_www/vars.js b/_www/vars.js
index 5cc2559..9639fc3 100644
--- a/_www/vars.js
+++ b/_www/vars.js
@@ -2,4 +2,3 @@
// SPDX-License-Identifier: GPL-3.0-or-later
import { WuiNotif } from "./wui/notif/notif.js";
export let wui_notif = new WuiNotif();
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZhcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNERBQTREO0FBQzVELDRDQUE0QztBQUU1QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFL0MsTUFBTSxDQUFDLElBQUksU0FBUyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUEifQ== \ No newline at end of file
diff --git a/_www/vars.ts b/_www/vars.ts
index b613499..a175016 100644
--- a/_www/vars.ts
+++ b/_www/vars.ts
@@ -1,6 +1,6 @@
// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
// SPDX-License-Identifier: GPL-3.0-or-later
-import { WuiNotif } from "./wui/notif/notif.js"
+import { WuiNotif } from "./wui/notif/notif.js";
-export let wui_notif = new WuiNotif()
+export let wui_notif = new WuiNotif();
diff --git a/_www/ws_target.js b/_www/ws_target.js
index b1425f5..d7dc1bd 100644
--- a/_www/ws_target.js
+++ b/_www/ws_target.js
@@ -1,14 +1,5 @@
// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
// SPDX-License-Identifier: GPL-3.0-or-later
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
import { GenerateFormInput, LoadWsTargetHeader, LoadWsTargetParam, } from "./functions.js";
const CLASS_WS_TARGET = "ws_target";
const CLASS_WS_TARGET_ACTIONS = "ws_target_actions";
@@ -72,8 +63,7 @@ export class WebSocketTarget {
let title = document.createElement("h4");
title.innerText = "Headers";
wrapper.appendChild(title);
- for (let key in this.opts.Headers) {
- let fi = this.opts.Headers[key];
+ for (const [key, fi] of Object.entries(this.opts.Headers)) {
fi.value = LoadWsTargetHeader(this.target, this.opts, key);
GenerateFormInput(wrapper, fi);
}
@@ -91,8 +81,7 @@ export class WebSocketTarget {
let title = document.createElement("legend");
title.innerText = "Parameters";
wrapper.appendChild(title);
- for (let key in this.opts.Params) {
- let fi = this.opts.Params[key];
+ for (const [key, fi] of Object.entries(this.opts.Params)) {
fi.value = LoadWsTargetParam(this.target, this.opts, key);
GenerateFormInput(wrapper, fi);
}
@@ -114,19 +103,14 @@ export class WebSocketTarget {
wrapper.appendChild(this.el_out_response);
parent.appendChild(wrapper);
}
- onClickClearOutput() {
- return __awaiter(this, void 0, void 0, function* () {
- this.el_out_response.innerText = "";
- });
+ async onClickClearOutput() {
+ this.el_out_response.innerText = "";
}
- onClickRun() {
- return __awaiter(this, void 0, void 0, function* () {
- let res = yield this.trunks.RunWebSocket(this.target, this.opts);
- if (!res) {
- return;
- }
- this.el_out_response.innerText = JSON.stringify(res.data, null, 2);
- });
+ async onClickRun() {
+ let res = await this.trunks.RunWebSocket(this.target, this.opts);
+ if (!res) {
+ return;
+ }
+ this.el_out_response.innerText = JSON.stringify(res.data, null, 2);
}
}
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3NfdGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid3NfdGFyZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDREQUE0RDtBQUM1RCw0Q0FBNEM7Ozs7Ozs7Ozs7QUFHNUMsT0FBTyxFQUNOLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsaUJBQWlCLEdBQ2pCLE1BQU0sZ0JBQWdCLENBQUE7QUFTdkIsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFBO0FBQ25DLE1BQU0sdUJBQXVCLEdBQUcsbUJBQW1CLENBQUE7QUFDbkQsTUFBTSxxQkFBcUIsR0FBRyxpQkFBaUIsQ0FBQTtBQUMvQyxNQUFNLDRCQUE0QixHQUFHLHdCQUF3QixDQUFBO0FBQzdELE1BQU0sMkJBQTJCLEdBQUcsdUJBQXVCLENBQUE7QUFDM0QsTUFBTSx3QkFBd0IsR0FBRyxvQkFBb0IsQ0FBQTtBQUNyRCxNQUFNLHVCQUF1QixHQUFHLG1CQUFtQixDQUFBO0FBRW5ELE1BQU0sT0FBTyxlQUFlO0lBTTNCLFlBQ1EsTUFBdUIsRUFDdkIsTUFBdUIsRUFDdkIsSUFBOEI7UUFGOUIsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFDdkIsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFDdkIsU0FBSSxHQUFKLElBQUksQ0FBMEI7UUFSdEMsT0FBRSxHQUFnQixRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQy9DLGtCQUFhLEdBQXNCLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbkUscUJBQWdCLEdBQWdCLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDN0Qsb0JBQWUsR0FBZ0IsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQU8zRCxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcs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 \ No newline at end of file
diff --git a/_www/ws_target.ts b/_www/ws_target.ts
index 4a92e2e..928300b 100644
--- a/_www/ws_target.ts
+++ b/_www/ws_target.ts
@@ -1,177 +1,157 @@
// SPDX-FileCopyrightText: 2021 M. Shulhan <ms@kilabit.info>
// SPDX-License-Identifier: GPL-3.0-or-later
-import { WuiInputString, WuiInputStringOpts } from "./wui/input/string.js"
import {
- GenerateFormInput,
- LoadWsTargetHeader,
- LoadWsTargetParam,
-} from "./functions.js"
+ GenerateFormInput,
+ LoadWsTargetHeader,
+ LoadWsTargetParam,
+} from "./functions.js";
import {
- CLASS_INPUT,
- CLASS_INPUT_LABEL,
- TargetInterface,
- TrunksInterface,
- WebSocketTargetInterface,
-} from "./interface.js"
+ TargetInterface,
+ TrunksInterface,
+ WebSocketTargetInterface,
+} from "./interface.js";
-const CLASS_WS_TARGET = "ws_target"
-const CLASS_WS_TARGET_ACTIONS = "ws_target_actions"
-const CLASS_WS_TARGET_INPUT = "ws_target_input"
-const CLASS_WS_TARGET_INPUT_HEADER = "ws_target_input_header"
-const CLASS_WS_TARGET_INPUT_PARAM = "ws_target_input_param"
-const CLASS_WS_TARGET_OUT_MONO = "ws_target_out_mono"
-const CLASS_WS_TARGET_OUT_RUN = "ws_target_out_run"
+const CLASS_WS_TARGET = "ws_target";
+const CLASS_WS_TARGET_ACTIONS = "ws_target_actions";
+const CLASS_WS_TARGET_INPUT = "ws_target_input";
+const CLASS_WS_TARGET_INPUT_HEADER = "ws_target_input_header";
+const CLASS_WS_TARGET_INPUT_PARAM = "ws_target_input_param";
+const CLASS_WS_TARGET_OUT_MONO = "ws_target_out_mono";
+const CLASS_WS_TARGET_OUT_RUN = "ws_target_out_run";
export class WebSocketTarget {
- el: HTMLElement = document.createElement("div")
- el_button_run: HTMLButtonElement = document.createElement("button")
- el_request_input: HTMLElement = document.createElement("div")
- el_out_response: HTMLElement = document.createElement("pre")
+ el: HTMLElement = document.createElement("div");
+ el_button_run: HTMLButtonElement = document.createElement("button");
+ el_request_input: HTMLElement = document.createElement("div");
+ el_out_response: HTMLElement = document.createElement("pre");
- constructor(
- public trunks: TrunksInterface,
- public target: TargetInterface,
- public opts: WebSocketTargetInterface,
- ) {
- this.el.id = opts.ID
- this.el.classList.add(CLASS_WS_TARGET)
+ constructor(
+ public trunks: TrunksInterface,
+ public target: TargetInterface,
+ public opts: WebSocketTargetInterface,
+ ) {
+ this.el.id = opts.ID;
+ this.el.classList.add(CLASS_WS_TARGET);
- let el_title = document.createElement("h3")
- el_title.innerText = opts.Name
- this.el.appendChild(el_title)
+ let el_title = document.createElement("h3");
+ el_title.innerText = opts.Name;
+ this.el.appendChild(el_title);
- this.generateActions(el_title)
- this.generateHint(this.el)
- this.generateInput(this.el)
- this.generateOutput(this.el)
- }
+ this.generateActions(el_title);
+ this.generateHint(this.el);
+ this.generateInput(this.el);
+ this.generateOutput(this.el);
+ }
- private generateActions(parent: HTMLElement) {
- let el_actions = document.createElement("span")
- el_actions.classList.add(CLASS_WS_TARGET_ACTIONS)
+ private generateActions(parent: HTMLElement) {
+ let el_actions = document.createElement("span");
+ el_actions.classList.add(CLASS_WS_TARGET_ACTIONS);
- this.el_button_run.innerText = "Run"
- this.el_button_run.onclick = () => {
- this.onClickRun()
- }
- el_actions.appendChild(this.el_button_run)
+ this.el_button_run.innerText = "Run";
+ this.el_button_run.onclick = () => {
+ this.onClickRun();
+ };
+ el_actions.appendChild(this.el_button_run);
- parent.appendChild(el_actions)
- }
+ parent.appendChild(el_actions);
+ }
- private generateHint(parent: HTMLElement) {
- if (!this.opts.Hint) {
- return
- }
- let el_hint = document.createElement("p")
- el_hint.innerHTML = this.opts.Hint
- parent.appendChild(el_hint)
- }
+ private generateHint(parent: HTMLElement) {
+ if (!this.opts.Hint) {
+ return;
+ }
+ let el_hint = document.createElement("p");
+ el_hint.innerHTML = this.opts.Hint;
+ parent.appendChild(el_hint);
+ }
- private generateInput(parent: HTMLElement) {
- this.el_request_input.classList.add(CLASS_WS_TARGET_INPUT)
+ private generateInput(parent: HTMLElement) {
+ this.el_request_input.classList.add(CLASS_WS_TARGET_INPUT);
- this.generateRequestHeaders(this.el_request_input)
- this.generateRequestParameters(this.el_request_input)
+ this.generateRequestHeaders(this.el_request_input);
+ this.generateRequestParameters(this.el_request_input);
- parent.appendChild(this.el_request_input)
- }
+ parent.appendChild(this.el_request_input);
+ }
- private generateRequestHeaders(parent: HTMLElement) {
- if (!this.opts.Headers) {
- return
- }
- if (Object.keys(this.opts.Headers).length === 0) {
- return
- }
+ private generateRequestHeaders(parent: HTMLElement) {
+ if (!this.opts.Headers) {
+ return;
+ }
+ if (Object.keys(this.opts.Headers).length === 0) {
+ return;
+ }
- let wrapper = document.createElement("div")
- wrapper.classList.add(CLASS_WS_TARGET_INPUT_HEADER)
+ let wrapper = document.createElement("div");
+ wrapper.classList.add(CLASS_WS_TARGET_INPUT_HEADER);
- let title = document.createElement("h4")
- title.innerText = "Headers"
- wrapper.appendChild(title)
+ let title = document.createElement("h4");
+ title.innerText = "Headers";
+ wrapper.appendChild(title);
- for (let key in this.opts.Headers) {
- let fi = this.opts.Headers[key]
- fi.value = LoadWsTargetHeader(
- this.target,
- this.opts,
- key,
- )
- GenerateFormInput(wrapper, fi)
- }
+ for (const [key, fi] of Object.entries(this.opts.Headers)) {
+ fi.value = LoadWsTargetHeader(this.target, this.opts, key);
+ GenerateFormInput(wrapper, fi);
+ }
- parent.appendChild(wrapper)
- }
+ parent.appendChild(wrapper);
+ }
- private generateRequestParameters(parent: HTMLElement) {
- if (!this.opts.Params) {
- return
- }
- if (Object.keys(this.opts.Params).length === 0) {
- return
- }
+ private generateRequestParameters(parent: HTMLElement) {
+ if (!this.opts.Params) {
+ return;
+ }
+ if (Object.keys(this.opts.Params).length === 0) {
+ return;
+ }
- let wrapper = document.createElement("fieldset")
- wrapper.classList.add(CLASS_WS_TARGET_INPUT_PARAM)
+ let wrapper = document.createElement("fieldset");
+ wrapper.classList.add(CLASS_WS_TARGET_INPUT_PARAM);
- let title = document.createElement("legend")
- title.innerText = "Parameters"
- wrapper.appendChild(title)
+ let title = document.createElement("legend");
+ title.innerText = "Parameters";
+ wrapper.appendChild(title);
- for (let key in this.opts.Params) {
- let fi = this.opts.Params[key]
- fi.value = LoadWsTargetParam(
- this.target,
- this.opts,
- key,
- )
- GenerateFormInput(wrapper, fi)
- }
+ for (const [key, fi] of Object.entries(this.opts.Params)) {
+ fi.value = LoadWsTargetParam(this.target, this.opts, key);
+ GenerateFormInput(wrapper, fi);
+ }
- parent.appendChild(wrapper)
- }
+ parent.appendChild(wrapper);
+ }
- private generateOutput(parent: HTMLElement) {
- let wrapper = document.createElement("fieldset")
- wrapper.classList.add(CLASS_WS_TARGET_OUT_RUN)
+ private generateOutput(parent: HTMLElement) {
+ let wrapper = document.createElement("fieldset");
+ wrapper.classList.add(CLASS_WS_TARGET_OUT_RUN);
- let title = document.createElement("legend")
- title.innerText = "Run output"
+ let title = document.createElement("legend");
+ title.innerText = "Run output";
- let btn_clear = document.createElement("button")
- btn_clear.innerText = "Clear"
- btn_clear.onclick = () => {
- this.onClickClearOutput()
- }
- title.appendChild(btn_clear)
+ let btn_clear = document.createElement("button");
+ btn_clear.innerText = "Clear";
+ btn_clear.onclick = () => {
+ this.onClickClearOutput();
+ };
+ title.appendChild(btn_clear);
- this.el_out_response.classList.add(CLASS_WS_TARGET_OUT_MONO)
+ this.el_out_response.classList.add(CLASS_WS_TARGET_OUT_MONO);
- wrapper.appendChild(title)
- wrapper.appendChild(this.el_out_response)
+ wrapper.appendChild(title);
+ wrapper.appendChild(this.el_out_response);
- parent.appendChild(wrapper)
- }
+ parent.appendChild(wrapper);
+ }
- private async onClickClearOutput() {
- this.el_out_response.innerText = ""
- }
+ private async onClickClearOutput() {
+ this.el_out_response.innerText = "";
+ }
- private async onClickRun() {
- let res = await this.trunks.RunWebSocket(
- this.target,
- this.opts,
- )
- if (!res) {
- return
- }
- this.el_out_response.innerText = JSON.stringify(
- res.data,
- null,
- 2,
- )
- }
+ private async onClickRun() {
+ let res = await this.trunks.RunWebSocket(this.target, this.opts);
+ if (!res) {
+ return;
+ }
+ this.el_out_response.innerText = JSON.stringify(res.data, null, 2);
+ }
}
diff --git a/_www/wui b/_www/wui
-Subproject a798d320563a1f9061a572e2b00537b38e34c4f
+Subproject 65eb8e99d6dfdfdf419254cbb7e26b7afe42669