mirror of
https://github.com/moghtech/komodo.git
synced 2026-03-11 17:44:19 -05:00
add get users route (admin only)
This commit is contained in:
@@ -35,6 +35,7 @@ mod user;
|
||||
enum ReadRequest {
|
||||
GetVersion(GetVersion),
|
||||
GetUser(GetUser),
|
||||
GetUsers(GetUsers),
|
||||
GetUsername(GetUsername),
|
||||
GetCoreInfo(GetCoreInfo),
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -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
3
runfile.toml
Normal file
@@ -0,0 +1,3 @@
|
||||
[gen-ts-types]
|
||||
description = "generates typescript types for the ts client"
|
||||
cmd = "node ./client/ts/generate_types.mjs"
|
||||
Reference in New Issue
Block a user