use http::header::AUTHORIZATION;
use http::{HeaderMap, HeaderValue};
use jsonwebtoken::errors::{Error, ErrorKind};
use serde::Serialize;
#[derive(Debug, Serialize)]
pub struct Token {
#[serde(rename(serialize = "access_token"))]
value: String,
expire: i64,
}
impl Token {
pub fn new(value: String, expire: i64) -> Self {
Self { value, expire }
}
pub fn parse_from_header(headers: &HeaderMap<HeaderValue>) -> eyre::Result<&str, Error> {
let auth_header = headers
.get(AUTHORIZATION)
.and_then(|header| header.to_str().ok())
.ok_or(Error::from(ErrorKind::MissingRequiredClaim(
"Authorization".to_owned(),
)))?;
if !auth_header.starts_with("Bearer ") {
return Err(Error::from(ErrorKind::InvalidToken));
}
Ok(auth_header["Bearer ".len()..].trim_start())
}
}