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