ソースを参照

暂存,修改若干位置的超时,更正访问sqlite文件路径(此前弄混了mqtt插件侧启用的sqlite文件)

zii 1 ヶ月 前
コミット
e8d2a657bf
4 ファイル変更22 行追加11 行削除
  1. 10 2
      src/api/ability.rs
  2. 4 4
      src/api/auth.rs
  3. 1 1
      src/datasource/sqlite.rs
  4. 7 4
      src/main.rs

+ 10 - 2
src/api/ability.rs

@@ -143,8 +143,16 @@ pub async fn get_mqtt(
         return Json(MqttBack{errcode: 3000, errmsg: Some("数据库异常: 获取用户mqtt-clientid失败".to_string()),mqttp:None,clientid:None,mqttu:None});
     };
     if let Some(d) = state.mq_detail{
-        if let Err(e)=d.db_mq_user.execute("update user set user=?, pass=? where clientid=?", (mqtu.clone(),mqtp.clone(),mqid.clone())).await{
-            log(Warning, format!("fail to update mqttuser: {e}"));
+        match d.db_mq_user.execute("update user set user=?, pass=? where clientid=?", (mqtu.clone(),mqtp.clone(),mqid.clone())).await{
+            Ok(n) => {if n==0{
+                log(Warning, format!("update mqttuser failed: no row updated"));
+                if let Err(e)=d.db_mq_user.execute("insert into user(clientid,user,pass,deadline) values(?,?,?,unixepoch()+300)", (mqid.clone(),mqtu.clone(),mqtp.clone())).await{
+                    log(Warning, format!("insert mqttuser failed: {e}"));
+                } else {
+                    log(Debug, format!("insert mqttuser success"));
+                }
+            }}
+            Err(e)=>{log(Warning, format!("fail to update mqttuser: {e}"));}
         }
     }
 

+ 4 - 4
src/api/auth.rs

@@ -119,13 +119,13 @@ pub async fn auth(
                 } else{
                     if let Some(mq) = state.mq_detail{
                         if let Err(e)=mq.db_mq_map.execute(
-                            "insert into pub (clientid,topic,deadline)values(?,?,unixepoch()+9223372036854775807),(?,?,unixepoch()+9223372036854775807)", 
+                            "insert into pub (clientid,topic,deadline)values(?,?,9223372036854775807),(?,?,9223372036854775807)", 
                             (mqid.clone(),format!("{}/cmd",sn),mqid.clone(),format!("/wf/Iot/device/{sn}"))).await{
                             log(Warning, format!("on register with device: {e}"));
                         };
                         
                         if let Err(e)=mq.db_mq_map.execute(
-                            "insert into sub (clientid,topic,deadline)values(?,?,unixepoch()+9223372036854775807)", 
+                            "insert into sub (clientid,topic,deadline)values(?,?,9223372036854775807),(?,?,9223372036854775807)", 
                             (mqid.clone(),format!("{}/state",sn),mqid.clone(),format!("/wf/Iot/client/{sn}"))).await{
                             log(Warning, format!("on register with device: {e}"));
                         };
@@ -190,13 +190,13 @@ pub async fn auth(
             };
             if let Some(mq) = state.mq_detail{
                 if let Err(e)=mq.db_mq_map.execute(
-                    "insert into pub (clientid,topic,deadline)values(?,?,unixepoch()+9223372036854775807),(?,?,unixepoch()+9223372036854775807)", 
+                    "insert into pub (clientid,topic,deadline)values(?,?,9223372036854775807),(?,?,9223372036854775807)", 
                     (mqid.clone(),format!("{}/cmd",sn),mqid.clone(),format!("/wf/Iot/device/{sn}"))).await{
                     log(Warning, format!("on register with device: {e}"));
                 };
                 
                 if let Err(e)=mq.db_mq_map.execute(
-                    "insert into sub (clientid,topic,deadline)values(?,?,unixepoch()+9223372036854775807)", 
+                    "insert into sub (clientid,topic,deadline)values(?,?,9223372036854775807),(?,?,9223372036854775807)", 
                     (mqid.clone(),format!("{}/state",sn),mqid.clone(),format!("/wf/Iot/client/{sn}"))).await{
                     log(Warning, format!("on register with device: {e}"));
                 };

+ 1 - 1
src/datasource/sqlite.rs

@@ -77,7 +77,7 @@ impl crate::datasource::Datasource for SqlitePool{
             Ok(Err(e)) => return Err(format!("connection err: {}",e.to_string())),
             Err(_) => return Err("Timeout".to_string())
         }.prepare(sql)
-        .map_err(|e| {log(Warning, format!("{}:{}:{}", file!(), line!(), column!()));e.to_string()})
+        .map_err(|e| {log(Warning, format!("{}:{}:{},{e}", file!(), line!(), column!()));e.to_string()})
         .and_then(|mut stmt| {
             let mut results = Vec::new();
             let mut rows = stmt.query(params).map_err(|e| e.to_string())?;

+ 7 - 4
src/main.rs

@@ -120,9 +120,11 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
         db_lite: sqlite::init_sqlite_pool(&conf.db, 10).await?,
         mq_detail: if   
             let (Ok(a),Ok(b),Ok(c)) = 
-            (sqlite::init_sqlite_pool("/var/lib/mosquitto/db/user.db", 10).await,
-             sqlite::init_sqlite_pool("/var/lib/mosquitto/db/acl.db", 10).await,
-             sqlite::init_sqlite_pool("/var/lib/mosquitto/db/dev.db", 10).await){
+            (
+                sqlite::init_sqlite_pool("/var/lib/mosquitto/db/user.db", 10).await,
+                sqlite::init_sqlite_pool("/var/lib/mosquitto/db/dev.db", 10).await,
+                sqlite::init_sqlite_pool("/var/lib/mosquitto/db/acl.db", 10).await,
+            ){
                 Some(MqDetail { db_mq_user: a, db_mq_latest: b, db_mq_map: c })
              } else{None}
     };
@@ -138,7 +140,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
         // .nest("/api", axum::Router::new()
             // .route("/wx/auth", get(api::auth::auth))
         .route("/mq", post(api::ability::get_mqtt))
-            .route("/loggin", post(api::user::u_loggin))
+
+        .route("/loggin", post(api::user::u_loggin))
 
             .route("/device", post(api::device::d_all))