diff --git a/crates/jmap/src/api/request.rs b/crates/jmap/src/api/request.rs index 0f474be1..aec30809 100644 --- a/crates/jmap/src/api/request.rs +++ b/crates/jmap/src/api/request.rs @@ -231,7 +231,7 @@ impl JMAP { query::RequestArguments::Quota => { access_token.assert_is_member(req.account_id)?; - self.quota_query(req).await?.into() + self.quota_query(req, access_token).await?.into() } }, RequestMethod::Set(mut req) => match req.take_arguments() { diff --git a/crates/jmap/src/changes/query.rs b/crates/jmap/src/changes/query.rs index cbeaf7ea..197a0259 100644 --- a/crates/jmap/src/changes/query.rs +++ b/crates/jmap/src/changes/query.rs @@ -98,7 +98,7 @@ impl JMAP { query::RequestArguments::EmailSubmission => { self.email_submission_query(query).await? } - query::RequestArguments::Quota => self.quota_query(query).await?, + query::RequestArguments::Quota => self.quota_query(query, access_token).await?, _ => unreachable!(), }; diff --git a/crates/jmap/src/quota/get.rs b/crates/jmap/src/quota/get.rs index ad2d6690..d6cda5df 100644 --- a/crates/jmap/src/quota/get.rs +++ b/crates/jmap/src/quota/get.rs @@ -50,11 +50,15 @@ impl JMAP { Property::Types, ]); let account_id = request.account_id.document_id(); - let quota_ids = [0u32]; + let quota_ids = if access_token.quota > 0 { + vec![0u32] + } else { + vec![] + }; let ids = if let Some(ids) = ids { ids } else { - vec![Id::new(0)] + quota_ids.iter().map(|id| Id::from(*id)).collect() }; let mut response = GetResponse { account_id: request.account_id.into(), diff --git a/crates/jmap/src/quota/query.rs b/crates/jmap/src/quota/query.rs index 48e8834f..5add882e 100644 --- a/crates/jmap/src/quota/query.rs +++ b/crates/jmap/src/quota/query.rs @@ -27,19 +27,24 @@ use jmap_proto::{ types::{id::Id, state::State}, }; -use crate::JMAP; +use crate::{auth::AccessToken, JMAP}; impl JMAP { pub async fn quota_query( &self, request: QueryRequest, + access_token: &AccessToken, ) -> Result { Ok(QueryResponse { account_id: request.account_id, query_state: State::Initial, can_calculate_changes: false, position: 0, - ids: vec![Id::new(0)], + ids: if access_token.quota > 0 { + vec![Id::new(0)] + } else { + vec![] + }, total: Some(1), limit: None, })