bitwarden_sm/projects/
project_response.rs

1use 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}