165 lines
5.2 KiB
Rust
165 lines
5.2 KiB
Rust
pub use crate::interface::types::{
|
|
AddWireguardPeerInput, AddWireguardPeerOutput, AllowedAddresses, WireguardInterface,
|
|
WireguardPeer,
|
|
};
|
|
use crate::{Client, ClientError};
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
/// list all wireguard interfaces
|
|
pub async fn list(client: &mut Client) -> Result<Vec<WireguardInterface>, ClientError> {
|
|
let url = format!("{}/wireguard", super::BASE);
|
|
|
|
client.execute_get::<Vec<WireguardInterface>>(&url).await
|
|
}
|
|
|
|
/// get wireguard interface with the provided id
|
|
pub async fn get(client: &mut Client, wg_id: &str) -> Result<WireguardInterface, ClientError> {
|
|
let url = format!("{}/wireguard/{}", super::BASE, wg_id);
|
|
|
|
client.execute_get::<WireguardInterface>(&url).await
|
|
}
|
|
|
|
/// list all wireguard peers
|
|
pub async fn list_peers(client: &mut Client) -> Result<Vec<WireguardPeer>, ClientError> {
|
|
let url = format!("{}/wireguard/peers", super::BASE);
|
|
|
|
client.execute_get::<Vec<WireguardPeer>>(&url).await
|
|
}
|
|
|
|
/// get wireguard peers with the given id
|
|
pub async fn get_peer(client: &mut Client, peer_id: &str) -> Result<WireguardPeer, ClientError> {
|
|
let url = format!("{}/wireguard/peers/{}", super::BASE, peer_id);
|
|
|
|
client.execute_get::<WireguardPeer>(&url).await
|
|
}
|
|
|
|
/// add a wireguard peer
|
|
pub async fn add_peer(
|
|
client: &mut Client,
|
|
peer: AddWireguardPeerInput,
|
|
) -> Result<AddWireguardPeerOutput, ClientError> {
|
|
let url = format!("{}/wireguard/peers/add", super::BASE);
|
|
|
|
client
|
|
.execute_post::<AddWireguardPeerInput, AddWireguardPeerOutput>(&url, peer)
|
|
.await
|
|
}
|
|
|
|
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
struct RemovePeerInput {
|
|
pub numbers: String,
|
|
}
|
|
|
|
/// remove wireguard peer with given id
|
|
pub async fn remove_peer(client: &mut Client, peer_id: &str) -> Result<(), ClientError> {
|
|
let url = format!("{}/wireguard/peers/remove", super::BASE);
|
|
|
|
client
|
|
.execute_post_with_no_response::<RemovePeerInput>(
|
|
&url,
|
|
RemovePeerInput {
|
|
numbers: peer_id.to_string(),
|
|
},
|
|
)
|
|
.await
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
use std::{net::IpAddr, str::FromStr};
|
|
|
|
use crate::interface::types::AllowedAddresses;
|
|
|
|
use super::*;
|
|
use ipnetwork::IpNetwork;
|
|
use reqwest::Url;
|
|
|
|
#[tokio::test]
|
|
async fn list_wireguard_interfaces() -> Result<(), ClientError> {
|
|
let base = Url::parse("https://10.0.10.1")?;
|
|
let mut client = Client::new(base, "admin".to_string(), "ifd783far".to_string(), true)
|
|
.expect("error in creating client");
|
|
|
|
let response = crate::interface::wireguard::list(&mut client).await?;
|
|
|
|
println!("{:?}", response);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn get_wireguard_interfaces() -> Result<(), ClientError> {
|
|
let base = Url::parse("https://10.0.10.1")?;
|
|
let mut client = Client::new(base, "admin".to_string(), "ifd783far".to_string(), true)
|
|
.expect("error in creating client");
|
|
|
|
let response = crate::interface::wireguard::list(&mut client).await?;
|
|
|
|
let response = crate::interface::wireguard::get(&mut client, &response[0].id).await?;
|
|
|
|
println!("{:?}", response);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn list_wireguard_peers() -> Result<(), ClientError> {
|
|
let base = Url::parse("https://10.0.10.1")?;
|
|
let mut client = Client::new(base, "admin".to_string(), "ifd783far".to_string(), true)
|
|
.expect("error in creating client");
|
|
|
|
let response = crate::interface::wireguard::list_peers(&mut client).await?;
|
|
|
|
println!("{:?}", response);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn get_wireguard_peers() -> Result<(), ClientError> {
|
|
let base = Url::parse("https://10.0.10.1")?;
|
|
let mut client = Client::new(base, "admin".to_string(), "ifd783far".to_string(), true)
|
|
.expect("error in creating client");
|
|
|
|
let response = crate::interface::wireguard::list_peers(&mut client).await?;
|
|
|
|
let response = crate::interface::wireguard::get_peer(&mut client, &response[0].id).await?;
|
|
|
|
println!("{:?}", response);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn add_remove_wireguard_peer() -> Result<(), ClientError> {
|
|
let base = Url::parse("https://10.0.10.1")?;
|
|
let mut client = Client::new(base, "admin".to_string(), "ifd783far".to_string(), true)
|
|
.expect("error in creating client");
|
|
|
|
let response = crate::interface::wireguard::add_peer(
|
|
&mut client,
|
|
AddWireguardPeerInput {
|
|
allowed_address: AllowedAddresses(vec![
|
|
IpNetwork::from_str("10.10.0.1/24").unwrap(),
|
|
IpNetwork::from_str("10.10.0.2").unwrap(),
|
|
]),
|
|
comment: None,
|
|
disabled: false,
|
|
endpoint_address: None,
|
|
endpoint_port: 0,
|
|
interface: "pia".to_string(),
|
|
persistent_keepalive: Some(10),
|
|
preshared_key: None,
|
|
public_key: "2DCHSS0QYE3a2t5Q5PjXaHXeLZhSeHRvjhdmlYke3Ho=".to_string(),
|
|
},
|
|
)
|
|
.await?;
|
|
|
|
println!("{:?}", response);
|
|
|
|
crate::interface::wireguard::remove_peer(&mut client, &response.ret).await?;
|
|
|
|
Ok(())
|
|
}
|
|
}
|