bitwarden_sm/projects/
project_response.rs1use bitwarden_api_api::models::ProjectResponseModel;
2use bitwarden_core::{
3 key_management::{KeyIds, SymmetricKeyId},
4 require,
5};
6use bitwarden_crypto::{Decryptable, EncString, KeyStoreContext};
7use chrono::{DateTime, Utc};
8use schemars::JsonSchema;
9use serde::{Deserialize, Serialize};
10use uuid::Uuid;
11
12use crate::error::SecretsManagerError;
13
14#[allow(missing_docs)]
15#[derive(Serialize, Deserialize, Debug, JsonSchema)]
16#[serde(rename_all = "camelCase", deny_unknown_fields)]
17pub struct ProjectResponse {
18 pub id: Uuid,
19 pub organization_id: Uuid,
20 pub name: String,
21 pub creation_date: DateTime<Utc>,
22 pub revision_date: DateTime<Utc>,
23}
24
25impl ProjectResponse {
26 pub(crate) fn process_response(
27 response: ProjectResponseModel,
28 ctx: &mut KeyStoreContext<KeyIds>,
29 ) -> Result<Self, SecretsManagerError> {
30 let organization_id = require!(response.organization_id);
31 let key = SymmetricKeyId::Organization(organization_id);
32
33 let name = require!(response.name)
34 .parse::<EncString>()?
35 .decrypt(ctx, key)?;
36
37 Ok(ProjectResponse {
38 id: require!(response.id),
39 organization_id,
40 name,
41
42 creation_date: require!(response.creation_date).parse()?,
43 revision_date: require!(response.revision_date).parse()?,
44 })
45 }
46}