test scripting changes
All checks were successful
Build and Deploy MITM Webserver / build (push) Successful in 9s

This commit is contained in:
2026-03-01 01:21:27 +01:00
parent 8fe9a06bfa
commit caf6799dd2
5 changed files with 474 additions and 158 deletions

View File

@@ -9,7 +9,15 @@ import {
InterfaceInfo,
RouteInfo,
} from '../types/network';
import { EnableRequest, ScriptInfo } from '../types/scripting';
import {
DeleteResult,
EnableRequest,
OperationResult,
ScriptInfo,
ScriptUploadResponse,
StatusForNameResponse,
UnitStatus,
} from '../types/scripting';
import { SnifferStatusResponse } from '../types/sniffer';
const BASE = 'http://mitm.lan/api';
@@ -17,7 +25,7 @@ const BASE = 'http://mitm.lan/api';
export const api = axios.create({
baseURL: BASE,
headers: { 'Content-Type': 'application/json' },
timeout: 10000,
timeout: 20000,
});
// Normalize FastAPI errors here
@@ -160,13 +168,13 @@ export const execFirewallRaw = async (cmd: string): Promise<ExecResult> => {
Scripts
------------------------- */
export const fetchScriptsStatusAll = async (): Promise<any> => {
const res = await api.get('/scripts/scripts/status');
export const fetchScriptsStatusAll = async (): Promise<Record<string, UnitStatus>> => {
const res = await api.get<Record<string, UnitStatus>>('/scripts/scripts/status');
return res.data;
};
export const fetchScriptStatusForName = async (name: string): Promise<any> => {
const res = await api.get(`/scripts/scripts/${encodeURIComponent(name)}/status`);
export const fetchScriptStatusForName = async (name: string): Promise<StatusForNameResponse> => {
const res = await api.get<StatusForNameResponse>(`/scripts/scripts/${encodeURIComponent(name)}/status`);
return res.data;
};
@@ -179,38 +187,40 @@ export const uploadScript = async (opts: {
name: string;
script: File | Blob;
requirements?: File | Blob | null;
}): Promise<ScriptInfo> => {
}): Promise<ScriptUploadResponse> => {
const fd = new FormData();
fd.append('name', opts.name);
fd.append('script', opts.script);
if (opts.requirements) fd.append('requirements', opts.requirements as Blob);
// axios will set multipart/form-data boundary automatically when FormData passed
const res = await api.post<ScriptInfo>('/scripts/scripts', fd, {
const res = await api.post<ScriptUploadResponse>('/scripts/scripts', fd, {
headers: { 'Content-Type': 'multipart/form-data' },
});
return res.data;
};
export const downloadScript = async (name: string): Promise<any> => {
const res = await api.get(`/scripts/scripts/${encodeURIComponent(name)}`);
return res.data;
export const downloadScript = async (name: string): Promise<Blob> => {
// expect the backend to return a FileResponse. request as blob to trigger browser download handling.
const res = await api.get(`/scripts/scripts/${encodeURIComponent(name)}`, { responseType: 'blob' });
return res.data as Blob;
};
export const deleteScript = async (name: string, qnum?: number | null): Promise<any> => {
export const deleteScript = async (name: string, qnum?: number | null): Promise<DeleteResult> => {
const params: Record<string, any> = {};
if (typeof qnum !== 'undefined') params.qnum = qnum;
const res = await api.delete(`/scripts/scripts/${encodeURIComponent(name)}`, { params });
if (typeof qnum !== 'undefined' && qnum !== null) params.qnum = qnum;
const res = await api.delete<DeleteResult>(`/scripts/scripts/${encodeURIComponent(name)}`, { params });
return res.data;
};
export const enableScript = async (name: string, req: EnableRequest): Promise<any> => {
const res = await api.post(`/scripts/scripts/${encodeURIComponent(name)}/enable`, req);
export const enableScript = async (name: string, req: EnableRequest): Promise<OperationResult> => {
const res = await api.post<OperationResult>(`/scripts/scripts/${encodeURIComponent(name)}/enable`, req);
return res.data;
};
export const disableScript = async (name: string, qnum: number): Promise<any> => {
const res = await api.post(`/scripts/scripts/${encodeURIComponent(name)}/disable`, null, {
export const disableScript = async (name: string, qnum: number): Promise<OperationResult> => {
// backend expects qnum as query param (POST body null)
const res = await api.post<OperationResult>(`/scripts/scripts/${encodeURIComponent(name)}/disable`, null, {
params: { qnum },
});
return res.data;