mirror of
https://github.com/speatzle/nfsense.git
synced 2025-05-10 18:38:22 +00:00
Add RPC Delete Macro
This commit is contained in:
parent
7d2ef675f7
commit
eecdb51509
6 changed files with 148 additions and 5 deletions
|
@ -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<RpcState>) {
|
|||
)
|
||||
.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<RpcState>) {
|
|||
)
|
||||
.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<RpcState>) {
|
|||
get_things!(firewall.source_nat_rules),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
module
|
||||
.register_method(
|
||||
"firewall.delete_source_nat_rule",
|
||||
delete_vec_thing!(firewall.source_nat_rules),
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
|
|
@ -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<RpcState> {
|
||||
let mut module = RpcModule::new(state);
|
||||
|
||||
|
|
|
@ -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<RpcState>) {
|
|||
)
|
||||
.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<RpcState>) {
|
|||
get_things!(network.interfaces),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
module
|
||||
.register_method(
|
||||
"network.delete_interface",
|
||||
delete_map_thing!(network.interfaces),
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
|
|
@ -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<RpcState>) {
|
|||
)
|
||||
.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<RpcState>) {
|
|||
get_things!(object.addresses),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
module
|
||||
.register_method("object.delete_address", delete_map_thing!(object.addresses))
|
||||
.unwrap();
|
||||
}
|
||||
|
|
|
@ -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<RpcState>) {
|
|||
)
|
||||
.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<RpcState>) {
|
|||
)
|
||||
.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<RpcState>) {
|
|||
get_things!(service.ntp_servers),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
module
|
||||
.register_method(
|
||||
"service.delete_ntp_server",
|
||||
delete_vec_thing!(service.ntp_servers),
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
|
|
@ -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<RpcState>) {
|
|||
)
|
||||
.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<RpcState>) {
|
|||
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<String, ApiError> {
|
||||
|
|
Loading…
Add table
Reference in a new issue