Add RPC endpoint for adding toml configs
This commit is contained in:
parent
ae8ea8ae54
commit
dd3f5d0d92
4 changed files with 14 additions and 5 deletions
|
|
@ -17,7 +17,7 @@ use crate::{
|
||||||
ServerConfig,
|
ServerConfig,
|
||||||
ServerInfo,
|
ServerInfo,
|
||||||
},
|
},
|
||||||
database::{get_connection, load_interface},
|
database::{get_connection, load_interface, dump_interface},
|
||||||
wireguard::{Config, Interface},
|
wireguard::{Config, Interface},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -116,7 +116,10 @@ impl DaemonInstance {
|
||||||
.await?;
|
.await?;
|
||||||
Ok(DaemonResponseData::None)
|
Ok(DaemonResponseData::None)
|
||||||
}
|
}
|
||||||
DaemonCommand::AddConfigToml(interface_id, config_toml) => {
|
DaemonCommand::AddConfigToml(config_toml) => {
|
||||||
|
let conn = get_connection(self.db_path.as_deref())?;
|
||||||
|
let cfig = Config::from_toml(&config_toml)?;
|
||||||
|
let _if_id = dump_interface(&conn, &cfig)?;
|
||||||
Ok(DaemonResponseData::None)
|
Ok(DaemonResponseData::None)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ pub enum DaemonCommand {
|
||||||
ServerConfig,
|
ServerConfig,
|
||||||
Stop,
|
Stop,
|
||||||
ReloadConfig(String),
|
ReloadConfig(String),
|
||||||
AddConfigToml(String, String),
|
AddConfigToml(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
|
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ pub fn load_interface(conn: &Connection, interface_id: &str) -> Result<Config> {
|
||||||
Ok(Config { interface: iface, peers })
|
Ok(Config { interface: iface, peers })
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn dump_interface(conn: &Connection, config: &Config) -> Result<()> {
|
pub fn dump_interface(conn: &Connection, config: &Config) -> Result<i64> {
|
||||||
let mut stmt = conn.prepare("INSERT INTO wg_interface (private_key, dns, address, listen_port, mtu) VALUES (?, ?, ?, ?, ?)")?;
|
let mut stmt = conn.prepare("INSERT INTO wg_interface (private_key, dns, address, listen_port, mtu) VALUES (?, ?, ?, ?, ?)")?;
|
||||||
let cif = &config.interface;
|
let cif = &config.interface;
|
||||||
stmt.execute(params![
|
stmt.execute(params![
|
||||||
|
|
@ -113,7 +113,7 @@ pub fn dump_interface(conn: &Connection, config: &Config) -> Result<()> {
|
||||||
&peer.endpoint
|
&peer.endpoint
|
||||||
])?;
|
])?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(interface_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_connection(path: Option<&Path>) -> Result<Connection> {
|
pub fn get_connection(path: Option<&Path>) -> Result<Connection> {
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,12 @@ impl Default for Config {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Config {
|
||||||
|
pub fn from_toml(toml: &str) -> Result<Self> {
|
||||||
|
toml::from_str(toml).map_err(Into::into)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue