Files
firegex-traffic-viewer/frontend/src/components/Firewall/utils.ts
Domingo Dirutigliano e31796b249 push partial docs
2025-03-05 10:02:15 +01:00

94 lines
2.1 KiB
TypeScript

import { useQuery } from "@tanstack/react-query"
import { ServerResponse } from "../../js/models"
import { getapi, postapi, putapi } from "../../js/utils"
export enum Protocol {
TCP = "tcp",
UDP = "udp",
BOTH = "both",
ANY = "any"
}
export enum ActionType {
ACCEPT = "accept",
DROP = "drop",
REJECT = "reject"
}
export enum RuleMode {
OUT = "out",
IN = "in",
FORWARD = "forward"
}
export enum Table {
MANGLE = "mangle",
FILTER = "filter",
}
export type Rule = {
active: boolean
name:string,
proto: Protocol,
src: string,
dst: string,
port_src_from: number,
port_dst_from: number,
port_src_to: number,
port_dst_to: number,
action: ActionType,
mode: RuleMode,
table: Table
}
export type RuleInfo = {
rules: Rule[]
policy: ActionType,
enabled: boolean
}
export type RuleAddForm = {
rules: Rule[]
policy: ActionType
}
export type FirewallSettings = {
keep_rules: boolean,
allow_loopback: boolean,
allow_established: boolean,
allow_icmp: boolean,
multicast_dns: boolean,
allow_upnp: boolean,
drop_invalid: boolean,
allow_dhcp: boolean
}
export type ServerResponseListed = {
status:(ServerResponse & {rule_id:number})[]|string,
}
export const rulesQueryKey = ["firewall","rules"]
export const firewallRulesQuery = () => useQuery({queryKey:rulesQueryKey, queryFn:firewall.rules, refetchInterval: false})
export const firewall = {
rules: async() => {
return await getapi("firewall/rules") as RuleInfo;
},
settings: async() => {
return await getapi("firewall/settings") as FirewallSettings;
},
setsettings: async(data:FirewallSettings) => {
return await putapi("firewall/settings", data) as ServerResponse;
},
enable: async() => {
return await postapi("firewall/enable") as ServerResponse;
},
disable: async() => {
return await postapi("firewall/disable") as ServerResponse;
},
ruleset: async (data:RuleAddForm) => {
return await postapi("firewall/rules", data) as ServerResponseListed;
}
}