aboutsummaryrefslogtreecommitdiff
path: root/src/imap/command
diff options
context:
space:
mode:
Diffstat (limited to 'src/imap/command')
-rw-r--r--src/imap/command/anonymous.rs8
-rw-r--r--src/imap/command/authenticated.rs11
-rw-r--r--src/imap/command/selected.rs5
3 files changed, 13 insertions, 11 deletions
diff --git a/src/imap/command/anonymous.rs b/src/imap/command/anonymous.rs
index 7e72458..5f982ba 100644
--- a/src/imap/command/anonymous.rs
+++ b/src/imap/command/anonymous.rs
@@ -5,6 +5,7 @@ use imap_codec::types::core::{AString};
use imap_codec::types::response::{Capability, Data, Status};
use crate::imap::flow;
+use crate::mail::user::User;
use crate::login::ArcLoginProvider;
//--- dispatching
@@ -68,10 +69,9 @@ impl<'a> AnonymousContext<'a> {
Ok(c) => c,
};
- let user = flow::User {
- creds,
- name: u.clone(),
- };
+ let s3_client = creds.s3_client();
+ let k2v_client = creds.k2v_client();
+ let user = User::new(u.clone(), creds)?;
tracing::info!(username=%u, "connected");
Ok((
diff --git a/src/imap/command/authenticated.rs b/src/imap/command/authenticated.rs
index 392069f..b79865f 100644
--- a/src/imap/command/authenticated.rs
+++ b/src/imap/command/authenticated.rs
@@ -9,7 +9,8 @@ use imap_codec::types::response::{Code, Data, Status};
use crate::imap::command::anonymous;
use crate::imap::flow;
-use crate::mail::Mailbox;
+use crate::mail::mailbox::Mailbox;
+use crate::mail::user::User;
const DEFAULT_FLAGS: [Flag; 5] = [
Flag::Seen,
@@ -21,7 +22,7 @@ const DEFAULT_FLAGS: [Flag; 5] = [
pub struct AuthenticatedContext<'a> {
pub req: &'a Request,
- pub user: &'a flow::User,
+ pub user: &'a User,
}
pub async fn dispatch<'a>(ctx: AuthenticatedContext<'a>) -> Result<(Response, flow::Transition)> {
@@ -95,8 +96,8 @@ impl<'a> AuthenticatedContext<'a> {
async fn select(self, mailbox: &MailboxCodec) -> Result<(Response, flow::Transition)> {
let name = String::try_from(mailbox.clone())?;
- let mut mb = Mailbox::new(&self.user.creds, name.clone())?;
- tracing::info!(username=%self.user.name, mailbox=%name, "mailbox.selected");
+ let mut mb = self.user.open_mailbox(name.clone())?;
+ tracing::info!(username=%self.user.username, mailbox=%name, "mailbox.selected");
let sum = mb.summary().await?;
tracing::trace!(summary=%sum, "mailbox.summary");
@@ -112,7 +113,7 @@ impl<'a> AuthenticatedContext<'a> {
Some('$') if f == "$unseen" => None,
Some(_) => match Atom::try_from(f.clone()) {
Err(_) => {
- tracing::error!(username=%self.user.name, mailbox=%name, flag=%f, "Unable to encode flag as IMAP atom");
+ tracing::error!(username=%self.user.username, mailbox=%name, flag=%f, "Unable to encode flag as IMAP atom");
None
},
Ok(a) => Some(Flag::Keyword(a)),
diff --git a/src/imap/command/selected.rs b/src/imap/command/selected.rs
index d3dddd4..bd46bd5 100644
--- a/src/imap/command/selected.rs
+++ b/src/imap/command/selected.rs
@@ -10,11 +10,12 @@ use imap_codec::types::sequence::SequenceSet;
use crate::imap::command::authenticated;
use crate::imap::flow;
-use crate::mail::Mailbox;
+use crate::mail::mailbox::Mailbox;
+use crate::mail::user::User;
pub struct SelectedContext<'a> {
pub req: &'a Request,
- pub user: &'a flow::User,
+ pub user: &'a User,
pub mailbox: &'a mut Mailbox,
}