Skip to content

Commit aa60e0f

Browse files
committed
refactor: 验证码和会话缓存操作迁移至Raft集成缓存管理器
1 parent 3ecc5e5 commit aa60e0f

File tree

3 files changed

+35
-24
lines changed

3 files changed

+35
-24
lines changed

src/console/login_api.rs

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::collections::HashMap;
22
use std::sync::Arc;
33

44
use super::model::login_model::{LoginConfig, LoginParam, LoginToken};
5-
use crate::cache::actor_model::CacheSetParam;
5+
use crate::cache::actor_model::{CacheManagerRaftResult, CacheSetParam};
66
use crate::ldap::model::actor_model::{LdapMsgReq, LdapMsgResult};
77
use crate::ldap::model::LdapUserParam;
88
use crate::oauth2::model::actor_model::{OAuth2MsgReq, OAuth2MsgResult};
@@ -344,17 +344,18 @@ async fn check_captcha(
344344
Some("captcha token is empty".to_owned()),
345345
)));
346346
}
347-
let cache_req = CacheManagerReq::Get(CacheKey::new(
347+
let req = crate::cache::actor_model::CacheManagerLocalReq::Get(CacheKey::new(
348348
CacheType::String,
349349
Arc::new(format!("Captcha_{}", &captcha_token)),
350350
));
351-
let captcha_check_result = if let Ok(Ok(CacheManagerResult::Value(CacheValue::String(v)))) =
352-
app.cache_manager.send(cache_req).await
353-
{
354-
&captcha_code == v.as_ref()
355-
} else {
356-
false
357-
};
351+
let captcha_check_result =
352+
if let Ok(Ok(CacheManagerRaftResult::Value(crate::cache::model::CacheValue::String(v)))) =
353+
app.direct_cache_manager.send(req).await
354+
{
355+
&captcha_code == v.as_ref()
356+
} else {
357+
false
358+
};
358359
if !captcha_check_result {
359360
return Some(
360361
HttpResponse::Ok()
@@ -419,12 +420,16 @@ pub async fn gen_captcha(app: Data<Arc<AppShareData>>) -> actix_web::Result<impl
419420

420421
let img = obj.as_base64().unwrap_or_default();
421422
//log::info!("gen_captcha code:{}", &code);
422-
let cache_req = CacheManagerReq::Set {
423-
key: CacheKey::new(CacheType::String, Arc::new(format!("Captcha_{}", &token))),
424-
value: CacheValue::String(code),
425-
ttl: 300,
426-
};
427-
app.cache_manager.send(cache_req).await.ok();
423+
let cache_req =
424+
crate::cache::actor_model::CacheManagerRaftReq::Set(CacheSetParam::new_with_ttl(
425+
CacheKey::new(CacheType::String, Arc::new(format!("Captcha_{}", &token))),
426+
crate::cache::model::CacheValue::String(code),
427+
300,
428+
));
429+
app.raft_request_route
430+
.request(ClientRequest::CacheReq { req: cache_req })
431+
.await
432+
.ok();
428433
Ok(HttpResponse::Ok()
429434
.cookie(captcha_cookie)
430435
.insert_header(captcha_header)

src/grpc/server.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::sync::Arc;
22
use std::time::SystemTime;
33

4+
use crate::cache::actor_model::CacheManagerRaftResult;
45
use crate::common::appdata::AppShareData;
56
use crate::common::constant::{
67
ACCESS_TOKEN_HEADER, AUTHORIZATION_HEADER, EMPTY_ARC_STRING, EMPTY_CLIENT_VERSION,
@@ -49,8 +50,8 @@ impl RequestServerImpl {
4950
};
5051
if self.app.sys_config.openapi_enable_auth && !token.is_empty() {
5152
if let Ok(Some(session)) = get_user_session(
52-
&self.app.cache_manager,
53-
CacheManagerReq::Get(CacheKey::new(CacheType::ApiTokenSession, token.clone())),
53+
&self.app,
54+
CacheKey::new(CacheType::ApiTokenSession, token.clone()),
5455
)
5556
.await
5657
{
@@ -259,11 +260,16 @@ impl BiRequestStream for BiRequestStreamServerImpl {
259260
}
260261

261262
async fn get_user_session(
262-
cache_manager: &Addr<CacheManager>,
263-
req: CacheManagerReq,
263+
app_share_data: &Arc<AppShareData>,
264+
key: CacheKey,
264265
) -> anyhow::Result<Option<Arc<TokenSession>>> {
265-
match cache_manager.send(req).await?? {
266-
CacheManagerResult::Value(CacheValue::ApiTokenSession(session)) => Ok(Some(session)),
267-
_ => Ok(None),
266+
let req = crate::cache::actor_model::CacheManagerLocalReq::Get(key);
267+
if let CacheManagerRaftResult::Value(crate::cache::model::CacheValue::ApiTokenSession(
268+
session,
269+
)) = app_share_data.direct_cache_manager.send(req).await??
270+
{
271+
Ok(Some(session))
272+
} else {
273+
Ok(None)
268274
}
269275
}

src/openapi/middle/auth_middle.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ where
114114
} else if token.is_empty() {
115115
false
116116
} else if let Ok(Some(session)) = get_user_session(
117-
app_share_data.clone(),
117+
&app_share_data,
118118
CacheKey::new(CacheType::ApiTokenSession, token.clone()),
119119
)
120120
.await
@@ -194,7 +194,7 @@ fn bytes_to_payload(buf: web::Bytes) -> dev::Payload {
194194
}
195195

196196
async fn get_user_session(
197-
app_share_data: Arc<AppShareData>,
197+
app_share_data: &Arc<AppShareData>,
198198
key: CacheKey,
199199
) -> anyhow::Result<Option<Arc<TokenSession>>> {
200200
/*

0 commit comments

Comments
 (0)