From 6053d4fbdee836aea2b7c76cfdfc40bcf9db35bc Mon Sep 17 00:00:00 2001 From: Alex Emmet <111742636+Alex-Emmet@users.noreply.github.com> Date: Wed, 14 Jan 2026 22:21:05 +0100 Subject: [PATCH] User Auth / iota auth --- src/server/omikron_connection.rs | 4 +--- src/sql/sql.rs | 37 ++++++++++++++++++++------------ 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/server/omikron_connection.rs b/src/server/omikron_connection.rs index be110a4..e86eb65 100644 --- a/src/server/omikron_connection.rs +++ b/src/server/omikron_connection.rs @@ -651,14 +651,12 @@ impl OmikronConnection { cv.get_data(DataTypes::username).and_then(|v| v.as_str()), cv.get_data(DataTypes::public_key).and_then(|v| v.as_str()), cv.get_data(DataTypes::iota_id).and_then(|v| v.as_i64()), - cv.get_data(DataTypes::reset_token).and_then(|v| v.as_str()), // Assuming reset_token is sent as token + cv.get_data(DataTypes::reset_token).and_then(|v| v.as_str()), ) { - // The documentation does not specify a private_key_hash, using an empty string. match sql::register_complete_user( user_id, username.to_string(), public_key.to_string(), - "".to_string(), // private_key_hash iota_id, reset_token.to_string(), ) diff --git a/src/sql/sql.rs b/src/sql/sql.rs index d460f6c..ec0f1d2 100644 --- a/src/sql/sql.rs +++ b/src/sql/sql.rs @@ -445,22 +445,22 @@ pub async fn register_complete_user( id: i64, username: String, public_key: String, - private_key_hash: String, iota_id: i64, token: String, ) -> Result<(), sqlx::Error> { let db_lock = SQL_DB.read().await; let pool = db_lock.as_ref().expect("Database pool is not initialized"); - sqlx::query("INSERT INTO users (id, username, public_key, private_key_hash, iota_id, token) VALUES (?, ?, ?, ?, ?, ?)") - .bind(id) - .bind(username) - .bind(public_key) - .bind(private_key_hash) - .bind(iota_id) - .bind(token) - .execute(pool) - .await?; + sqlx::query( + "INSERT INTO users (id, username, public_key, iota_id, token) VALUES (?, ?, ?, ?, ?)", + ) + .bind(id) + .bind(username) + .bind(public_key) + .bind(iota_id) + .bind(token) + .execute(pool) + .await?; Ok(()) } @@ -541,14 +541,23 @@ pub async fn get_iota_by_id(id: i64) -> Result<(i64, String), sqlx::Error> { let db_lock = SQL_DB.read().await; let pool = db_lock.as_ref().expect("Database pool is not initialized"); - sqlx::query_as::<_, (i64, Vec)>( + let result = sqlx::query_as::<_, (u64, Vec)>( "SELECT id, public_key FROM iotas WHERE id = CAST(? AS UNSIGNED)", ) .bind(id) .fetch_optional(pool) - .await? - .map(|(id, public_key)| (id, String::from_utf8_lossy(&public_key).to_string())) - .ok_or_else(|| sqlx::Error::RowNotFound) + .await; + + match result { + Ok(optional_row) => match optional_row { + Some((id_u64, public_key)) => Ok(( + id_u64 as i64, + String::from_utf8_lossy(&public_key).to_string(), + )), + None => Err(sqlx::Error::RowNotFound), + }, + Err(e) => Err(e), + } } pub async fn change_iota_key(id: i64, new_key: String) -> Result<(), sqlx::Error> {