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