oauth2_google/extensions/
builder.rs1use 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#[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}