Skip to main content

simple_oauth/common/
google.rs

1use crate::{
2    SimpleOAuthProvider, UserInfoProvider,
3    types::{OidcUserInfo, UserInfo},
4};
5
6#[derive(Debug, Clone)]
7pub struct Google;
8
9impl SimpleOAuthProvider for Google {
10    fn default_scopes(&self) -> &'static [&'static str] {
11        &["openid", "profile"]
12    }
13
14    fn authorize_url(&self) -> &str {
15        "https://accounts.google.com/o/oauth2/v2/auth"
16    }
17
18    fn token_url(&self) -> &str {
19        "https://oauth2.googleapis.com/token"
20    }
21}
22
23impl UserInfoProvider for Google {
24    fn user_info_url(&self) -> &str {
25        "https://openidconnect.googleapis.com/v1/userinfo"
26    }
27
28    fn extract_user_info(&self, val: serde_json::Value) -> Result<UserInfo, serde_json::Error> {
29        let user_info: OidcUserInfo = serde_json::from_value(val)?;
30
31        Ok(UserInfo {
32            id: user_info.sub,
33            name: user_info.name,
34            username: user_info.preferred_username,
35            email: user_info.email,
36            email_verified: user_info.email_verified,
37            avatar_url: user_info.picture,
38            ..Default::default()
39        })
40    }
41}