refactor: EncDetails from &parent::Model instead of parent::Model

This commit is contained in:
Sebastian Pravda 2023-01-19 22:48:05 +01:00
parent 339921a131
commit 9c2d1e18a2
No known key found for this signature in database
GPG key ID: F3BC84F08EFA3F57
6 changed files with 11 additions and 8 deletions

View file

@ -14,6 +14,8 @@ pub enum ServiceError {
Forbidden, Forbidden,
#[error("Session expired, please login again")] #[error("Session expired, please login again")]
ExpiredSession, ExpiredSession,
#[error("Missing details")]
MissingDetails,
#[error("User already exists")] #[error("User already exists")]
UserAlreadyExists, UserAlreadyExists,
#[error("Candidate not found")] #[error("Candidate not found")]
@ -82,6 +84,7 @@ impl ServiceError {
// 4XX // 4XX
ServiceError::InvalidApplicationId => 400, ServiceError::InvalidApplicationId => 400,
ServiceError::ParentOverflow => 400, ServiceError::ParentOverflow => 400,
ServiceError::MissingDetails => 400,
ServiceError::Unauthorized => 401, ServiceError::Unauthorized => 401,
ServiceError::InvalidCredentials => 401, ServiceError::InvalidCredentials => 401,
ServiceError::ExpiredSession => 401, ServiceError::ExpiredSession => 401,

View file

@ -358,9 +358,9 @@ impl EncryptedApplicationDetails {
} }
} }
impl From<(&candidate::Model, Vec<parent::Model>)> for EncryptedApplicationDetails { impl From<(&candidate::Model, &Vec<parent::Model>)> for EncryptedApplicationDetails {
fn from( fn from(
(candidate, parents): (&candidate::Model, Vec<parent::Model>), (candidate, parents): (&candidate::Model, &Vec<parent::Model>),
) -> Self { ) -> Self {
let enc_parents = parents.iter() let enc_parents = parents.iter()
.map(|m| EncryptedParentDetails::from(m)) .map(|m| EncryptedParentDetails::from(m))
@ -509,7 +509,7 @@ pub mod tests {
let (_, candidate, parents) = put_user_data(&db).await; 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 let application_details = encrypted_details
.decrypt(PRIVATE_KEY.to_string()) // decrypt with admin's private key .decrypt(PRIVATE_KEY.to_string()) // decrypt with admin's private key

View file

@ -237,7 +237,7 @@ impl ApplicationService {
let candidate = ApplicationService::find_related_candidate(db, application).await?; let candidate = ApplicationService::find_related_candidate(db, application).await?;
let parents = Query::find_candidate_parents(db, &candidate).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() { if enc_details.is_filled() {
enc_details.decrypt(private_key).await enc_details.decrypt(private_key).await
@ -330,7 +330,7 @@ impl ApplicationService {
recipients.append(&mut admin_public_keys); recipients.append(&mut admin_public_keys);
recipients.append(&mut applications.iter().map(|a| a.public_key.to_owned()).collect()); 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?; .decrypt(admin_private_key).await?;
let enc_details = EncryptedApplicationDetails::new(&dec_details, recipients).await?; let enc_details = EncryptedApplicationDetails::new(&dec_details, recipients).await?;

View file

@ -134,7 +134,7 @@ pub mod tests {
let dec_priv_key = crypto::decrypt_password(application.private_key.clone(), password) let dec_priv_key = crypto::decrypt_password(application.private_key.clone(), password)
.await .await
.unwrap(); .unwrap();
let enc_details = EncryptedApplicationDetails::try_from((&enc_candidate, enc_parent)) let enc_details = EncryptedApplicationDetails::try_from((&enc_candidate, &enc_parent))
.ok() .ok()
.unwrap(); .unwrap();
let dec_details = enc_details.decrypt(dec_priv_key).await.ok().unwrap(); let dec_details = enc_details.decrypt(dec_priv_key).await.ok().unwrap();

View file

@ -117,7 +117,7 @@ mod tests {
.unwrap(); .unwrap();
let priv_key = crypto::decrypt_password(application.private_key.clone(), plain_text_password).await.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() .unwrap()
.decrypt(priv_key) .decrypt(priv_key)
.await .await

View file

@ -57,7 +57,7 @@ pub async fn export(db: &DbConn, private_key: String) -> Result<Vec<u8>, Service
let candidate = ApplicationService::find_related_candidate(db, &application).await?; let candidate = ApplicationService::find_related_candidate(db, &application).await?;
let parents = Query::find_candidate_parents(db, &candidate).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( Ok(d) => ApplicationRow::from(
d.decrypt(private_key.to_string()) d.decrypt(private_key.to_string())