diff --git a/bin/core/src/requests/read/mod.rs b/bin/core/src/requests/read/mod.rs index 07412026f..caf897948 100644 --- a/bin/core/src/requests/read/mod.rs +++ b/bin/core/src/requests/read/mod.rs @@ -35,6 +35,7 @@ mod user; enum ReadRequest { GetVersion(GetVersion), GetUser(GetUser), + GetUsers(GetUsers), GetUsername(GetUsername), GetCoreInfo(GetCoreInfo), diff --git a/bin/core/src/requests/read/user.rs b/bin/core/src/requests/read/user.rs index 0eac097c6..a5157688c 100644 --- a/bin/core/src/requests/read/user.rs +++ b/bin/core/src/requests/read/user.rs @@ -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 for State { }) } } + +#[async_trait] +impl Resolve for State { + async fn resolve(&self, GetUsers {}: GetUsers, user: RequestUser) -> anyhow::Result> { + 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) + } +} diff --git a/client/ts/src/responses.ts b/client/ts/src/responses.ts index ecefe44c8..78c89ac95 100644 --- a/client/ts/src/responses.ts +++ b/client/ts/src/responses.ts @@ -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; diff --git a/client/ts/src/types.ts b/client/ts/src/types.ts index 331b08194..f5d262627 100644 --- a/client/ts/src/types.ts +++ b/client/ts/src/types.ts @@ -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 } diff --git a/lib/types/src/requests/read/mod.rs b/lib/types/src/requests/read/mod.rs index db8e10708..f3c7c989c 100644 --- a/lib/types/src/requests/read/mod.rs +++ b/lib/types/src/requests/read/mod.rs @@ -48,6 +48,13 @@ pub struct GetUser {} // +#[typeshare] +#[derive(Serialize, Deserialize, Debug, Clone, Request)] +#[response(Vec)] +pub struct GetUsers {} + +// + #[typeshare] #[derive(Serialize, Deserialize, Debug, Clone, Request)] #[response(GetUsernameResponse)] diff --git a/runfile.toml b/runfile.toml new file mode 100644 index 000000000..4824af5fc --- /dev/null +++ b/runfile.toml @@ -0,0 +1,3 @@ +[gen-ts-types] +description = "generates typescript types for the ts client" +cmd = "node ./client/ts/generate_types.mjs"