simple_oauth/common/
google.rs1use 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}