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#[derive(Serialize, Deserialize, Debug, JsonSchema)]
15#[serde(rename_all = "camelCase", deny_unknown_fields)]
16pub struct ProjectResponse {
17 pub id: Uuid,
18 pub organization_id: Uuid,
19 pub name: String,
20 pub creation_date: DateTime<Utc>,
21 pub revision_date: DateTime<Utc>,
22}
23
24impl ProjectResponse {
25 pub(crate) fn process_response(
26 response: ProjectResponseModel,
27 ctx: &mut KeyStoreContext<KeyIds>,
28 ) -> Result<Self, SecretsManagerError> {
29 let organization_id = require!(response.organization_id);
30 let key = SymmetricKeyId::Organization(organization_id);
31
32 let name = require!(response.name)
33 .parse::<EncString>()?
34 .decrypt(ctx, key)?;
35
36 Ok(ProjectResponse {
37 id: require!(response.id),
38 organization_id,
39 name,
40
41 creation_date: require!(response.creation_date).parse()?,
42 revision_date: require!(response.revision_date).parse()?,
43 })
44 }
45}