From 6e8eb0aaaa9da7f0a1dcd262468a0e4425990342 Mon Sep 17 00:00:00 2001 From: matresnan <1358168412@qq.com> Date: Thu, 28 Aug 2025 16:18:14 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=96=B0=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E8=BF=94=E5=9B=9E=E7=B1=BB=E5=9E=8B=E5=B9=B6=E5=A2=9E?= =?UTF-8?q?=E5=BC=BA=E4=BB=A4=E7=89=8C=E9=AA=8C=E8=AF=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将insert_authorize方法的返回值从i32改为Authorize类型。 - 为令牌创建逻辑添加过期检查和状态验证功能。 --- src/db.rs | 6 ++--- src/main.rs | 65 +++++++++++++++++++++++++++++++---------------------- 2 files changed, 41 insertions(+), 30 deletions(-) diff --git a/src/db.rs b/src/db.rs index 4f5b5cf..21012fc 100644 --- a/src/db.rs +++ b/src/db.rs @@ -133,7 +133,7 @@ impl Db { pub async fn insert_authorize( &self, args: InsertArgs, - ) -> Result> { + ) -> Result> { let mut auth = Authorize::new(); auth.project = args.project.to_string(); auth.token = args.token.to_string(); @@ -142,8 +142,8 @@ impl Db { auth.expire = args.expire.to_string(); auth.insert_time = args.insert_time.to_string(); - let _created = auth.save(&self.client).await?; - Ok(auth.id) + auth.save(&self.client).await?; + Ok(auth.into_inner()) } /// 禁用 Token diff --git a/src/main.rs b/src/main.rs index a8e3cd9..0847554 100644 --- a/src/main.rs +++ b/src/main.rs @@ -44,53 +44,63 @@ async fn main() -> Result<(), Box> { Ok(()) } +fn check_datetime(t: &str) -> Result { + let expire_time = NaiveDateTime::parse_from_str(&t, "%Y-%m-%d %H:%M:%S")?; + Ok(Local::now().naive_local() < expire_time) +} + +fn is_valid(disable: i8, expire: &str) -> bool { + disable == 1 && check_datetime(expire).unwrap_or(false) +} + async fn create_token( State(state): State, Query(args): Query, ) -> (StatusCode, Json) { - let exists = state - .db - .exists_project(&args.project, &args.device_id) - .await - .unwrap(); - match exists { - Some(info) => { - return ( - StatusCode::OK, - Json(CreateTokenInfo { - code: 200, - project: info.project, - device_id: info.device_id, - token: info.token, - msg: "token已存在,请勿重复创建".to_owned(), - }), - ) - } - None => (), + let CreateToken { project, device_id } = args; + if let Some(info) = + state.db.exists_project(&project, &device_id).await.unwrap() + { + let valid = is_valid(info.disable, &info.expire); + return ( + StatusCode::OK, + Json(CreateTokenInfo { + code: 200, + project: info.project, + device_id: info.device_id, + token: info.token, + status: valid, + msg: "token已存在,请勿重复创建".to_owned(), + }), + ); } + let str_time = get_current_datetime(); let exp_time = add_day(&str_time, 7).unwrap(); let token: String = state.generator.generate(16); - let _token_id = state + let create_auth = state .db .insert_authorize(InsertArgs { - project: args.project.clone(), - token: token.clone(), - device_id: args.device_id.clone(), + project, + token: token, + device_id, disable: 1, expire: exp_time, insert_time: str_time, }) - .await; + .await + .unwrap(); + let valid = is_valid(create_auth.disable, &create_auth.expire); ( StatusCode::OK, Json(CreateTokenInfo { code: 200, - project: args.project, - device_id: args.device_id, - token, + project: create_auth.project, + device_id: create_auth.device_id, + token: create_auth.token, + status: valid, msg: "token创建成功".to_owned(), }), ) @@ -341,6 +351,7 @@ struct CreateTokenInfo { project: String, device_id: String, token: String, + status: bool, msg: String, }