mirror of
https://github.com/speatzle/nfsense.git
synced 2025-05-11 10:58:21 +00:00
Merge branch 'main' of https://github.com/speatzle/nfsense
This commit is contained in:
commit
ca284c9bcb
2 changed files with 47 additions and 81 deletions
|
@ -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 } },
|
},
|
||||||
],
|
}}},
|
||||||
},
|
|
||||||
{
|
counter: { is: 'CheckBox', label: 'Counter'},
|
||||||
title: 'SNAT',
|
comment: { is: 'TextBox', label: 'Comment'},
|
||||||
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' },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'network': {
|
'network': {
|
||||||
|
|
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue