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#[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}