diff --git a/.gitignore b/.gitignore index ea8c4bf..a3bb07f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +authorize_data/ diff --git a/src/authorize_data/database.db b/src/authorize_data/database.db index a288a2d..da9065e 100644 Binary files a/src/authorize_data/database.db and b/src/authorize_data/database.db differ diff --git a/src/db.rs b/src/db.rs index d1deaf9..3739dd4 100644 --- a/src/db.rs +++ b/src/db.rs @@ -14,7 +14,7 @@ pub struct Authorize { pub insert_time: String, } -pub(crate) struct InsertArgs { +pub struct InsertArgs { pub project: String, pub token: String, pub device_id: String, @@ -64,6 +64,24 @@ impl Db { Ok(Db { client }) } + /// 通过project和device_id查询是否存在数据库 + pub async fn exists_project( + &self, + project: &str, + device_id: &str, + ) -> Result, Box> { + let row = Authorize::all() + .where_col(|a| a.project.equal(project)) + .where_col(|a| a.device_id.equal(device_id)) + .limit(1) + .run(&self.client) + .await? + .into_inners() + .into_iter() + .next(); + Ok(row) + } + /// 判断 token 是否存在 pub async fn verify_token( &self, diff --git a/src/main.rs b/src/main.rs index 7c0df36..6d4a176 100644 --- a/src/main.rs +++ b/src/main.rs @@ -67,7 +67,27 @@ async fn main() -> Result<(), Box> { async fn create_token( State(state): State, Query(args): Query, -) -> (StatusCode, Json) { +) -> (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: 404, + project: info.project, + device_id: info.device_id, + token: info.token, + msg: "token已存在,请勿重复创建".to_owned(), + }), + ) + } + None => (), + } let str_time = get_current_datetime(); let exp_time = add_day(&str_time, 7).unwrap(); @@ -85,11 +105,11 @@ async fn create_token( ( StatusCode::OK, - Json(CreateResult { + Json(CreateTokenInfo { code: 200, project: args.project, device_id: args.device_id, - token: token, + token, msg: "token创建成功".to_owned(), }), ) @@ -150,15 +170,6 @@ struct CreateToken { device_id: String, } -#[derive(Serialize)] -struct CreateResult { - code: i16, - project: String, - device_id: String, - token: String, - msg: String, -} - #[derive(Clone)] struct AppState { db: Arc, @@ -197,3 +208,12 @@ enum TokenResponse { Success(TokenInfo), Error(QueryError), } + +#[derive(Serialize)] +struct CreateTokenInfo { + code: i16, + project: String, + device_id: String, + token: String, + msg: String, +}