summaryrefslogtreecommitdiff
path: root/src/db.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/db.rs')
-rw-r--r--src/db.rs14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/db.rs b/src/db.rs
index e9a5d1f..ba4025f 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -2,9 +2,12 @@ use rusqlite::{Connection};
use std;
use auth::HashedPassword;
+// TODO Replace the unwraps in this file with a custom error type.
+
type Result<T> = std::result::Result<T, String>;
fn is_initialized(conn: &mut Connection) -> Result<bool> {
+ // We just initialize every time for now.
Ok(false)
}
@@ -21,7 +24,7 @@ pub fn init(conn: &mut Connection) -> Result<()> {
Ok(())
}
-pub fn insert_user(conn: &mut Connection,
+pub fn insert_user(conn: &Connection,
username: &str,
password: &HashedPassword) -> Result<()> {
conn.execute("INSERT INTO users (username, salt, passwd)
@@ -29,3 +32,12 @@ pub fn insert_user(conn: &mut Connection,
&[&username, &password.salt, &password.enc]).unwrap();
Ok(())
}
+
+pub fn lookup_user(conn: &Connection,
+ username: &str) -> Result<Option<HashedPassword>> {
+ let mut stmt = conn.prepare("SELECT salt, passwd FROM users WHERE username = ?").unwrap();
+ let result = stmt.query_map(&[&username], |row| {
+ HashedPassword {salt: row.get(0), enc: row.get(1)}
+ }).unwrap().map(|v| v.unwrap()).next();
+ Ok(result)
+}