add get users route (admin only)

This commit is contained in:
mbecker20
2023-09-14 04:19:44 -04:00
parent be9937355b
commit be78e4c48a
6 changed files with 39 additions and 3 deletions

View File

@@ -35,6 +35,7 @@ mod user;
enum ReadRequest {
GetVersion(GetVersion),
GetUser(GetUser),
GetUsers(GetUsers),
GetUsername(GetUsername),
GetCoreInfo(GetCoreInfo),

View File

@@ -1,8 +1,8 @@
use anyhow::Context;
use anyhow::{anyhow, Context};
use async_trait::async_trait;
use monitor_types::{
entities::user::User,
requests::read::{GetUser, GetUsername, GetUsernameResponse},
requests::read::{GetUser, GetUsername, GetUsernameResponse, GetUsers},
};
use resolver_api::Resolve;
@@ -45,3 +45,22 @@ impl Resolve<GetUsername, RequestUser> for State {
})
}
}
#[async_trait]
impl Resolve<GetUsers, RequestUser> for State {
async fn resolve(&self, GetUsers {}: GetUsers, user: RequestUser) -> anyhow::Result<Vec<User>> {
if !user.is_admin {
return Err(anyhow!("this route is only accessable by admins"));
}
let mut users = self
.db
.users
.get_some(None, None)
.await
.context("failed to pull users from db")?;
users.iter_mut().for_each(|user| {
user.secrets = Vec::new();
});
Ok(users)
}
}

View File

@@ -11,6 +11,7 @@ export type AuthResponses = {
export type ReadResponses = {
GetVersion: Types.GetVersionResponse;
GetUser: Types.User;
GetUsers: Types.User[];
GetUsername: Types.GetUsernameResponse;
GetCoreInfo: Types.GetCoreInfoResponse;

View File

@@ -314,7 +314,8 @@ export type AlertData =
| { type: "ContainerStateChange", data: {
id: string;
name: string;
server: string;
server_id: string;
server_name: string;
from: DockerContainerState;
to: DockerContainerState;
}}
@@ -983,6 +984,9 @@ export interface GetVersionResponse {
export interface GetUser {
}
export interface GetUsers {
}
export interface GetUsername {
user_id: string;
}
@@ -1423,6 +1427,7 @@ export type ExecuteRequest =
export type ReadRequest =
| { type: "GetVersion", params: GetVersion }
| { type: "GetUser", params: GetUser }
| { type: "GetUsers", params: GetUsers }
| { type: "GetUsername", params: GetUsername }
| { type: "GetCoreInfo", params: GetCoreInfo }
| { type: "FindResources", params: FindResources }

View File

@@ -48,6 +48,13 @@ pub struct GetUser {}
//
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Request)]
#[response(Vec<User>)]
pub struct GetUsers {}
//
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Request)]
#[response(GetUsernameResponse)]

3
runfile.toml Normal file
View File

@@ -0,0 +1,3 @@
[gen-ts-types]
description = "generates typescript types for the ts client"
cmd = "node ./client/ts/generate_types.mjs"