torii_storage_sqlite/
password.rs1use crate::SqliteStorage;
2use async_trait::async_trait;
3use torii_core::UserId;
4use torii_core::error::StorageError;
5use torii_core::storage::PasswordStorage;
6
7#[async_trait]
8impl PasswordStorage for SqliteStorage {
9 async fn set_password_hash(
10 &self,
11 user_id: &UserId,
12 hash: &str,
13 ) -> Result<(), torii_core::Error> {
14 sqlx::query("UPDATE users SET password_hash = $1 WHERE id = $2")
15 .bind(hash)
16 .bind(user_id.as_str())
17 .execute(&self.pool)
18 .await
19 .map_err(|e| StorageError::Database(e.to_string()))?;
20 Ok(())
21 }
22
23 async fn get_password_hash(
24 &self,
25 user_id: &UserId,
26 ) -> Result<Option<String>, torii_core::Error> {
27 let result = sqlx::query_scalar("SELECT password_hash FROM users WHERE id = $1")
28 .bind(user_id.as_str())
29 .fetch_optional(&self.pool)
30 .await
31 .map_err(|e| StorageError::Database(e.to_string()))?;
32 Ok(result)
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use super::*;
39 use crate::tests::{create_test_user, setup_sqlite_storage};
40
41 #[tokio::test]
42 async fn test_password_hash() {
43 let storage = setup_sqlite_storage()
44 .await
45 .expect("Failed to setup storage");
46
47 let user = create_test_user(&storage, "1")
49 .await
50 .expect("Failed to create user");
51
52 let hash = "test_hash_123";
54 storage
55 .set_password_hash(&user.id, hash)
56 .await
57 .expect("Failed to set password hash");
58
59 let stored_hash = storage
61 .get_password_hash(&user.id)
62 .await
63 .expect("Failed to get password hash");
64
65 assert_eq!(stored_hash, Some(hash.to_string()));
66
67 let non_existent = storage
69 .get_password_hash(&UserId::new("non_existent"))
70 .await
71 .expect("Failed to get password hash");
72
73 assert_eq!(non_existent, None);
74 }
75
76 #[tokio::test]
77 async fn test_password_hash_update() {
78 let storage = setup_sqlite_storage()
79 .await
80 .expect("Failed to setup storage");
81
82 let user = create_test_user(&storage, "1")
84 .await
85 .expect("Failed to create user");
86
87 let initial_hash = "initial_hash_123";
88 storage
89 .set_password_hash(&user.id, initial_hash)
90 .await
91 .expect("Failed to set initial password hash");
92
93 let updated_hash = "updated_hash_456";
95 storage
96 .set_password_hash(&user.id, updated_hash)
97 .await
98 .expect("Failed to set updated password hash");
99
100 let stored_hash = storage
102 .get_password_hash(&user.id)
103 .await
104 .expect("Failed to get updated password hash");
105
106 assert_eq!(stored_hash, Some(updated_hash.to_string()));
107 }
108}