forked from github-starred/komodo
list updates for admin
This commit is contained in:
@@ -17,14 +17,15 @@ use monitor_types::{
|
||||
monitor_timestamp,
|
||||
permissioned::Permissioned,
|
||||
};
|
||||
use mungos::{mongodb::bson::doc, AggStage::*};
|
||||
use periphery_client::{requests, PeripheryClient};
|
||||
use rand::{thread_rng, Rng};
|
||||
|
||||
use crate::{auth::RequestUser, state::State};
|
||||
|
||||
pub mod alert;
|
||||
pub mod cache;
|
||||
pub mod channel;
|
||||
pub mod alert;
|
||||
pub mod db;
|
||||
|
||||
pub fn empty_or_only_spaces(word: &str) -> bool {
|
||||
@@ -59,7 +60,6 @@ pub fn make_update(
|
||||
}
|
||||
|
||||
impl State {
|
||||
|
||||
// USER
|
||||
|
||||
pub async fn get_user(&self, user_id: &str) -> anyhow::Result<User> {
|
||||
@@ -230,6 +230,34 @@ impl State {
|
||||
Ok(build.get_user_permissions(user_id))
|
||||
}
|
||||
|
||||
pub async fn get_build_ids_for_non_admin(&self, user_id: &str) -> anyhow::Result<Vec<String>> {
|
||||
self.db
|
||||
.builds
|
||||
.aggregate_collect(
|
||||
[
|
||||
Match(doc! {
|
||||
format!("permissions.{}", user_id): { "$in": ["update", "execute", "read"] }
|
||||
}),
|
||||
Project(doc! { "_id": 1 }),
|
||||
],
|
||||
None,
|
||||
)
|
||||
.await
|
||||
.context("failed to get build ids for non admin | aggregation")?
|
||||
.into_iter()
|
||||
.map(|d| {
|
||||
let id = d
|
||||
.get("_id")
|
||||
.context("no _id field")?
|
||||
.as_object_id()
|
||||
.context("_id not ObjectId")?
|
||||
.to_string();
|
||||
anyhow::Ok(id)
|
||||
})
|
||||
.collect::<anyhow::Result<Vec<_>>>()
|
||||
.context("failed to get build ids for non admin | extract id from document")
|
||||
}
|
||||
|
||||
// BUILDER
|
||||
|
||||
pub async fn get_builder(&self, builder_id: &str) -> anyhow::Result<Builder> {
|
||||
|
||||
@@ -8,6 +8,7 @@ use monitor_types::{
|
||||
permissioned::Permissioned,
|
||||
requests::read::*,
|
||||
};
|
||||
use mungos::mongodb::bson::doc;
|
||||
use resolver_api::Resolve;
|
||||
|
||||
use crate::{auth::RequestUser, state::State};
|
||||
@@ -79,6 +80,19 @@ impl Resolve<GetBuildsSummary, RequestUser> for State {
|
||||
GetBuildsSummary {}: GetBuildsSummary,
|
||||
user: RequestUser,
|
||||
) -> anyhow::Result<GetBuildsSummaryResponse> {
|
||||
todo!()
|
||||
let query = if user.is_admin {
|
||||
None
|
||||
} else {
|
||||
let doc = doc! {
|
||||
|
||||
};
|
||||
Some(doc)
|
||||
};
|
||||
let total = self.db.builds.collection.count_documents(query, None).await.context("failed to count all build documents")?;
|
||||
|
||||
let res = GetBuildsSummaryResponse {
|
||||
total: total as u32
|
||||
};
|
||||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use async_trait::async_trait;
|
||||
use monitor_types::{entities::update::Update, requests::read::ListUpdates};
|
||||
use mungos::mongodb::{bson::doc, options::FindOptions};
|
||||
use resolver_api::Resolve;
|
||||
|
||||
use crate::{auth::RequestUser, state::State};
|
||||
@@ -11,7 +12,19 @@ impl Resolve<ListUpdates, RequestUser> for State {
|
||||
ListUpdates { query }: ListUpdates,
|
||||
user: RequestUser,
|
||||
) -> anyhow::Result<Vec<Update>> {
|
||||
|
||||
todo!()
|
||||
if user.is_admin {
|
||||
let updates = self
|
||||
.db
|
||||
.updates
|
||||
.get_some(
|
||||
query,
|
||||
FindOptions::builder().sort(doc! { "ts": -1 }).build(),
|
||||
)
|
||||
.await?;
|
||||
Ok(updates)
|
||||
} else {
|
||||
let build_ids = self.get_build_ids_for_non_admin(&user.id).await?;
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user