feat(users): Implemented cookie parsing for auth (#4298)

Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
Rachit Naithani
2024-04-05 13:05:21 +05:30
committed by GitHub
parent 2fac436683
commit 2d394f98e9
5 changed files with 64 additions and 7 deletions

View File

@ -5,6 +5,7 @@ use common_utils::date_time;
use error_stack::{report, ResultExt};
use jsonwebtoken::{decode, Algorithm, DecodingKey, Validation};
use masking::PeekInterface;
use router_env::logger;
use serde::Serialize;
use self::blacklist::BlackList;
@ -33,7 +34,6 @@ use crate::{
utils::OptionExt,
};
pub mod blacklist;
#[cfg(feature = "olap")]
pub mod cookies;
#[derive(Clone, Debug)]
@ -598,6 +598,15 @@ where
A: AppStateInfo + Sync,
{
let token = get_jwt_from_authorization_header(headers)?;
if let Some(token_from_cookies) = get_cookie_from_header(headers)
.ok()
.and_then(|cookies| cookies::parse_cookie(cookies).ok())
{
logger::info!(
"Cookie header and authorization header JWT comparison result: {}",
token == token_from_cookies
);
}
let payload = decode_jwt(token, state).await?;
Ok(payload)
@ -959,6 +968,13 @@ pub fn get_jwt_from_authorization_header(headers: &HeaderMap) -> RouterResult<&s
.ok_or(errors::ApiErrorResponse::InvalidJwtToken.into())
}
pub fn get_cookie_from_header(headers: &HeaderMap) -> RouterResult<&str> {
headers
.get(cookies::get_cookie_header())
.and_then(|header_value| header_value.to_str().ok())
.ok_or(errors::ApiErrorResponse::InvalidCookie.into())
}
pub fn strip_jwt_token(token: &str) -> RouterResult<&str> {
token
.strip_prefix("Bearer ")