diff options
author | Alex Auvolat <alex@adnab.me> | 2022-05-19 14:33:49 +0200 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2022-05-19 14:33:49 +0200 |
commit | 6be90936a108d971e0cfa3ddaa9c2d54557e30f3 (patch) | |
tree | ed0dae1b4ebf3215b808b81d9980376e9b5dee26 /src/login/mod.rs | |
parent | 1ac56a91981bee4867dfb054bd2199c6111fe1eb (diff) | |
download | aerogramme-6be90936a108d971e0cfa3ddaa9c2d54557e30f3.tar.gz aerogramme-6be90936a108d971e0cfa3ddaa9c2d54557e30f3.zip |
Some refactoring
Diffstat (limited to 'src/login/mod.rs')
-rw-r--r-- | src/login/mod.rs | 76 |
1 files changed, 70 insertions, 6 deletions
diff --git a/src/login/mod.rs b/src/login/mod.rs index 0845371..4022962 100644 --- a/src/login/mod.rs +++ b/src/login/mod.rs @@ -9,7 +9,7 @@ use rusoto_credential::{AwsCredentials, StaticProvider}; use rusoto_s3::S3Client; use rusoto_signature::Region; -use crate::cryptoblob::Key as SymmetricKey; +use crate::cryptoblob::*; #[async_trait] pub trait LoginProvider { @@ -18,14 +18,51 @@ pub trait LoginProvider { #[derive(Clone, Debug)] pub struct Credentials { + pub storage: StorageCredentials, + pub keys: CryptoKeys, +} + +#[derive(Clone, Debug)] +pub struct StorageCredentials { + pub s3_region: Region, + pub k2v_region: Region, + pub aws_access_key_id: String, pub aws_secret_access_key: String, pub bucket: String, - pub master_key: SymmetricKey, } +#[derive(Clone, Debug)] +pub struct CryptoKeys { + // Master key for symmetric encryption of mailbox data + pub master: Key, + // Public/private keypair for encryption of incomming emails + pub secret: SecretKey, + pub public: PublicKey, +} + +// ---- + impl Credentials { - pub fn k2v_client(&self, k2v_region: &Region) -> Result<K2vClient> { + pub fn k2v_client(&self) -> Result<K2vClient> { + self.storage.k2v_client() + } + pub fn s3_client(&self) -> Result<S3Client> { + self.storage.s3_client() + } + pub fn bucket(&self) -> &str { + self.storage.bucket.as_str() + } + pub fn dump_config(&self) { + println!("aws_access_key_id = \"{}\"", self.storage.aws_access_key_id); + println!("aws_secret_access_key = \"{}\"", self.storage.aws_secret_access_key); + println!("master_key = \"{}\"", base64::encode(&self.keys.master)); + println!("secret_key = \"{}\"", base64::encode(&self.keys.secret)); + } +} + +impl StorageCredentials { + pub fn k2v_client(&self) -> Result<K2vClient> { let aws_creds = AwsCredentials::new( self.aws_access_key_id.clone(), self.aws_secret_access_key.clone(), @@ -34,14 +71,14 @@ impl Credentials { ); Ok(K2vClient::new( - k2v_region.clone(), + self.k2v_region.clone(), self.bucket.clone(), aws_creds, None, )?) } - pub fn s3_client(&self, s3_region: &Region) -> Result<S3Client> { + pub fn s3_client(&self) -> Result<S3Client> { let aws_creds_provider = StaticProvider::new_minimal( self.aws_access_key_id.clone(), self.aws_secret_access_key.clone(), @@ -50,7 +87,34 @@ impl Credentials { Ok(S3Client::new_with( HttpClient::new()?, aws_creds_provider, - s3_region.clone(), + self.s3_region.clone(), )) } } + +impl CryptoKeys { + pub fn init(storage: &StorageCredentials) -> Result<Self> { + unimplemented!() + } + + pub fn init_without_password(storage: &StorageCredentials, master_key: &Key, secret_key: &SecretKey) -> Result<Self> { + unimplemented!() + } + + pub fn open(storage: &StorageCredentials, password: &str) -> Result<Self> { + unimplemented!() + } + + pub fn open_without_password(storage: &StorageCredentials, master_key: &Key, secret_key: &SecretKey) -> Result<Self> { + unimplemented!() + } + + pub fn add_password(&self, storage: &StorageCredentials, password: &str) -> Result<()> { + unimplemented!() + } + + pub fn remove_password(&self, storage: &StorageCredentials, password: &str, allow_remove_all: bool) -> Result<()> { + unimplemented!() + } +} + |