add user management features

This commit is contained in:
mbecker20
2023-01-02 08:15:43 +00:00
parent a491f206c9
commit 5e205efd29
28 changed files with 368 additions and 93 deletions

View File

@@ -101,6 +101,10 @@ impl MonitorClient {
.await
}
pub async fn list_users(&self) -> anyhow::Result<Vec<User>> {
self.get("/api/users", Option::<()>::None).await
}
async fn get<R: DeserializeOwned>(
&self,
endpoint: &str,

View File

@@ -29,7 +29,7 @@ impl MonitorClient {
enabled: bool,
) -> anyhow::Result<Update> {
self.post(
"/api/permissions/update",
"/api/permissions/modify_enabled",
json!({
"user_id": user_id,
"enabled": enabled,
@@ -37,4 +37,19 @@ impl MonitorClient {
)
.await
}
pub async fn modify_user_create_server_permissions(
&self,
user_id: &str,
create_server_permissions: bool,
) -> anyhow::Result<Update> {
self.post(
"/api/permissions/modify_create_server",
json!({
"user_id": user_id,
"create_server_permissions": create_server_permissions,
}),
)
.await
}
}

View File

@@ -5,7 +5,10 @@ use monitor_types::{
SystemStats, SystemStatsQuery,
};
use serde_json::{json, Value};
use tokio::{task::JoinHandle, sync::broadcast::{Receiver, self}};
use tokio::{
sync::broadcast::{self, Receiver},
task::JoinHandle,
};
use tokio_tungstenite::{connect_async, tungstenite::Message};
use tokio_util::sync::CancellationToken;
@@ -96,7 +99,11 @@ impl MonitorClient {
&self,
server_id: &str,
query: impl Into<Option<SystemStatsQuery>>,
) -> anyhow::Result<(Receiver<SystemStats>, JoinHandle<anyhow::Result<()>>, CancellationToken)> {
) -> anyhow::Result<(
Receiver<SystemStats>,
JoinHandle<anyhow::Result<()>>,
CancellationToken,
)> {
let query = query.into().unwrap_or_default();
let endpoint = format!(
"{}/ws/stats/{server_id}?networks={}&components={}&processes={}",
@@ -123,8 +130,11 @@ impl MonitorClient {
stats = socket.next() => stats,
};
if let Some(Ok(Message::Text(stats))) = stats {
let stats: SystemStats = serde_json::from_str(&stats).context("failed to parse msg as SystemStats")?;
sender.send(stats).context("failed to send stats through broadcast channel")?;
let stats: SystemStats = serde_json::from_str(&stats)
.context("failed to parse msg as SystemStats")?;
sender
.send(stats)
.context("failed to send stats through broadcast channel")?;
}
}
Ok(())