From eecdb515096fd321e2cacb27361dc50e0c57b43c Mon Sep 17 00:00:00 2001 From: Samuel Lorch Date: Wed, 1 Nov 2023 03:23:29 +0100 Subject: [PATCH 01/11] Add RPC Delete Macro --- src/api/firewall.rs | 23 +++++++++++++++- src/api/mod.rs | 65 +++++++++++++++++++++++++++++++++++++++++++++ src/api/network.rs | 16 ++++++++++- src/api/object.rs | 10 ++++++- src/api/service.rs | 23 +++++++++++++++- src/api/vpn.rs | 16 ++++++++++- 6 files changed, 148 insertions(+), 5 deletions(-) diff --git a/src/api/firewall.rs b/src/api/firewall.rs index 5b41ba0..256a4da 100644 --- a/src/api/firewall.rs +++ b/src/api/firewall.rs @@ -1,7 +1,7 @@ use super::ApiError; use crate::{ definitions::firewall::{DestinationNATRule, ForwardRule, SourceNATRule}, - get_things, get_vec_thing, + delete_vec_thing, get_things, get_vec_thing, state::RpcState, }; use jsonrpsee::RpcModule; @@ -21,6 +21,13 @@ pub fn register_methods(module: &mut RpcModule) { ) .unwrap(); + module + .register_method( + "firewall.delete_forward_rule", + delete_vec_thing!(firewall.forward_rules), + ) + .unwrap(); + module .register_method( "firewall.get_destination_nat_rule", @@ -35,6 +42,13 @@ pub fn register_methods(module: &mut RpcModule) { ) .unwrap(); + module + .register_method( + "firewall.delete_destination_nat_rule", + delete_vec_thing!(firewall.destination_nat_rules), + ) + .unwrap(); + module .register_method( "firewall.get_source_nat_rule", @@ -48,4 +62,11 @@ pub fn register_methods(module: &mut RpcModule) { get_things!(firewall.source_nat_rules), ) .unwrap(); + + module + .register_method( + "firewall.delete_source_nat_rule", + delete_vec_thing!(firewall.source_nat_rules), + ) + .unwrap(); } diff --git a/src/api/mod.rs b/src/api/mod.rs index c730cf7..1c3abbb 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -104,6 +104,71 @@ macro_rules! get_things { }; } +#[macro_export] +macro_rules! delete_map_thing { + ($( $sub_system:ident ).+) => { + |params, state| { + use serde::{Deserialize, Serialize}; + + #[derive(Deserialize, Serialize)] + struct GetStringID { + id: String, + } + + let t: GetStringID = params.parse().map_err(ApiError::ParameterDeserialize)?; + + let mut cm = state.config_manager.clone(); + let mut tx = cm.start_transaction(); + + match tx.config.$($sub_system).+.remove(&t.id) { + Some(_) => tx + .commit(crate::config_manager::Change { + action: crate::config_manager::ChangeAction::Delete, + path: stringify!($($sub_system).+), + id: t.id, + }) + .map_err(ApiError::ConfigError), + None => { + tx.revert(); + Err(ApiError::NotFound) + } + } + } + }; +} + +#[macro_export] +macro_rules! delete_vec_thing { + ($( $sub_system:ident ).+) => { + |params, state| { + use serde::{Deserialize, Serialize}; + + #[derive(Deserialize, Serialize)] + struct GetIntID { + id: i64, + } + + let t: GetIntID = params.parse().map_err(ApiError::ParameterDeserialize)?; + + let mut cm = state.config_manager.clone(); + let mut tx = cm.start_transaction(); + + if tx.config.$($sub_system).+.len() > t.id as usize { + tx.config.$($sub_system).+.remove(t.id as usize); + tx.commit(crate::config_manager::Change { + action: crate::config_manager::ChangeAction::Delete, + path: stringify!($($sub_system).+), + id: t.id.to_string(), + }) + .map_err(ApiError::ConfigError) + } else { + tx.revert(); + Err(ApiError::NotFound) + } + } + }; +} + pub fn new_rpc_module(state: RpcState) -> RpcModule { let mut module = RpcModule::new(state); diff --git a/src/api/network.rs b/src/api/network.rs index a15bbb5..3e1d238 100644 --- a/src/api/network.rs +++ b/src/api/network.rs @@ -1,7 +1,7 @@ use super::ApiError; use crate::{ definitions::network::{NetworkInterface, StaticRoute}, - get_map_thing, get_things, get_vec_thing, + delete_map_thing, delete_vec_thing, get_map_thing, get_things, get_vec_thing, state::RpcState, }; use jsonrpsee::RpcModule; @@ -22,6 +22,13 @@ pub fn register_methods(module: &mut RpcModule) { ) .unwrap(); + module + .register_method( + "network.delete_static_route", + delete_vec_thing!(network.static_routes), + ) + .unwrap(); + module .register_method("network.get_interface", get_map_thing!(network.interfaces)) .unwrap(); @@ -32,4 +39,11 @@ pub fn register_methods(module: &mut RpcModule) { get_things!(network.interfaces), ) .unwrap(); + + module + .register_method( + "network.delete_interface", + delete_map_thing!(network.interfaces), + ) + .unwrap(); } diff --git a/src/api/object.rs b/src/api/object.rs index c45dd6c..71baae2 100644 --- a/src/api/object.rs +++ b/src/api/object.rs @@ -1,7 +1,7 @@ use super::ApiError; use crate::{ definitions::object::{Address, Service}, - get_map_thing, get_things, + delete_map_thing, get_map_thing, get_things, state::RpcState, }; use jsonrpsee::RpcModule; @@ -19,6 +19,10 @@ pub fn register_methods(module: &mut RpcModule) { ) .unwrap(); + module + .register_method("object.delete_service", delete_map_thing!(object.services)) + .unwrap(); + module .register_method("object.get_address", get_map_thing!(object.addresses)) .unwrap(); @@ -29,4 +33,8 @@ pub fn register_methods(module: &mut RpcModule) { get_things!(object.addresses), ) .unwrap(); + + module + .register_method("object.delete_address", delete_map_thing!(object.addresses)) + .unwrap(); } diff --git a/src/api/service.rs b/src/api/service.rs index 2503f9e..40b6867 100644 --- a/src/api/service.rs +++ b/src/api/service.rs @@ -1,7 +1,7 @@ use super::ApiError; use crate::{ definitions::service::{DHCPServer, DNSServer, NTPServer}, - get_things, get_vec_thing, + delete_vec_thing, get_things, get_vec_thing, state::RpcState, }; use jsonrpsee::RpcModule; @@ -21,6 +21,13 @@ pub fn register_methods(module: &mut RpcModule) { ) .unwrap(); + module + .register_method( + "service.delete_dhcp_server", + delete_vec_thing!(service.dhcp_servers), + ) + .unwrap(); + module .register_method( "service.get_dns_server", @@ -35,6 +42,13 @@ pub fn register_methods(module: &mut RpcModule) { ) .unwrap(); + module + .register_method( + "service.delete_dns_server", + delete_vec_thing!(service.dns_servers), + ) + .unwrap(); + module .register_method( "service.get_ntp_server", @@ -48,4 +62,11 @@ pub fn register_methods(module: &mut RpcModule) { get_things!(service.ntp_servers), ) .unwrap(); + + module + .register_method( + "service.delete_ntp_server", + delete_vec_thing!(service.ntp_servers), + ) + .unwrap(); } diff --git a/src/api/vpn.rs b/src/api/vpn.rs index 7c6da9d..0482924 100644 --- a/src/api/vpn.rs +++ b/src/api/vpn.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use super::ApiError; use crate::definitions::vpn::{WireguardInterface, WireguardPeer}; use crate::state::RpcState; -use crate::{get_map_thing, get_things}; +use crate::{delete_map_thing, get_map_thing, get_things}; use jsonrpsee::types::Params; use jsonrpsee::RpcModule; @@ -26,6 +26,13 @@ pub fn register_methods(module: &mut RpcModule) { ) .unwrap(); + module + .register_method( + "vpn.wireguard.delete_interface", + delete_map_thing!(vpn.wireguard.interfaces), + ) + .unwrap(); + module .register_method( "vpn.wireguard.get_peer", @@ -39,6 +46,13 @@ pub fn register_methods(module: &mut RpcModule) { get_things!(vpn.wireguard.peers), ) .unwrap(); + + module + .register_method( + "vpn.wireguard.delete_peer", + delete_map_thing!(vpn.wireguard.peers), + ) + .unwrap(); } pub fn get_wireguard_status(_: Params, _: &RpcState) -> Result { From 7eb8b87952650aa45c0878b252c89b8468957a8f Mon Sep 17 00:00:00 2001 From: Samuel Lorch Date: Wed, 1 Nov 2023 03:37:45 +0100 Subject: [PATCH 02/11] rename all rpc methods to new schema --- src/api/config.rs | 6 +++--- src/api/firewall.rs | 26 +++++++++++++------------- src/api/mod.rs | 2 +- src/api/network.rs | 18 +++++++++--------- src/api/object.rs | 18 +++++++++--------- src/api/service.rs | 26 +++++++++++++------------- src/api/system.rs | 14 ++++++++------ src/api/vpn.rs | 22 +++++++++++----------- 8 files changed, 67 insertions(+), 65 deletions(-) diff --git a/src/api/config.rs b/src/api/config.rs index 1401ea7..945e037 100644 --- a/src/api/config.rs +++ b/src/api/config.rs @@ -9,15 +9,15 @@ use super::ApiError::ConfigError; pub fn register_methods(module: &mut RpcModule) { module - .register_method("config.get_pending_changelog", get_pending_changelog) + .register_method("config.pending_changes.log", get_pending_changelog) .unwrap(); module - .register_method("config.apply_pending_changes", apply_pending_changes) + .register_method("config.pending_changes.apply", apply_pending_changes) .unwrap(); module - .register_method("config.discard_pending_changes", discard_pending_changes) + .register_method("config.pending_changes.discard", discard_pending_changes) .unwrap(); } diff --git a/src/api/firewall.rs b/src/api/firewall.rs index 256a4da..931aad1 100644 --- a/src/api/firewall.rs +++ b/src/api/firewall.rs @@ -1,7 +1,7 @@ use super::ApiError; use crate::{ definitions::firewall::{DestinationNATRule, ForwardRule, SourceNATRule}, - delete_vec_thing, get_things, get_vec_thing, + delete_vec_thing, get_vec_thing, list_things, state::RpcState, }; use jsonrpsee::RpcModule; @@ -9,63 +9,63 @@ use jsonrpsee::RpcModule; pub fn register_methods(module: &mut RpcModule) { module .register_method( - "firewall.get_forward_rule", + "firewall.forward_rules.get", get_vec_thing!(firewall.forward_rules), ) .unwrap(); module .register_method::, ApiError>, _>( - "firewall.get_forward_rules", - get_things!(firewall.forward_rules), + "firewall.forward_rules.list", + list_things!(firewall.forward_rules), ) .unwrap(); module .register_method( - "firewall.delete_forward_rule", + "firewall.forward_rules.delete", delete_vec_thing!(firewall.forward_rules), ) .unwrap(); module .register_method( - "firewall.get_destination_nat_rule", + "firewall.destination_nat_rules.get", get_vec_thing!(firewall.destination_nat_rules), ) .unwrap(); module .register_method::, ApiError>, _>( - "firewall.get_destination_nat_rules", - get_things!(firewall.destination_nat_rules), + "firewall.destination_nat_rules.list", + list_things!(firewall.destination_nat_rules), ) .unwrap(); module .register_method( - "firewall.delete_destination_nat_rule", + "firewall.destination_nat_rules.delete", delete_vec_thing!(firewall.destination_nat_rules), ) .unwrap(); module .register_method( - "firewall.get_source_nat_rule", + "firewall.source_nat_rules.get", get_vec_thing!(firewall.source_nat_rules), ) .unwrap(); module .register_method::, ApiError>, _>( - "firewall.get_source_nat_rules", - get_things!(firewall.source_nat_rules), + "firewall.source_nat_rules.get", + list_things!(firewall.source_nat_rules), ) .unwrap(); module .register_method( - "firewall.delete_source_nat_rule", + "firewall.source_nat_rules.delete", delete_vec_thing!(firewall.source_nat_rules), ) .unwrap(); diff --git a/src/api/mod.rs b/src/api/mod.rs index 1c3abbb..437a2a2 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -93,7 +93,7 @@ macro_rules! get_vec_thing { } #[macro_export] -macro_rules! get_things { +macro_rules! list_things { ($( $sub_system:ident ).+) => { |_, state| { Ok(state diff --git a/src/api/network.rs b/src/api/network.rs index 3e1d238..0788126 100644 --- a/src/api/network.rs +++ b/src/api/network.rs @@ -1,7 +1,7 @@ use super::ApiError; use crate::{ definitions::network::{NetworkInterface, StaticRoute}, - delete_map_thing, delete_vec_thing, get_map_thing, get_things, get_vec_thing, + delete_map_thing, delete_vec_thing, get_map_thing, get_vec_thing, list_things, state::RpcState, }; use jsonrpsee::RpcModule; @@ -10,39 +10,39 @@ use std::collections::HashMap; pub fn register_methods(module: &mut RpcModule) { module .register_method( - "network.get_static_route", + "network.static_routes.get", get_vec_thing!(network.static_routes), ) .unwrap(); module .register_method::, ApiError>, _>( - "network.get_static_routes", - get_things!(network.static_routes), + "network.static_routes.list", + list_things!(network.static_routes), ) .unwrap(); module .register_method( - "network.delete_static_route", + "network.static_routes.delete", delete_vec_thing!(network.static_routes), ) .unwrap(); module - .register_method("network.get_interface", get_map_thing!(network.interfaces)) + .register_method("network.interfaces.get", get_map_thing!(network.interfaces)) .unwrap(); module .register_method::, ApiError>, _>( - "network.get_interfaces", - get_things!(network.interfaces), + "network.interfaces.list", + list_things!(network.interfaces), ) .unwrap(); module .register_method( - "network.delete_interface", + "network.interfaces.delete", delete_map_thing!(network.interfaces), ) .unwrap(); diff --git a/src/api/object.rs b/src/api/object.rs index 71baae2..0a554b7 100644 --- a/src/api/object.rs +++ b/src/api/object.rs @@ -1,7 +1,7 @@ use super::ApiError; use crate::{ definitions::object::{Address, Service}, - delete_map_thing, get_map_thing, get_things, + delete_map_thing, get_map_thing, list_things, state::RpcState, }; use jsonrpsee::RpcModule; @@ -9,32 +9,32 @@ use std::collections::HashMap; pub fn register_methods(module: &mut RpcModule) { module - .register_method("object.get_service", get_map_thing!(object.services)) + .register_method("object.services.get", get_map_thing!(object.services)) .unwrap(); module .register_method::, ApiError>, _>( - "object.get_services", - get_things!(object.services), + "object.services.list", + list_things!(object.services), ) .unwrap(); module - .register_method("object.delete_service", delete_map_thing!(object.services)) + .register_method("object.services.delete", delete_map_thing!(object.services)) .unwrap(); module - .register_method("object.get_address", get_map_thing!(object.addresses)) + .register_method("object.addresses.get", get_map_thing!(object.addresses)) .unwrap(); module .register_method::, ApiError>, _>( - "object.get_addresses", - get_things!(object.addresses), + "object.addresses.list", + list_things!(object.addresses), ) .unwrap(); module - .register_method("object.delete_address", delete_map_thing!(object.addresses)) + .register_method("object.addresses.list", delete_map_thing!(object.addresses)) .unwrap(); } diff --git a/src/api/service.rs b/src/api/service.rs index 40b6867..97fb6fb 100644 --- a/src/api/service.rs +++ b/src/api/service.rs @@ -1,7 +1,7 @@ use super::ApiError; use crate::{ definitions::service::{DHCPServer, DNSServer, NTPServer}, - delete_vec_thing, get_things, get_vec_thing, + delete_vec_thing, get_vec_thing, list_things, state::RpcState, }; use jsonrpsee::RpcModule; @@ -9,63 +9,63 @@ use jsonrpsee::RpcModule; pub fn register_methods(module: &mut RpcModule) { module .register_method( - "service.get_dhcp_server", + "service.dhcp_servers.get", get_vec_thing!(service.dhcp_servers), ) .unwrap(); module .register_method::, ApiError>, _>( - "service.get_dhcp_servers", - get_things!(service.dhcp_servers), + "service.dhcp_servers.list", + list_things!(service.dhcp_servers), ) .unwrap(); module .register_method( - "service.delete_dhcp_server", + "service.dhcp_servers.delete", delete_vec_thing!(service.dhcp_servers), ) .unwrap(); module .register_method( - "service.get_dns_server", + "service.dns_servers.get", get_vec_thing!(service.dns_servers), ) .unwrap(); module .register_method::, ApiError>, _>( - "service.get_dns_servers", - get_things!(service.dns_servers), + "service.dns_servers.list", + list_things!(service.dns_servers), ) .unwrap(); module .register_method( - "service.delete_dns_server", + "service.dns_servers.delete", delete_vec_thing!(service.dns_servers), ) .unwrap(); module .register_method( - "service.get_ntp_server", + "service.ntp_servers.get", get_vec_thing!(service.ntp_servers), ) .unwrap(); module .register_method::, ApiError>, _>( - "service.get_ntp_servers", - get_things!(service.ntp_servers), + "service.ntp_servers.list", + list_things!(service.ntp_servers), ) .unwrap(); module .register_method( - "service.delete_ntp_server", + "service.ntp_servers.delete", delete_vec_thing!(service.ntp_servers), ) .unwrap(); diff --git a/src/api/system.rs b/src/api/system.rs index 291f350..4461a14 100644 --- a/src/api/system.rs +++ b/src/api/system.rs @@ -17,22 +17,24 @@ use super::ApiError; const USER_CHANGE_PATH: &str = "system.user"; pub fn register_methods(module: &mut RpcModule) { - module.register_method("system.get_user", get_user).unwrap(); - module - .register_method("system.get_users", get_users) + .register_method("system.users.get", get_user) .unwrap(); module - .register_method("system.create_user", create_user) + .register_method("system.users.list", get_users) .unwrap(); module - .register_method("system.update_user", update_user) + .register_method("system.users.create", create_user) .unwrap(); module - .register_method("system.delete_user", delete_user) + .register_method("system.users.update", update_user) + .unwrap(); + + module + .register_method("system.users.delete", delete_user) .unwrap(); } diff --git a/src/api/vpn.rs b/src/api/vpn.rs index 0482924..bfc1e98 100644 --- a/src/api/vpn.rs +++ b/src/api/vpn.rs @@ -3,58 +3,58 @@ use std::collections::HashMap; use super::ApiError; use crate::definitions::vpn::{WireguardInterface, WireguardPeer}; use crate::state::RpcState; -use crate::{delete_map_thing, get_map_thing, get_things}; +use crate::{delete_map_thing, get_map_thing, list_things}; use jsonrpsee::types::Params; use jsonrpsee::RpcModule; pub fn register_methods(module: &mut RpcModule) { module - .register_method("vpn.wireguard.get_status", get_wireguard_status) + .register_method("vpn.wireguard.status", wireguard_status) .unwrap(); module .register_method( - "vpn.wireguard.get_interface", + "vpn.wireguard.interfaces.get", get_map_thing!(vpn.wireguard.interfaces), ) .unwrap(); module .register_method::, ApiError>, _>( - "vpn.wireguard.get_interfaces", - get_things!(vpn.wireguard.interfaces), + "vpn.wireguard.interfaces.list", + list_things!(vpn.wireguard.interfaces), ) .unwrap(); module .register_method( - "vpn.wireguard.delete_interface", + "vpn.wireguard.interfaces.delete", delete_map_thing!(vpn.wireguard.interfaces), ) .unwrap(); module .register_method( - "vpn.wireguard.get_peer", + "vpn.wireguard.peers.get", get_map_thing!(vpn.wireguard.peers), ) .unwrap(); module .register_method::, ApiError>, _>( - "vpn.wireguard.get_peers", - get_things!(vpn.wireguard.peers), + "vpn.wireguard.peers.list", + list_things!(vpn.wireguard.peers), ) .unwrap(); module .register_method( - "vpn.wireguard.delete_peer", + "vpn.wireguard.peers.delete", delete_map_thing!(vpn.wireguard.peers), ) .unwrap(); } -pub fn get_wireguard_status(_: Params, _: &RpcState) -> Result { +pub fn wireguard_status(_: Params, _: &RpcState) -> Result { Ok("ok".to_string()) } From 84de6071029799ce69587c3c92f29fbb05f71590 Mon Sep 17 00:00:00 2001 From: Samuel Lorch Date: Wed, 1 Nov 2023 03:55:39 +0100 Subject: [PATCH 03/11] rename rpc methods to new schema, fix delete id --- client/src/pages/[subsystem]/[entity]/edit/[id].vue | 6 +++--- client/src/pages/[subsystem]/[entity]/edit/index.vue | 2 +- client/src/pages/config/config.vue | 6 +++--- ...stinationNATRules.vue => destination_nat_rules.vue} | 10 +++++----- .../firewall/{ForwardRules.vue => forward_rules.vue} | 10 +++++----- .../{SourceNATRules.vue => source_nat_rules.vue} | 10 +++++----- client/src/pages/index.vue | 2 +- .../pages/network/{Interfaces.vue => interfaces.vue} | 4 ++-- .../network/{StaticRoutes.vue => static_routes.vue} | 8 ++++---- .../src/pages/object/{Addresses.vue => addresses.vue} | 4 ++-- client/src/pages/object/{Services.vue => services.vue} | 4 ++-- client/src/pages/service/NTPServers.vue | 8 ++++---- .../service/{DHCPServers.vue => dhcp_servers.vue} | 8 ++++---- .../pages/service/{DNSServers.vue => dns_servers.vue} | 8 ++++---- client/src/pages/system/{Users.vue => users.vue} | 4 ++-- ...ireguardInterfaces.vue => wireguard_interfaces.vue} | 8 ++++---- .../vpn/{WireguardPeers.vue => wireguard_peers.vue} | 8 ++++---- .../vpn/{WireguardStatus.vue => wireguard_status.vue} | 2 +- 18 files changed, 56 insertions(+), 56 deletions(-) rename client/src/pages/firewall/{DestinationNATRules.vue => destination_nat_rules.vue} (79%) rename client/src/pages/firewall/{ForwardRules.vue => forward_rules.vue} (80%) rename client/src/pages/firewall/{SourceNATRules.vue => source_nat_rules.vue} (80%) rename client/src/pages/network/{Interfaces.vue => interfaces.vue} (92%) rename client/src/pages/network/{StaticRoutes.vue => static_routes.vue} (79%) rename client/src/pages/object/{Addresses.vue => addresses.vue} (94%) rename client/src/pages/object/{Services.vue => services.vue} (93%) rename client/src/pages/service/{DHCPServers.vue => dhcp_servers.vue} (78%) rename client/src/pages/service/{DNSServers.vue => dns_servers.vue} (78%) rename client/src/pages/system/{Users.vue => users.vue} (90%) rename client/src/pages/vpn/{WireguardInterfaces.vue => wireguard_interfaces.vue} (82%) rename client/src/pages/vpn/{WireguardPeers.vue => wireguard_peers.vue} (83%) rename client/src/pages/vpn/{WireguardStatus.vue => wireguard_status.vue} (91%) diff --git a/client/src/pages/[subsystem]/[entity]/edit/[id].vue b/client/src/pages/[subsystem]/[entity]/edit/[id].vue index 864859d..39bb1ff 100644 --- a/client/src/pages/[subsystem]/[entity]/edit/[id].vue +++ b/client/src/pages/[subsystem]/[entity]/edit/[id].vue @@ -14,9 +14,9 @@ async function load(){ loading = true; let res: any; if (editTypes[subsystem][entity].idType == 'Number') { - res = await apiCall(`${editTypes[subsystem].name }.get_${ editTypes[subsystem][entity].name}`, {id: id as number - 0}); + res = await apiCall(`${editTypes[subsystem].name }.${ editTypes[subsystem][entity].name}.get`, {id: id as number - 0}); } else { - res = await apiCall(`${editTypes[subsystem].name }.get_${ editTypes[subsystem][entity].name}`, {id: id}); + res = await apiCall(`${editTypes[subsystem].name }.${ editTypes[subsystem][entity].name}.get`, {id: id}); } if (res.Error === null) { @@ -30,7 +30,7 @@ async function load(){ async function update(value: any) { console.debug('value', value); - let res = await apiCall(`${editTypes[subsystem].name }.update_${ editTypes[subsystem][entity].name}`, value); + let res = await apiCall(`${editTypes[subsystem].name }.${ editTypes[subsystem][entity].name}.update`, value); if (res.Error === null) { p.toast.success(`Updated ${ editTypes[subsystem][entity].name}`); p.router.go(-1); diff --git a/client/src/pages/[subsystem]/[entity]/edit/index.vue b/client/src/pages/[subsystem]/[entity]/edit/index.vue index 8f6ba41..fd206c3 100644 --- a/client/src/pages/[subsystem]/[entity]/edit/index.vue +++ b/client/src/pages/[subsystem]/[entity]/edit/index.vue @@ -9,7 +9,7 @@ const { subsystem, entity } = $(props); async function create(value: any) { console.debug('value', value); - let res = await apiCall(`${editTypes[subsystem].name }.create_${ editTypes[subsystem][entity].name}`, value); + let res = await apiCall(`${editTypes[subsystem].name }.${ editTypes[subsystem][entity].name}.create`, value); if (res.Error === null) { p.toast.success(`Created ${ editTypes[subsystem][entity].name}`); p.router.go(-1); diff --git a/client/src/pages/config/config.vue b/client/src/pages/config/config.vue index 94005f2..a97bbce 100644 --- a/client/src/pages/config/config.vue +++ b/client/src/pages/config/config.vue @@ -28,7 +28,7 @@ const displayData = $computed(() => { async function load(){ loading = true; - let res = await apiCall('config.get_pending_changelog', {}); + let res = await apiCall('config.pending_changes.log', {}); if (res.Error === null) { console.debug('changelog', res.Data); changelog = res.Data; @@ -39,7 +39,7 @@ async function load(){ } async function apply(){ - let res = await apiCall('config.apply_pending_changes', {}); + let res = await apiCall('config.pending_changes.apply', {}); if (res.Error === null) { console.debug('apply'); p.toast.success('Applied Pending Config'); @@ -50,7 +50,7 @@ async function apply(){ } async function discard(){ - let res = await apiCall('config.discard_pending_changes', {}); + let res = await apiCall('config.pending_changes.discard', {}); if (res.Error === null) { console.debug('discard'); p.toast.success('Discarded Pending Config'); diff --git a/client/src/pages/firewall/DestinationNATRules.vue b/client/src/pages/firewall/destination_nat_rules.vue similarity index 79% rename from client/src/pages/firewall/DestinationNATRules.vue rename to client/src/pages/firewall/destination_nat_rules.vue index e756dd8..ab26420 100644 --- a/client/src/pages/firewall/DestinationNATRules.vue +++ b/client/src/pages/firewall/destination_nat_rules.vue @@ -19,7 +19,7 @@ const columns = [ ]; async function load(){ - let res = await apiCall('firewall.get_destination_nat_rules', {}); + let res = await apiCall('firewall.destination_nat_rules.list', {}); if (res.Error === null) { rules = res.Data; console.debug('rules', rules); @@ -29,7 +29,7 @@ async function load(){ } async function deleteRule(){ - let res = await apiCall('firewall.delete_destination_nat_rule', {index: selection[0]}); + let res = await apiCall('firewall.destination_nat_rules.delete', {id: selection[0]}); if (res.Error === null) { console.debug('deleted rule'); p.toast.success('Deleted Rule'); @@ -41,7 +41,7 @@ async function deleteRule(){ async function draggedRow(draggedRow: number, draggedOverRow: number) { console.log('dragged', draggedRow, draggedOverRow); - let res = await apiCall('firewall.move_destination_nat_rule', {index: draggedRow, to_index: draggedOverRow}); + let res = await apiCall('firewall.destination_nat_rules.move', {index: draggedRow, to_index: draggedOverRow}); if (res.Error === null) { console.debug('moved rule'); p.toast.success('Moved Rule'); @@ -61,8 +61,8 @@ onMounted(async() => {
- Create - Edit + Create + Edit
diff --git a/client/src/pages/firewall/ForwardRules.vue b/client/src/pages/firewall/forward_rules.vue similarity index 80% rename from client/src/pages/firewall/ForwardRules.vue rename to client/src/pages/firewall/forward_rules.vue index 5930899..ba89dee 100644 --- a/client/src/pages/firewall/ForwardRules.vue +++ b/client/src/pages/firewall/forward_rules.vue @@ -18,7 +18,7 @@ const columns = [ ]; async function load(){ - let res = await apiCall('firewall.get_forward_rules', {}); + let res = await apiCall('firewall.forward_rules.list', {}); if (res.Error === null) { rules = res.Data; console.debug('rules', rules); @@ -28,7 +28,7 @@ async function load(){ } async function deleteRule(){ - let res = await apiCall('firewall.delete_forward_rule', {index: selection[0]}); + let res = await apiCall('firewall.forward_rules.delete', {id: selection[0]}); if (res.Error === null) { console.debug('deleted rule'); p.toast.success('Deleted Rule'); @@ -40,7 +40,7 @@ async function deleteRule(){ async function draggedRow(draggedRow: number, draggedOverRow: number) { console.log('dragged', draggedRow, draggedOverRow); - let res = await apiCall('firewall.move_forward_rule', {index: draggedRow, to_index: draggedOverRow}); + let res = await apiCall('firewall.forward_rules.move', {index: draggedRow, to_index: draggedOverRow}); if (res.Error === null) { console.debug('moved rule'); p.toast.success('Moved Rule'); @@ -60,8 +60,8 @@ onMounted(async() => {
- Create - Edit + Create + Edit
diff --git a/client/src/pages/firewall/SourceNATRules.vue b/client/src/pages/firewall/source_nat_rules.vue similarity index 80% rename from client/src/pages/firewall/SourceNATRules.vue rename to client/src/pages/firewall/source_nat_rules.vue index f61b43d..891915a 100644 --- a/client/src/pages/firewall/SourceNATRules.vue +++ b/client/src/pages/firewall/source_nat_rules.vue @@ -19,7 +19,7 @@ const columns = [ ]; async function load(){ - let res = await apiCall('firewall.get_source_nat_rules', {}); + let res = await apiCall('firewall.source_nat_rules.list', {}); if (res.Error === null) { rules = res.Data; console.debug('rules', rules); @@ -29,7 +29,7 @@ async function load(){ } async function deleteRule(){ - let res = await apiCall('firewall.delete_source_nat:rule', {index: selection[0]}); + let res = await apiCall('firewall.source_nat_rules.delete', {id: selection[0]}); if (res.Error === null) { console.debug('deleted rule'); p.toast.success('Deleted Rule'); @@ -41,7 +41,7 @@ async function deleteRule(){ async function draggedRow(draggedRow: number, draggedOverRow: number) { console.log('dragged', draggedRow, draggedOverRow); - let res = await apiCall('firewall.move_source_nat_rule', {index: draggedRow, to_index: draggedOverRow}); + let res = await apiCall('firewall.source_nat_rules.move', {index: draggedRow, to_index: draggedOverRow}); if (res.Error === null) { console.debug('moved rule'); p.toast.success('Moved Rule'); @@ -61,8 +61,8 @@ onMounted(async() => {
- Create - Edit + Create + Edit
diff --git a/client/src/pages/index.vue b/client/src/pages/index.vue index 2386ca6..7479a6c 100644 --- a/client/src/pages/index.vue +++ b/client/src/pages/index.vue @@ -6,7 +6,7 @@ let loading = $ref(false); async function load(){ loading = true; - let res = await apiCall('network.get_links', {}); + let res = await apiCall('network.links.get', {}); if (res.Error === null) { console.debug('links', res.Data); links = res.Data; diff --git a/client/src/pages/network/Interfaces.vue b/client/src/pages/network/interfaces.vue similarity index 92% rename from client/src/pages/network/Interfaces.vue rename to client/src/pages/network/interfaces.vue index 7d31a85..6282523 100644 --- a/client/src/pages/network/Interfaces.vue +++ b/client/src/pages/network/interfaces.vue @@ -32,7 +32,7 @@ const displayData = $computed(() => { async function load(){ loading = true; - let res = await apiCall('network.get_interfaces', {}); + let res = await apiCall('network.interfaces.list', {}); if (res.Error === null) { console.debug('interfaces', res.Data); interfaces = res.Data; @@ -43,7 +43,7 @@ async function load(){ } async function deleteInterface(){ - let res = await apiCall('network.delete_interface', {name: displayData[selection[0]].name}); + let res = await apiCall('network.interfaces.delete', {id: displayData[selection[0]].name}); if (res.Error === null) { console.debug('deleted interface'); } else { diff --git a/client/src/pages/network/StaticRoutes.vue b/client/src/pages/network/static_routes.vue similarity index 79% rename from client/src/pages/network/StaticRoutes.vue rename to client/src/pages/network/static_routes.vue index 2ff21f3..b8f452e 100644 --- a/client/src/pages/network/StaticRoutes.vue +++ b/client/src/pages/network/static_routes.vue @@ -15,7 +15,7 @@ const columns = [ async function load(){ loading = true; - let res = await apiCall('network.get_static_routes', {}); + let res = await apiCall('network.static_routes.list', {}); if (res.Error === null) { console.debug('staticRoutes', res.Data); staticRoutes = res.Data; @@ -26,7 +26,7 @@ async function load(){ } async function deleteStaticRoutes(){ - let res = await apiCall('network.delete_static_route', {index: selection[0]}); + let res = await apiCall('network.static_routes.delete', {id: selection[0]}); if (res.Error === null) { console.debug('deleted static routes'); } else { @@ -44,8 +44,8 @@ onMounted(async() => { \ No newline at end of file diff --git a/client/src/pages/object/Addresses.vue b/client/src/pages/object/addresses.vue similarity index 94% rename from client/src/pages/object/Addresses.vue rename to client/src/pages/object/addresses.vue index 130f3e8..1bdc751 100644 --- a/client/src/pages/object/Addresses.vue +++ b/client/src/pages/object/addresses.vue @@ -16,7 +16,7 @@ const columns = [ async function load(){ loading = true; - let res = await apiCall('object.get_addresses', {}); + let res = await apiCall('object.addresses.list', {}); if (res.Error === null) { addresses = res.Data; console.debug('addresses', addresses); @@ -62,7 +62,7 @@ function getAddressValue(s: any): string { } async function deleteAddress(){ - let res = await apiCall('object.delete_address', {name: displayData[selection[0]].name}); + let res = await apiCall('object.addresses_delete', {id: displayData[selection[0]].name}); if (res.Error === null) { console.debug('deleted address'); } else { diff --git a/client/src/pages/object/Services.vue b/client/src/pages/object/services.vue similarity index 93% rename from client/src/pages/object/Services.vue rename to client/src/pages/object/services.vue index 6727652..28f9d42 100644 --- a/client/src/pages/object/Services.vue +++ b/client/src/pages/object/services.vue @@ -56,7 +56,7 @@ function getServicePortRange(s:any): string { async function load(){ loading = true; - let res = await apiCall('object.get_services', {}); + let res = await apiCall('object.services.list', {}); if (res.Error === null) { console.debug('services', res.Data); services = res.Data; @@ -67,7 +67,7 @@ async function load(){ } async function deleteService(){ - let res = await apiCall('object.delete_service', {name: displayData[selection[0]].name}); + let res = await apiCall('object.services.delete', {name: displayData[selection[0]].name}); if (res.Error === null) { console.debug('deleted service'); } else { diff --git a/client/src/pages/service/NTPServers.vue b/client/src/pages/service/NTPServers.vue index a4e3425..7355121 100644 --- a/client/src/pages/service/NTPServers.vue +++ b/client/src/pages/service/NTPServers.vue @@ -13,7 +13,7 @@ const columns = [ ]; async function load(){ - let res = await apiCall('service.get_ntp_servers', {}); + let res = await apiCall('service.ntp_servers.list', {}); if (res.Error === null) { servers = res.Data; console.debug('rules', servers); @@ -23,7 +23,7 @@ async function load(){ } async function deleteRule(){ - let res = await apiCall('service.delete_ntp_server', {index: selection[0]}); + let res = await apiCall('service.ntp_server.delete', {id: selection[0]}); if (res.Error === null) { console.debug('deleted server'); p.toast.success('Deleted NTP Server'); @@ -43,8 +43,8 @@ onMounted(async() => {
- Create - Edit + Create + Edit
diff --git a/client/src/pages/service/DHCPServers.vue b/client/src/pages/service/dhcp_servers.vue similarity index 78% rename from client/src/pages/service/DHCPServers.vue rename to client/src/pages/service/dhcp_servers.vue index e27abbc..13d394e 100644 --- a/client/src/pages/service/DHCPServers.vue +++ b/client/src/pages/service/dhcp_servers.vue @@ -13,7 +13,7 @@ const columns = [ ]; async function load(){ - let res = await apiCall('service.get_dhcp_servers', {}); + let res = await apiCall('service.dhcp_servers.list', {}); if (res.Error === null) { servers = res.Data; console.debug('rules', servers); @@ -23,7 +23,7 @@ async function load(){ } async function deleteRule(){ - let res = await apiCall('service.delete_dhcp_server', {index: selection[0]}); + let res = await apiCall('service.dhcp_servers.delete', {index: selection[0]}); if (res.Error === null) { console.debug('deleted server'); p.toast.success('Deleted DHCP Server'); @@ -43,8 +43,8 @@ onMounted(async() => {
- Create - Edit + Create + Edit
diff --git a/client/src/pages/service/DNSServers.vue b/client/src/pages/service/dns_servers.vue similarity index 78% rename from client/src/pages/service/DNSServers.vue rename to client/src/pages/service/dns_servers.vue index ae3f22d..3a94249 100644 --- a/client/src/pages/service/DNSServers.vue +++ b/client/src/pages/service/dns_servers.vue @@ -13,7 +13,7 @@ const columns = [ ]; async function load(){ - let res = await apiCall('service.get_dns_servers', {}); + let res = await apiCall('service.dns_servers.list', {}); if (res.Error === null) { servers = res.Data; console.debug('rules', servers); @@ -23,7 +23,7 @@ async function load(){ } async function deleteRule(){ - let res = await apiCall('service.delete_dns_server', {index: selection[0]}); + let res = await apiCall('service.dns_servers.delete', {index: selection[0]}); if (res.Error === null) { console.debug('deleted server'); p.toast.success('Deleted DNS Server'); @@ -43,8 +43,8 @@ onMounted(async() => {
- Create - Edit + Create + Edit
diff --git a/client/src/pages/system/Users.vue b/client/src/pages/system/users.vue similarity index 90% rename from client/src/pages/system/Users.vue rename to client/src/pages/system/users.vue index e51a426..001be1c 100644 --- a/client/src/pages/system/Users.vue +++ b/client/src/pages/system/users.vue @@ -14,7 +14,7 @@ const columns = [ async function load(){ loading = true; - let res = await apiCall('system.get_users', {}); + let res = await apiCall('system.users.list', {}); if (res.Error === null) { users = res.Data; console.debug('users', users); @@ -25,7 +25,7 @@ async function load(){ } async function deleteUser(){ - let res = await apiCall('system.delete_user', {name: users[selection[0]].name}); + let res = await apiCall('system.users.delete', {name: users[selection[0]].name}); if (res.Error === null) { console.debug('deleted user'); } else { diff --git a/client/src/pages/vpn/WireguardInterfaces.vue b/client/src/pages/vpn/wireguard_interfaces.vue similarity index 82% rename from client/src/pages/vpn/WireguardInterfaces.vue rename to client/src/pages/vpn/wireguard_interfaces.vue index e719415..8b6de3a 100644 --- a/client/src/pages/vpn/WireguardInterfaces.vue +++ b/client/src/pages/vpn/wireguard_interfaces.vue @@ -31,7 +31,7 @@ const displayData = $computed(() => { async function load(){ loading = true; - let res = await apiCall('vpn.wireguard.get_interfaces', {}); + let res = await apiCall('vpn.wireguard.interfaces.list', {}); if (res.Error === null) { console.debug('interfaces', res.Data); interfaces = res.Data; @@ -42,7 +42,7 @@ async function load(){ } async function deleteInterface(){ - let res = await apiCall('vpn.wireguard_delete_interface', {name: displayData[selection[0]].name}); + let res = await apiCall('vpn.wireguard.interfaces.delete', {name: displayData[selection[0]].name}); if (res.Error === null) { console.debug('deleted interface'); } else { @@ -52,7 +52,7 @@ async function deleteInterface(){ } async function editInterface() { - p.router.push(`/vpn/wireguardinterfaces/edit/${ displayData[selection[0]].name}`); + p.router.push(`/vpn/wireguard_interfaces/edit/${ displayData[selection[0]].name}`); } onMounted(async() => { @@ -64,7 +64,7 @@ onMounted(async() => {