From bdb3bc49a6de5b2d89004d42a5626c558239ab1d Mon Sep 17 00:00:00 2001 From: hole-thu Date: Mon, 23 Sep 2024 03:42:03 +0800 Subject: [PATCH] support alumni email --- src/login.rs | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/login.rs b/src/login.rs index 3d9390a..c04d53c 100644 --- a/src/login.rs +++ b/src/login.rs @@ -251,23 +251,24 @@ pub async fn gh_auth( //dbg!(&emails); - for email in emails { - if let Some(name) = email - .email - .strip_suffix("@mails.tsinghua.edu.cn") - .and_then(|name| email.verified.then_some(name)) - { - let tk = User::find_or_create_token( - &db, - &rh.hash_with_salt(&format!("email_{}", name)), - false, - ) - .await - .unwrap(); - - return Ok(Redirect::to(format!("{}?token={}", &jump_to_url, &tk))); - } + let name = emails + .iter() + .filter(|email| email.verified) + .find_map( + |email| match email.email.split('@').collect::>()[..] { + [name, "mails.tsinghua.edu.cn"] | [name, "tsinghua.org.cn"] => Some(name), + _ => None, + }, + ); + + if let Some(name) = name { + let tk = + User::find_or_create_token(&db, &rh.hash_with_salt(&format!("email_{}", name)), false) + .await + .unwrap(); + + Ok(Redirect::to(format!("{}?token={}", &jump_to_url, &tk))) + } else { + Err("没有找到已验证的清华邮箱/校友邮箱") } - - Err("没有找到已验证的清华邮箱") }