From a501ba1bd7cfd79032c4ff429fe7c1863672d1cb Mon Sep 17 00:00:00 2001 From: siddhantCodes Date: Thu, 30 Nov 2023 18:03:06 +0530 Subject: [PATCH] use user's primary email if public email is null --- fastn-core/src/auth/github/apis.rs | 17 ++++++++++++++++- fastn-core/src/auth/github/mod.rs | 13 ++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/fastn-core/src/auth/github/apis.rs b/fastn-core/src/auth/github/apis.rs index d8d06534e1..77d80d6663 100644 --- a/fastn-core/src/auth/github/apis.rs +++ b/fastn-core/src/auth/github/apis.rs @@ -138,7 +138,6 @@ pub async fn is_user_sponsored( } } -// TODO: It can be stored in the request cookies pub async fn user_details(access_token: &str) -> fastn_core::Result { // API Docs: https://docs.github.com/en/rest/users/users#get-the-authenticated-user // TODO: Handle paginated response @@ -147,3 +146,19 @@ pub async fn user_details(access_token: &str) -> fastn_core::Result fastn_core::Result> { + // API Docs: https://docs.github.com/en/rest/users/emails?apiVersion=2022-11-28#list-email-addresses-for-the-authenticated-user + let user_obj: Vec = + fastn_core::http::get_api("https://api.github.com/user/emails", access_token).await?; + + Ok(user_obj) +} diff --git a/fastn-core/src/auth/github/mod.rs b/fastn-core/src/auth/github/mod.rs index 2be37901fa..ee69d9886d 100644 --- a/fastn-core/src/auth/github/mod.rs +++ b/fastn-core/src/auth/github/mod.rs @@ -54,7 +54,18 @@ pub async fn callback( Err(e) => return Ok(fastn_core::server_error!("{}", e.to_string())), }; - let gh_user = fastn_core::auth::github::apis::user_details(access_token.as_str()).await?; + let mut gh_user = fastn_core::auth::github::apis::user_details(access_token.as_str()).await?; + + if gh_user.email.is_none() { + // pick primary email + let emails = fastn_core::auth::github::apis::user_emails(access_token.as_str()).await?; + let primary = emails + .into_iter() + .find(|e| e.primary) + .expect("primary email must exist for a github account"); + + gh_user.email = Some(primary.email); + } let ud = UserDetail { user: gh_user,