pub trait UntrustedToken {
fn kid(&self) -> Option<&String>;
}
pub mod untrusted_jwt_compact {
use super::UntrustedToken;
use crate::error::jwt_error::JWTError;
pub struct UntrustedJWT<'a> {
untrusted_token: jwt_compact::UntrustedToken<'a>,
}
impl<'a> UntrustedJWT<'a> {
pub fn new<S: AsRef<str> + ?Sized>(token_string: &'a S) -> Result<Self, JWTError> {
let untrusted = jwt_compact::UntrustedToken::new(token_string)?;
Ok(UntrustedJWT {
untrusted_token: untrusted,
})
}
}
impl UntrustedToken for UntrustedJWT<'_> {
fn kid(&self) -> Option<&String> {
self.untrusted_token.header().key_id.as_ref()
}
}
impl<'a> From<UntrustedJWT<'a>> for jwt_compact::UntrustedToken<'a> {
fn from(token: UntrustedJWT<'a>) -> Self {
token.untrusted_token
}
}
}
pub mod untrusted_jwt {
use super::UntrustedToken;
use crate::error::jwt_error::JWTError;
use jwt_simple::prelude::Token;
use std::option::Option;
pub struct UntrustedJWT {
kid: Option<String>,
value: Option<String>,
}
impl UntrustedJWT {
pub fn new(token_string: &str) -> Result<Self, JWTError> {
let untrusted = Token::decode_metadata(token_string)?;
Ok(UntrustedJWT {
kid: untrusted.key_id().map(String::from),
value: Some(String::from(token_string)),
})
}
pub fn value(&self) -> &String {
self.value.as_ref().unwrap()
}
}
impl UntrustedToken for UntrustedJWT {
fn kid(&self) -> Option<&String> {
self.kid.as_ref()
}
}
}