Skip to content

Commit 277316d

Browse files
parmesantnikhilsinhaparseable
authored andcommitted
updates
1 parent 48a4c1d commit 277316d

5 files changed

Lines changed: 28 additions & 19 deletions

File tree

src/handlers/http/middleware.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use actix_web::{
2323
Error, HttpMessage, HttpRequest, Route,
2424
dev::{Service, ServiceRequest, ServiceResponse, Transform, forward_ready},
2525
error::{ErrorBadRequest, ErrorForbidden, ErrorUnauthorized},
26-
http::header::{self, HeaderName, HeaderValue},
26+
http::header::{self, HeaderMap, HeaderName, HeaderValue},
2727
};
2828
use argon2::{Argon2, PasswordHash, PasswordVerifier};
2929
use chrono::{Duration, TimeDelta, Utc};
@@ -194,7 +194,7 @@ where
194194
}
195195

196196
let auth_result: Result<_, Error> = (self.auth_method)(&mut req, self.action);
197-
197+
let headers = req.headers().clone();
198198
let fut = self.service.call(req);
199199
Box::pin(async move {
200200
let Ok(key) = key else {
@@ -209,7 +209,7 @@ where
209209

210210
// if session is expired, refresh token
211211
if sessions().is_session_expired(&key) {
212-
refresh_token(user_and_tenant_id, &key).await?;
212+
refresh_token(user_and_tenant_id, &key, headers).await?;
213213
}
214214

215215
match auth_result? {
@@ -296,6 +296,7 @@ fn get_user_and_tenant(
296296
pub async fn refresh_token(
297297
user_and_tenant_id: Result<(Result<String, RBACError>, Option<String>), RBACError>,
298298
key: &SessionKey,
299+
headers: HeaderMap,
299300
) -> Result<(), Error> {
300301
let oidc_client = OIDC_CLIENT.get();
301302

@@ -320,7 +321,7 @@ pub async fn refresh_token(
320321
let refreshed_token = match client
321322
.read()
322323
.await
323-
.refresh_token(&oauth_data, Some(PARSEABLE.options.scope.as_str()))
324+
.refresh_token(&oauth_data, Some(PARSEABLE.options.scope.as_str()), headers)
324325
.await
325326
{
326327
Ok(bearer) => bearer,
@@ -570,6 +571,10 @@ where
570571
header::COOKIE,
571572
HeaderValue::from_str(&format!("session={}", id)).unwrap(),
572573
);
574+
575+
// remove basic auth header
576+
req.headers_mut().remove(header::AUTHORIZATION);
577+
573578
let session = SessionKey::SessionId(id);
574579
req.extensions_mut().insert(session.clone());
575580
Users.new_session(&user, session, TimeDelta::seconds(20));

src/oauth/oidc_client.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use actix_web::http::header::HeaderMap;
12
use async_trait::async_trait;
23
use openid::{Bearer, Options, Token};
34
use url::Url;
@@ -119,6 +120,7 @@ impl OAuthProvider for GlobalClient {
119120
&self,
120121
oauth: &OAuth,
121122
scope: Option<&str>,
123+
_headers: HeaderMap,
122124
) -> Result<Bearer, anyhow::Error> {
123125
// Box the clone so we can pass it to the openid client.
124126
let boxed: Box<OAuth> = Box::new(oauth.clone());

src/oauth/provider.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use std::{
33
collections::{HashMap, HashSet},
44
};
55

6+
use actix_web::http::header::HeaderMap;
67
use async_trait::async_trait;
78
use openid::Bearer;
89
use url::Url;
@@ -34,6 +35,7 @@ pub trait OAuthProvider: Send + Sync + Any {
3435
&self,
3536
oauth: &OAuth,
3637
scope: Option<&str>,
38+
headers: HeaderMap,
3739
) -> Result<Bearer, anyhow::Error>;
3840

3941
/// Return the provider's logout / end-session URL, if one exists.

src/parseable/mod.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,18 +1073,18 @@ impl Parseable {
10731073

10741074
pub async fn suspend_tenant_service(
10751075
&self,
1076-
tenant_id: String,
1077-
service: Service,
1076+
tenant_id: &str,
1077+
service: &Service,
10781078
) -> Result<(), anyhow::Error> {
1079-
TENANT_METADATA.suspend_service(&tenant_id, service.clone());
1079+
TENANT_METADATA.suspend_service(tenant_id, service);
10801080

10811081
// write to disk
1082-
let tenant_id = &Some(tenant_id);
1082+
let tenant_id = &Some(tenant_id.to_owned());
10831083
let mut meta = get_metadata(tenant_id).await?;
10841084
if let Some(sus) = meta.suspended_services.as_mut() {
1085-
sus.insert(service);
1085+
sus.insert(service.clone());
10861086
} else {
1087-
meta.suspended_services = Some(HashSet::from_iter([service]));
1087+
meta.suspended_services = Some(HashSet::from_iter([service.clone()]));
10881088
}
10891089

10901090
put_remote_metadata(&meta, tenant_id).await?;
@@ -1093,16 +1093,16 @@ impl Parseable {
10931093

10941094
pub async fn resume_tenant_service(
10951095
&self,
1096-
tenant_id: String,
1097-
service: Service,
1096+
tenant_id: &str,
1097+
service: &Service,
10981098
) -> Result<(), anyhow::Error> {
1099-
TENANT_METADATA.resume_service(&tenant_id, service.clone());
1099+
TENANT_METADATA.resume_service(tenant_id, service);
11001100

11011101
// write to disk
1102-
let tenant_id = &Some(tenant_id);
1102+
let tenant_id = &Some(tenant_id.to_owned());
11031103
let mut meta = get_metadata(tenant_id).await?;
11041104
if let Some(sus) = meta.suspended_services.as_mut() {
1105-
sus.remove(&service);
1105+
sus.remove(service);
11061106
}
11071107

11081108
put_remote_metadata(&meta, tenant_id).await?;

src/tenants/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,16 @@ impl TenantMetadata {
9090
}
9191
}
9292

93-
pub fn suspend_service(&self, tenant_id: &str, service: Service) {
93+
pub fn suspend_service(&self, tenant_id: &str, service: &Service) {
9494
if let Some(mut tenant) = self.tenants.get_mut(tenant_id) {
95-
tenant.suspended_services.insert(service);
95+
tenant.suspended_services.insert(service.clone());
9696
tenant.meta.suspended_services = Some(tenant.suspended_services.clone());
9797
}
9898
}
9999

100-
pub fn resume_service(&self, tenant_id: &str, service: Service) {
100+
pub fn resume_service(&self, tenant_id: &str, service: &Service) {
101101
if let Some(mut tenant) = self.tenants.get_mut(tenant_id) {
102-
tenant.suspended_services.remove(&service);
102+
tenant.suspended_services.remove(service);
103103
tenant.meta.suspended_services = if tenant.suspended_services.is_empty() {
104104
None
105105
} else {

0 commit comments

Comments
 (0)