From f53d242cb01b83c52f21f8e88188366ecfddf650 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Fri, 6 Aug 2021 13:57:41 +0200 Subject: [PATCH] new helper verify_authorization_code_simple() Simply return data as serde_json::Value. --- src/lib.rs | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index a0548f78..de2251fc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,6 +2,7 @@ use std::path::Path; use anyhow::{format_err, Error}; use serde::{Deserialize, Serialize}; +use serde_json::Value; mod http_client; pub use http_client::http_client; @@ -39,7 +40,7 @@ use openidconnect::{ /// Stores Additional Claims into a serde_json::Value; #[derive(Debug, Deserialize, Serialize)] -pub struct GenericClaims(serde_json::Value); +pub struct GenericClaims(Value); impl AdditionalClaims for GenericClaims {} pub type GenericUserInfoClaims = UserInfoClaims; @@ -196,4 +197,29 @@ impl OpenIdAuthenticator { Ok((id_token_claims.clone(), userinfo_claims)) } + + /// Like verify_authorization_code(), but returns claims as serde_json::Value + pub fn verify_authorization_code_simple( + &self, + code: &str, + private_auth_state: &PrivateAuthState, + ) -> Result { + + let (id_token_claims, userinfo_claims) = self.verify_authorization_code(&code, &private_auth_state)?; + + let mut data = serde_json::to_value(id_token_claims)?; + + let data2 = serde_json::to_value(userinfo_claims)?; + + if let Some(map) = data2.as_object() { + for (key, value) in map { + if data[key] != Value::Null { + continue; // already set + } + data[key] = value.clone(); + } + } + + Ok(data) + } }