aboutsummaryrefslogtreecommitdiffstats
path: root/crates/api-auth/src/discord
diff options
context:
space:
mode:
Diffstat (limited to 'crates/api-auth/src/discord')
-rw-r--r--crates/api-auth/src/discord/mod.rs14
1 files changed, 11 insertions, 3 deletions
diff --git a/crates/api-auth/src/discord/mod.rs b/crates/api-auth/src/discord/mod.rs
index ffa5a68..ba26f8b 100644
--- a/crates/api-auth/src/discord/mod.rs
+++ b/crates/api-auth/src/discord/mod.rs
@@ -1,4 +1,5 @@
use api_core::models::user::User;
+use async_session::Session;
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use sh_util::cache::RedisManager;
@@ -25,7 +26,11 @@ impl TryFrom<DiscordUser> for User {
match (&user_data.email, user_data.verified) {
(None, _) => Err(AuthError::MissingEmail),
(_, false) => Err(AuthError::EmailNotVerified),
- (Some(_), true) => Ok(Self {}),
+ (Some(_), true) => Ok(Self {
+ id: user_data.id,
+ username: user_data.username,
+ email: user_data.email.ok_or(AuthError::MissingEmail)?,
+ }),
}
}
}
@@ -67,7 +72,10 @@ impl OauthDriver for AuthServiceDiscord {
crate::util::create_oauth_session(&self.client, &self.cache, &["identify", "email"]).await
}
- async fn save_session(&self, _user: &User) -> Result<(), AuthError> {
- todo!()
+ async fn save_session(&self, user: &User) -> Result<(), AuthError> {
+ let mut session = Session::new();
+ session.insert("user", user).expect("serialisable user");
+
+ Ok(())
}
}