async_graphql_utils/keycloak/
authorization_bearer.rs1use jsonwebtoken::{decode, Algorithm, DecodingKey, Validation, TokenData};
2use std::collections::HashMap;
3use serde_json::{Value, json};
4
5pub struct AuthorizationBearer {
6 pub access_token: Option<String>,
7 pub custom_data: Option<HashMap<String, String>>,
8}
9
10impl AuthorizationBearer {
11 pub fn get_access_token(&self) -> Option<String> {
12 match &self.access_token {
13 Some(token) => Some(token.replace("Bearer ", "")),
14 None => None,
15 }
16 }
17
18 pub fn get_token_claims(&self) -> Value {
19 match self.get_access_token() {
20 Some(token) => {
21 let key = DecodingKey::from_secret(&[]);
22
23 let mut validation = Validation::new(Algorithm::HS256);
24
25 validation.insecure_disable_signature_validation();
26
27 let data: TokenData<Value> = decode(
28 token.as_str(),
29 &key,
30 &validation
31 ).unwrap();
32
33 data.claims
34 },
35 None => json!({}),
36 }
37 }
38}