Add firewall definitions

This commit is contained in:
Samuel Lorch 2023-11-03 17:58:02 +01:00
parent 55bdaf915c
commit 143281d7c3
2 changed files with 47 additions and 81 deletions

View file

@ -66,7 +66,7 @@ const GetServices: SearchProvider = async (o) => {
}; };
const GetPeers: SearchProvider = async (o) => { const GetPeers: SearchProvider = async (o) => {
let res = await apiCall('VPN.wireguard.peers.list', {}); let res = await apiCall('vpn.wireguard.peers.list', {});
if (res.Error === null) { if (res.Error === null) {
console.debug('peers', res.Data); console.debug('peers', res.Data);
let obj = {} as Options; let obj = {} as Options;
@ -105,90 +105,59 @@ export const editTypes: { [key: string]: { [key: string]: any } } = {
'forward_rules': { 'forward_rules': {
name: 'Forward Rule', name: 'Forward Rule',
idType: 'Number', idType: 'Number',
validationSchema: toFormValidator( fields: {
zod.object({ name: { is: 'TextBox', label: 'Name'},
name: zod.string(), source_addresses: { is: 'MultiSelect', label: 'Source', props: { searchProvider: GetAddresses}},
verdict: zod.string(), destination_addresses: { is: 'MultiSelect', label: 'Destination', props: { searchProvider: GetAddresses}},
counter: zod.boolean(), services: { is: 'MultiSelect', label: 'Services', props: { searchProvider: GetServices}},
comment: zod.string().optional(), verdict: { is: 'EnumInput', label: 'Verdict', props: { variants: {
}), 'accept': { display: 'Accept'},
), 'drop': { display: 'Drop'},
sections: [ 'continue': { display: 'Continue'},
{ }}},
fields: [ counter: { is: 'CheckBox', label: 'Counter'},
{ key: 'name', label: 'Name', as: 'TextBox' }, comment: { is: 'TextBox', label: 'Comment'},
{ key: 'match.source_addresses', label: 'Source', as: 'MultiSelect', props: { searchProvider: GetAddresses } },
{ key: 'match.destination_addresses', label: 'Destination', as: 'MultiSelect', props: { searchProvider: GetAddresses } },
{ key: 'match.services', label: 'Services', as: 'MultiSelect', props: { searchProvider: GetServices } },
{ key: 'verdict', label: 'Verdict', as: 'PillBar', props: { options: { accept: { display: 'Accept' }, drop: { display: 'Drop' }, continue: { display: 'Continue' } } } },
{ key: 'counter', label: 'Counter', as: 'CheckBox' },
{ key: 'comment', label: 'Comment', as: 'MultilineTextBox' },
],
}, },
],
}, },
'destination_nat_rules': { 'destination_nat_rules': {
name: 'Destination NAT Rule', name: 'Destination NAT Rule',
idType: 'Number', idType: 'Number',
validationSchema: toFormValidator( fields: {
zod.object({ name: { is: 'TextBox', label: 'Name'},
name: zod.string(), source_addresses: { is: 'MultiSelect', label: 'Source', props: { searchProvider: GetAddresses}},
verdict: zod.string(), destination_addresses: { is: 'MultiSelect', label: 'Destination', props: { searchProvider: GetAddresses}},
counter: zod.boolean(), services: { is: 'MultiSelect', label: 'Services', props: { searchProvider: GetServices}},
comment: zod.string().optional(), // TODO section DNAT
}), dnat_address: { is: 'SingleSelect', label: 'Destination', props: { searchProvider: GetAddresses}},
), dnat_service: { is: 'SingleSelect', label: 'Service', props: { searchProvider: GetServices}},
sections: [
{ counter: { is: 'CheckBox', label: 'Counter'},
fields: [ comment: { is: 'TextBox', label: 'Comment'},
{ key: 'name', label: 'Name', as: 'TextBox' },
{ key: 'match.source_addresses', label: 'Source', as: 'MultiSelect', props: { searchProvider: GetAddresses } },
{ key: 'match.destination_addresses', label: 'Destination', as: 'MultiSelect', props: { searchProvider: GetAddresses } },
{ key: 'match.services', label: 'Services', as: 'MultiSelect', props: { searchProvider: GetServices } },
],
}, },
{
title: 'DNAT',
fields: [
{ key: 'address', label: 'Destination', as: 'SingleSelect', props: { searchProvider: GetAddresses } },
{ key: 'service', label: 'Service', as: 'SingleSelect', props: { searchProvider: GetServices } },
{ key: 'counter', label: 'Counter', as: 'CheckBox' },
{ key: 'comment', label: 'Comment', as: 'MultilineTextBox' },
],
},
],
}, },
'source_nat_rules': { 'source_nat_rules': {
name: 'Source NAT Rule', name: 'Source NAT Rule',
idType: 'Number', idType: 'Number',
validationSchema: toFormValidator( fields: {
zod.object({ name: { is: 'TextBox', label: 'Name'},
name: zod.string(), source_addresses: { is: 'MultiSelect', label: 'Source', props: { searchProvider: GetAddresses}},
verdict: zod.string(), destination_addresses: { is: 'MultiSelect', label: 'Destination', props: { searchProvider: GetAddresses}},
counter: zod.boolean(), services: { is: 'MultiSelect', label: 'Services', props: { searchProvider: GetServices}},
comment: zod.string().optional(), // TODO section SNAT
}), snat_type: { is: 'EnumInput', label: 'Type', props: { variants: {
), 'masquerade': { display: 'Masquerade' },
sections: [ 'snat': {
{ display: 'SNAT',
fields: [ fields: {
{ key: 'name', label: 'Name', as: 'TextBox' }, address: { is: 'SingleSelect', label: 'Destination', props: { searchProvider: GetAddresses}},
{ key: 'match.source_addresses', label: 'Source', as: 'MultiSelect', props: { searchProvider: GetAddresses } }, service: { is: 'SingleSelect', label: 'Service', props: { searchProvider: GetServices}},
{ key: 'match.destination_addresses', label: 'Destination', as: 'MultiSelect', props: { searchProvider: GetAddresses } },
{ key: 'match.services', label: 'Services', as: 'MultiSelect', props: { searchProvider: GetServices } },
],
}, },
{
title: 'SNAT',
fields: [
{ key: 'type', label: 'Type', as: 'PillBar', props: { options: { snat: { display: 'SNAT' }, masquerade: { display: 'Masquerade' } } } },
{ key: 'address', label: 'Source', as: 'SingleSelect', enabled: (values: any) => (values['type'] == 'snat'), props: { searchProvider: GetAddresses } },
{ key: 'service', label: 'Service', as: 'SingleSelect', enabled: (values: any) => (values['type'] == 'snat'), props: { searchProvider: GetServices } },
{ key: 'counter', label: 'Counter', as: 'CheckBox' },
{ key: 'comment', label: 'Comment', as: 'MultilineTextBox' },
],
}, },
], }}},
counter: { is: 'CheckBox', label: 'Counter'},
comment: { is: 'TextBox', label: 'Comment'},
},
}, },
}, },
'network': { 'network': {

View file

@ -53,9 +53,6 @@ pub enum Verdict {
#[derive(Serialize, Deserialize, Clone, Debug)] #[derive(Serialize, Deserialize, Clone, Debug)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
pub enum SNATType { pub enum SNATType {
SNAT { SNAT { address: String, service: String },
snat_address: String,
snat_service: String,
},
Masquerade, Masquerade,
} }