Skip to main content

coven_domain/joining/
config.rs

1use coven_foundation::config::{CloudProvider, Config, HomeStorage};
2use coven_storage::cloud::CloudHomeJoinInfo;
3use coven_storage::CloudCipher;
4
5/// Build the Config struct from join/restore parameters. The cipher records the
6/// home's storage mode: `Encrypted` ⇒ opaque (a store key is stored, with its
7/// fingerprint), `Plaintext` ⇒ browsable (no key, no fingerprint).
8pub fn build_config(
9    store_id: &str,
10    device_id: &str,
11    store_name: &str,
12    join_info: &CloudHomeJoinInfo,
13    cipher: &CloudCipher,
14) -> Config {
15    let mut config = Config::with_defaults(
16        store_id.to_string(),
17        device_id.to_string(),
18        store_name.to_string(),
19    );
20
21    config.cloud_home.storage = match cipher {
22        CloudCipher::Encrypted(_) => HomeStorage::Opaque,
23        CloudCipher::Plaintext => HomeStorage::Browsable,
24    };
25
26    config.cloud_home.provider = Some(match join_info {
27        CloudHomeJoinInfo::S3 { .. } => CloudProvider::S3,
28        CloudHomeJoinInfo::GoogleDrive { .. } => CloudProvider::GoogleDrive,
29        CloudHomeJoinInfo::Dropbox { .. } => CloudProvider::Dropbox,
30        CloudHomeJoinInfo::OneDrive { .. } => CloudProvider::OneDrive,
31        CloudHomeJoinInfo::CloudKit | CloudHomeJoinInfo::CloudKitShare { .. } => {
32            CloudProvider::CloudKit
33        }
34    });
35
36    match join_info {
37        CloudHomeJoinInfo::S3 {
38            bucket,
39            region,
40            endpoint,
41            key_prefix,
42            ..
43        } => {
44            config.cloud_home.s3_bucket = Some(bucket.clone());
45            config.cloud_home.s3_region = Some(region.clone());
46            config.cloud_home.s3_endpoint = endpoint.clone();
47            config.cloud_home.s3_key_prefix = key_prefix.clone();
48        }
49        CloudHomeJoinInfo::GoogleDrive { folder_id } => {
50            config.cloud_home.google_drive_folder_id = Some(folder_id.clone());
51        }
52        CloudHomeJoinInfo::Dropbox { folder_path } => {
53            config.cloud_home.dropbox_folder_path = Some(folder_path.clone());
54        }
55        CloudHomeJoinInfo::OneDrive {
56            drive_id,
57            folder_id,
58        } => {
59            config.cloud_home.onedrive_drive_id = Some(drive_id.clone());
60            config.cloud_home.onedrive_folder_id = Some(folder_id.clone());
61        }
62        CloudHomeJoinInfo::CloudKit => {}
63        CloudHomeJoinInfo::CloudKitShare {
64            owner_name,
65            zone_name,
66            ..
67        } => {
68            config.cloud_home.cloudkit_owner_name = Some(owner_name.clone());
69            config.cloud_home.cloudkit_zone_name = Some(zone_name.clone());
70        }
71    }
72
73    config
74}