diff --git a/core/src/error.rs b/core/src/error.rs index 5273c4c..ee3ac40 100644 --- a/core/src/error.rs +++ b/core/src/error.rs @@ -14,6 +14,8 @@ pub enum ServiceError { Forbidden, #[error("Session expired, please login again")] ExpiredSession, + #[error("Missing details")] + MissingDetails, #[error("User already exists")] UserAlreadyExists, #[error("Candidate not found")] @@ -82,6 +84,7 @@ impl ServiceError { // 4XX ServiceError::InvalidApplicationId => 400, ServiceError::ParentOverflow => 400, + ServiceError::MissingDetails => 400, ServiceError::Unauthorized => 401, ServiceError::InvalidCredentials => 401, ServiceError::ExpiredSession => 401, diff --git a/core/src/models/candidate_details.rs b/core/src/models/candidate_details.rs index 335b83c..e3f95b0 100644 --- a/core/src/models/candidate_details.rs +++ b/core/src/models/candidate_details.rs @@ -358,9 +358,9 @@ impl EncryptedApplicationDetails { } } -impl From<(&candidate::Model, Vec)> for EncryptedApplicationDetails { +impl From<(&candidate::Model, &Vec)> for EncryptedApplicationDetails { fn from( - (candidate, parents): (&candidate::Model, Vec), + (candidate, parents): (&candidate::Model, &Vec), ) -> Self { let enc_parents = parents.iter() .map(|m| EncryptedParentDetails::from(m)) @@ -509,7 +509,7 @@ pub mod tests { let (_, candidate, parents) = put_user_data(&db).await; - let encrypted_details = EncryptedApplicationDetails::try_from((&candidate, parents)).unwrap(); + let encrypted_details = EncryptedApplicationDetails::try_from((&candidate, &parents)).unwrap(); let application_details = encrypted_details .decrypt(PRIVATE_KEY.to_string()) // decrypt with admin's private key diff --git a/core/src/services/application_service.rs b/core/src/services/application_service.rs index 693b0f6..991184c 100644 --- a/core/src/services/application_service.rs +++ b/core/src/services/application_service.rs @@ -237,7 +237,7 @@ impl ApplicationService { let candidate = ApplicationService::find_related_candidate(db, application).await?; let parents = Query::find_candidate_parents(db, &candidate).await?; - let enc_details = EncryptedApplicationDetails::from((&candidate, parents)); + let enc_details = EncryptedApplicationDetails::from((&candidate, &parents)); if enc_details.is_filled() { enc_details.decrypt(private_key).await @@ -330,7 +330,7 @@ impl ApplicationService { recipients.append(&mut admin_public_keys); recipients.append(&mut applications.iter().map(|a| a.public_key.to_owned()).collect()); - let dec_details = EncryptedApplicationDetails::from((&candidate, parents.clone())) + let dec_details = EncryptedApplicationDetails::from((&candidate, &parents)) .decrypt(admin_private_key).await?; let enc_details = EncryptedApplicationDetails::new(&dec_details, recipients).await?; diff --git a/core/src/services/candidate_service.rs b/core/src/services/candidate_service.rs index 46a4976..223b8c1 100644 --- a/core/src/services/candidate_service.rs +++ b/core/src/services/candidate_service.rs @@ -134,7 +134,7 @@ pub mod tests { let dec_priv_key = crypto::decrypt_password(application.private_key.clone(), password) .await .unwrap(); - let enc_details = EncryptedApplicationDetails::try_from((&enc_candidate, enc_parent)) + let enc_details = EncryptedApplicationDetails::try_from((&enc_candidate, &enc_parent)) .ok() .unwrap(); let dec_details = enc_details.decrypt(dec_priv_key).await.ok().unwrap(); diff --git a/core/src/services/parent_service.rs b/core/src/services/parent_service.rs index 74cb8d0..2367b0f 100644 --- a/core/src/services/parent_service.rs +++ b/core/src/services/parent_service.rs @@ -117,7 +117,7 @@ mod tests { .unwrap(); let priv_key = crypto::decrypt_password(application.private_key.clone(), plain_text_password).await.unwrap(); - let dec_details = EncryptedApplicationDetails::try_from((&candidate, parents)) + let dec_details = EncryptedApplicationDetails::try_from((&candidate, &parents)) .unwrap() .decrypt(priv_key) .await diff --git a/core/src/utils/csv.rs b/core/src/utils/csv.rs index 4a09f61..ff4d740 100644 --- a/core/src/utils/csv.rs +++ b/core/src/utils/csv.rs @@ -57,7 +57,7 @@ pub async fn export(db: &DbConn, private_key: String) -> Result, Service let candidate = ApplicationService::find_related_candidate(db, &application).await?; let parents = Query::find_candidate_parents(db, &candidate).await?; - let row: ApplicationRow = match EncryptedApplicationDetails::try_from((&candidate, parents)) + let row: ApplicationRow = match EncryptedApplicationDetails::try_from((&candidate, &parents)) { Ok(d) => ApplicationRow::from( d.decrypt(private_key.to_string())