Skip to content

Commit 4b0cf9c

Browse files
refactor(user): use single purpose token and auth to accept invite (#4498)
1 parent 4f4cbdf commit 4b0cf9c

File tree

5 files changed

+5
-67
lines changed

5 files changed

+5
-67
lines changed

crates/router/src/core/user_role.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ pub async fn transfer_org_ownership(
170170

171171
pub async fn accept_invitation(
172172
state: AppState,
173-
user_token: auth::UserWithoutMerchantFromToken,
173+
user_token: auth::UserFromSinglePurposeToken,
174174
req: user_role_api::AcceptInvitationRequest,
175175
_req_state: ReqState,
176176
) -> UserResponse<user_api::DashboardEntryResponse> {

crates/router/src/routes/user_role.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ pub async fn accept_invitation(
214214
&req,
215215
payload,
216216
user_role_core::accept_invitation,
217-
&auth::UserWithoutMerchantJWTAuth,
217+
&auth::SinglePurposeJWTAuth(auth::Purpose::AcceptInvite),
218218
api_locking::LockAction::NotApplicable,
219219
))
220220
.await

crates/router/src/services/authentication.rs

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -149,28 +149,6 @@ impl SinglePurposeToken {
149149
}
150150
}
151151

152-
// TODO: This has to be removed once single purpose token is used as a intermediate token
153-
#[derive(Clone, Debug)]
154-
pub struct UserWithoutMerchantFromToken {
155-
pub user_id: String,
156-
}
157-
158-
#[derive(serde::Serialize, serde::Deserialize)]
159-
pub struct UserAuthToken {
160-
pub user_id: String,
161-
pub exp: u64,
162-
}
163-
164-
#[cfg(feature = "olap")]
165-
impl UserAuthToken {
166-
pub async fn new_token(user_id: String, settings: &Settings) -> UserResult<String> {
167-
let exp_duration = std::time::Duration::from_secs(consts::JWT_TOKEN_TIME_IN_SECS);
168-
let exp = jwt::generate_exp(exp_duration)?.as_secs();
169-
let token_payload = Self { user_id, exp };
170-
jwt::generate_jwt(&token_payload, settings).await
171-
}
172-
}
173-
174152
#[derive(serde::Serialize, serde::Deserialize)]
175153
pub struct AuthToken {
176154
pub user_id: String,
@@ -330,37 +308,6 @@ where
330308
}
331309
}
332310

333-
#[derive(Debug)]
334-
pub struct UserWithoutMerchantJWTAuth;
335-
336-
#[cfg(feature = "olap")]
337-
#[async_trait]
338-
impl<A> AuthenticateAndFetch<UserWithoutMerchantFromToken, A> for UserWithoutMerchantJWTAuth
339-
where
340-
A: AppStateInfo + Sync,
341-
{
342-
async fn authenticate_and_fetch(
343-
&self,
344-
request_headers: &HeaderMap,
345-
state: &A,
346-
) -> RouterResult<(UserWithoutMerchantFromToken, AuthenticationType)> {
347-
let payload = parse_jwt_payload::<A, UserAuthToken>(request_headers, state).await?;
348-
if payload.check_in_blacklist(state).await? {
349-
return Err(errors::ApiErrorResponse::InvalidJwtToken.into());
350-
}
351-
352-
Ok((
353-
UserWithoutMerchantFromToken {
354-
user_id: payload.user_id.clone(),
355-
},
356-
AuthenticationType::UserJwt {
357-
user_id: payload.user_id,
358-
},
359-
))
360-
}
361-
}
362-
363-
#[allow(dead_code)]
364311
#[derive(Debug)]
365312
pub(crate) struct SinglePurposeJWTAuth(pub Purpose);
366313

crates/router/src/services/authentication/blacklist.rs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use common_utils::date_time;
55
use error_stack::ResultExt;
66
use redis_interface::RedisConnectionPool;
77

8-
use super::{AuthToken, SinglePurposeToken, UserAuthToken};
8+
use super::{AuthToken, SinglePurposeToken};
99
#[cfg(feature = "email")]
1010
use crate::consts::{EMAIL_TOKEN_BLACKLIST_PREFIX, EMAIL_TOKEN_TIME_IN_SECS};
1111
use crate::{
@@ -154,16 +154,6 @@ impl BlackList for AuthToken {
154154
}
155155
}
156156

157-
#[async_trait::async_trait]
158-
impl BlackList for UserAuthToken {
159-
async fn check_in_blacklist<A>(&self, state: &A) -> RouterResult<bool>
160-
where
161-
A: AppStateInfo + Sync,
162-
{
163-
check_user_in_blacklist(state, &self.user_id, self.exp).await
164-
}
165-
}
166-
167157
#[async_trait::async_trait]
168158
impl BlackList for SinglePurposeToken {
169159
async fn check_in_blacklist<A>(&self, state: &A) -> RouterResult<bool>

crates/router/src/types/domain/user.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -910,8 +910,9 @@ impl SignInWithMultipleRolesStrategy {
910910
user_api::MerchantSelectResponse {
911911
name: self.user.get_name(),
912912
email: self.user.get_email(),
913-
token: auth::UserAuthToken::new_token(
913+
token: auth::SinglePurposeToken::new_token(
914914
self.user.get_user_id().to_string(),
915+
auth::Purpose::AcceptInvite,
915916
&state.conf,
916917
)
917918
.await?

0 commit comments

Comments
 (0)