From 5740f19724b4941466ccbc1d8a4f0cd7a2cc5d4e Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Sun, 15 Jan 2023 12:55:27 +0100 Subject: [PATCH] feat: encrypt personal data with pubkeys of all applications --- core/src/services/application_service.rs | 14 ++++++++++---- core/src/services/candidate_service.rs | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/core/src/services/application_service.rs b/core/src/services/application_service.rs index 5c4d06c..936cb9c 100644 --- a/core/src/services/application_service.rs +++ b/core/src/services/application_service.rs @@ -5,7 +5,7 @@ use sea_orm::{DbConn, prelude::Uuid, IntoActiveModel}; use crate::{error::ServiceError, Query, utils::db::get_recipients, models::candidate_details::{EncryptedApplicationDetails}, models::{candidate::{ApplicationDetails, CreateCandidateResponse}, candidate_details::EncryptedString, auth::AuthenticableTrait, application::ApplicationResponse}, Mutation, crypto::{hash_password, self}}; -use super::{parent_service::ParentService, candidate_service::CandidateService, session_service::SessionService}; +use super::{parent_service::ParentService, candidate_service::CandidateService, session_service::SessionService, portfolio_service::PortfolioService}; const FIELD_OF_STUDY_PREFIXES: [&str; 3] = ["101", "102", "103"]; @@ -63,6 +63,8 @@ impl ApplicationService { pubkey, encrypted_priv_key, ).await?; + + PortfolioService::create_user_dir(application.id).await?; Ok(application) } @@ -169,7 +171,11 @@ impl ApplicationService { form: &ApplicationDetails, ) -> Result<(candidate::Model, Vec), ServiceError> { - let recipients = get_recipients(db, &application.public_key).await?; + let mut recipients = get_recipients(db, &application.public_key).await?; + let applications = Query::find_applications_by_candidate_id(db, candidate.id).await?; + recipients.append(&mut applications.iter().map(|a| a.public_key.to_owned()).collect()); + + let candidate = CandidateService::add_candidate_details(db, candidate, &form.candidate, &recipients, application.id).await?; let parents = ParentService::add_parents_details(db, &candidate, &form.parents, &recipients).await?; Ok( @@ -188,9 +194,9 @@ impl ApplicationService { ) -> Result { let candidate = ApplicationService::find_related_candidate(db, application).await?; - if restrict_access && candidate.encrypted_by_id.is_some() && candidate.encrypted_by_id != Some(application.id) { + /* if restrict_access && candidate.encrypted_by_id.is_some() && candidate.encrypted_by_id != Some(application.id) { return Err(ServiceError::Locked) - } + } */ let parents = Query::find_candidate_parents(db, &candidate).await?; let enc_details = EncryptedApplicationDetails::from((&candidate, parents)); diff --git a/core/src/services/candidate_service.rs b/core/src/services/candidate_service.rs index f622c08..55c0b03 100644 --- a/core/src/services/candidate_service.rs +++ b/core/src/services/candidate_service.rs @@ -4,7 +4,7 @@ use sea_orm::DbConn; use crate::{ models::{candidate_details::EncryptedCandidateDetails, candidate::CandidateDetails}, error::ServiceError, - Mutation, Query, models::candidate::BaseCandidateResponse, + Mutation, }; use super::{portfolio_service::PortfolioService}; @@ -27,7 +27,7 @@ impl CandidateService { ) .await?; - PortfolioService::create_user_dir(candidate.id).await?; + // PortfolioService::create_user_dir(candidate.id).await?; Ok(candidate)