oauth2_google/extensions/
builder.rs

1use oauth2_client::{
2    extensions::{
3        AccessTokenResponseSuccessfulBody, Builder, BuilderObtainUserInfoError,
4        BuilderObtainUserInfoOutput, GrantInfo,
5    },
6    oauth2_core::types::ScopeParameter,
7    re_exports::Scope,
8};
9
10use crate::GoogleScope;
11
12use super::GoogleUserInfoEndpoint;
13
14//
15#[derive(Debug, Clone)]
16pub struct GoogleExtensionsBuilder;
17
18impl<SCOPE> Builder<SCOPE> for GoogleExtensionsBuilder
19where
20    SCOPE: Scope,
21{
22    fn obtain_user_info(
23        &self,
24        _grant_info: GrantInfo<SCOPE>,
25        access_token: &AccessTokenResponseSuccessfulBody<SCOPE>,
26    ) -> Result<BuilderObtainUserInfoOutput, BuilderObtainUserInfoError> {
27        Ok(BuilderObtainUserInfoOutput::Respond(Box::new(
28            GoogleUserInfoEndpoint::new(
29                &access_token.access_token,
30                access_token.scope.as_ref().map(|x| {
31                    ScopeParameter::<String>::from(x)
32                        .0
33                        .contains(&GoogleScope::Openid.to_string())
34                }) == Some(true),
35            ),
36        )))
37    }
38}