Skip to main content

unifly_api/session/
wireguard.rs

1use serde_json::Value;
2use tracing::debug;
3
4use super::SessionClient;
5use crate::error::Error;
6
7impl SessionClient {
8    /// List WireGuard peers for a specific remote-access server via the v2 API.
9    ///
10    /// `GET /v2/api/site/{site}/wireguard/{server_id}/users?networkId={server_id}`
11    pub async fn list_wireguard_peers(&self, server_id: &str) -> Result<Vec<Value>, Error> {
12        let mut url = self.site_url_v2(&format!("wireguard/{server_id}/users"));
13        url.query_pairs_mut().append_pair("networkId", server_id);
14        debug!(server_id, "listing WireGuard peers (v2)");
15        let val = self.get_raw(url).await?;
16        Ok(val.as_array().cloned().unwrap_or_default())
17    }
18
19    /// List WireGuard peers across all servers via the v2 API.
20    ///
21    /// `GET /v2/api/site/{site}/wireguard/users`
22    pub async fn list_all_wireguard_peers(&self) -> Result<Vec<Value>, Error> {
23        let url = self.site_url_v2("wireguard/users");
24        debug!("listing all WireGuard peers (v2)");
25        let val = self.get_raw(url).await?;
26        Ok(val.as_array().cloned().unwrap_or_default())
27    }
28
29    /// List existing subnets already used by WireGuard peers.
30    ///
31    /// `GET /v2/api/site/{site}/wireguard/users/existing-subnets`
32    pub async fn get_wireguard_peer_existing_subnets(&self) -> Result<Value, Error> {
33        let url = self.site_url_v2("wireguard/users/existing-subnets");
34        debug!("listing WireGuard peer existing subnets (v2)");
35        self.get_raw(url).await
36    }
37
38    /// Create one or more WireGuard peers via the v2 API.
39    ///
40    /// `POST /v2/api/site/{site}/wireguard/{server_id}/users/batch`
41    pub async fn create_wireguard_peers(
42        &self,
43        server_id: &str,
44        body: &Value,
45    ) -> Result<Value, Error> {
46        let path = format!(
47            "v2/api/site/{}/wireguard/{server_id}/users/batch",
48            self.site()
49        );
50        debug!(server_id, "creating WireGuard peers (v2)");
51        self.raw_post(&path, body).await
52    }
53
54    /// Update one or more WireGuard peers via the v2 API.
55    ///
56    /// `PUT /v2/api/site/{site}/wireguard/{server_id}/users/batch`
57    pub async fn update_wireguard_peers(
58        &self,
59        server_id: &str,
60        body: &Value,
61    ) -> Result<Value, Error> {
62        let path = format!(
63            "v2/api/site/{}/wireguard/{server_id}/users/batch",
64            self.site()
65        );
66        debug!(server_id, "updating WireGuard peers (v2)");
67        self.raw_put(&path, body).await
68    }
69
70    /// Delete one or more WireGuard peers via the v2 API.
71    ///
72    /// `POST /v2/api/site/{site}/wireguard/{server_id}/users/batch_delete`
73    pub async fn delete_wireguard_peers(
74        &self,
75        server_id: &str,
76        body: &Value,
77    ) -> Result<Value, Error> {
78        let path = format!(
79            "v2/api/site/{}/wireguard/{server_id}/users/batch_delete",
80            self.site()
81        );
82        debug!(server_id, "deleting WireGuard peers (v2)");
83        self.raw_post(&path, body).await
84    }
85}