From c75944f990848985a84f072cb25e8259f8c51b50 Mon Sep 17 00:00:00 2001 From: Samuel Lorch Date: Sat, 28 Oct 2023 21:02:31 +0200 Subject: [PATCH] Add vpn get and config rpc calls --- src/api/config.rs | 25 +++++++++++++++++++++++++ src/api/mod.rs | 38 ++++++++++++++++++++++++++++++++++++++ src/api/vpn.rs | 41 +++++++++++++++++++++++++++++++++++++++++ src/config_manager.rs | 9 +++++++++ 4 files changed, 113 insertions(+) create mode 100644 src/api/config.rs create mode 100644 src/api/vpn.rs diff --git a/src/api/config.rs b/src/api/config.rs new file mode 100644 index 0000000..04f3c53 --- /dev/null +++ b/src/api/config.rs @@ -0,0 +1,25 @@ +use jsonrpsee::types::Params; + +use crate::state::RpcState; + +use super::ApiError; + +pub fn get_pending_changelog(_: Params, state: &RpcState) -> Result<(), ApiError> { + Err(ApiError::Leet) +} + +pub fn apply_pending_changes(_: Params, state: &RpcState) -> Result<(), ApiError> { + state + .config_manager + .clone() + .apply_pending_changes() + .map_err(|source| ApiError::Leet) +} + +pub fn discard_pending_changes(_: Params, state: &RpcState) -> Result<(), ApiError> { + state + .config_manager + .clone() + .discard_pending_changes() + .map_err(|source| ApiError::Leet) +} diff --git a/src/api/mod.rs b/src/api/mod.rs index 5756ce3..b1e28ce 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -1,8 +1,10 @@ +mod config; mod firewall; mod network; mod object; mod service; mod system; +mod vpn; use crate::state::RpcState; use jsonrpsee::{ @@ -89,5 +91,41 @@ pub fn new_rpc_module(state: RpcState) -> RpcModule { ) .unwrap(); + module + .register_method( + "config.get_pending_changelog", + config::get_pending_changelog, + ) + .unwrap(); + + module + .register_method( + "config.apply_pending_changes", + config::apply_pending_changes, + ) + .unwrap(); + + module + .register_method( + "config.discard_pending_changes", + config::discard_pending_changes, + ) + .unwrap(); + + module + .register_method("vpn.get_wireguard_status", vpn::get_wireguard_status) + .unwrap(); + + module + .register_method( + "vpn.get_wireguard_interfaces", + vpn::get_wireguard_interfaces, + ) + .unwrap(); + + module + .register_method("vpn.get_wireguard_peers", vpn::get_wireguard_peers) + .unwrap(); + module } diff --git a/src/api/vpn.rs b/src/api/vpn.rs new file mode 100644 index 0000000..c4d2cf3 --- /dev/null +++ b/src/api/vpn.rs @@ -0,0 +1,41 @@ +use std::collections::HashMap; + +use jsonrpsee::types::Params; + +use crate::{ + definitions::{ + service::{DHCPServer, DNSServer, NTPServer}, + vpn::{WireguardInterface, WireguardPeer}, + }, + state::RpcState, +}; + +use super::ApiError; + +pub fn get_wireguard_status(_: Params, state: &RpcState) -> Result { + Ok("ok".to_string()) +} + +pub fn get_wireguard_interfaces( + _: Params, + state: &RpcState, +) -> Result, ApiError> { + Ok(state + .config_manager + .get_pending_config() + .vpn + .wireguard + .interfaces) +} + +pub fn get_wireguard_peers( + _: Params, + state: &RpcState, +) -> Result, ApiError> { + Ok(state + .config_manager + .get_pending_config() + .vpn + .wireguard + .peers) +} diff --git a/src/config_manager.rs b/src/config_manager.rs index 79c2db2..6dcf73a 100644 --- a/src/config_manager.rs +++ b/src/config_manager.rs @@ -1,5 +1,7 @@ use validator::Validate; +use crate::api::ApiError; + use super::definitions::config::Config; use std::fs; use std::sync::{Arc, Mutex, MutexGuard}; @@ -17,6 +19,13 @@ custom_error! { pub ConfigError UnsupportedVersionError = "unsupported config version", } +// TODO do Error conversion +impl Into for ConfigError { + fn into(self) -> ApiError { + ApiError::Leet + } +} + pub const CURRENT_CONFIG_PATH: &str = "config.json"; pub const PENDING_CONFIG_PATH: &str = "pending.json";