bitwarden_sm/projects/
project_response.rs

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