From cd2b9ec4ed0e8e8aa176fbb6f8e14d27fa06581c Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Sun, 5 May 2024 16:35:55 -0700 Subject: [PATCH] validate name not taken on LaunchServer --- bin/core/src/api/execute/server_template.rs | 23 +++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/bin/core/src/api/execute/server_template.rs b/bin/core/src/api/execute/server_template.rs index 708da6a49..a5085c3fb 100644 --- a/bin/core/src/api/execute/server_template.rs +++ b/bin/core/src/api/execute/server_template.rs @@ -1,3 +1,4 @@ +use anyhow::{anyhow, Context}; use axum::async_trait; use monitor_client::{ api::{execute::LaunchServer, write::CreateServer}, @@ -10,6 +11,7 @@ use monitor_client::{ Operation, }, }; +use mungos::mongodb::bson::doc; use resolver_api::Resolve; use serror::serialize_error_pretty; @@ -19,7 +21,7 @@ use crate::{ resource::StateResource, update::{add_update, make_update, update_update}, }, - state::State, + state::{db_client, State}, }; #[async_trait] @@ -33,6 +35,23 @@ impl Resolve for State { }: LaunchServer, user: User, ) -> anyhow::Result { + // validate name isn't already taken by another server + if db_client() + .await + .servers + .find_one( + doc! { + "name": &name + }, + None, + ) + .await + .context("failed to query db for servers")? + .is_some() + { + return Err(anyhow!("name is already taken")); + } + let template = ServerTemplate::get_resource_check_permissions( &server_template, &user, @@ -95,7 +114,7 @@ impl Resolve for State { ); } }; - + update.finalize(); update_update(update.clone()).await?; Ok(update)