From d458c767da041d17781c5f2da25372af69a5d3aa Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Sat, 17 Jun 2017 11:19:03 -0400 Subject: sqlite: Initialize database. --- src/bin/main.rs | 11 ++++++++++- src/db.rs | 22 ++++++++++++++++++++++ src/lib.rs | 1 + 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/db.rs (limited to 'src') diff --git a/src/bin/main.rs b/src/bin/main.rs index 94bdd71..36d6c00 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -6,6 +6,7 @@ extern crate systemhttp; extern crate env_logger; #[macro_use] extern crate clap; +extern crate sqlite; fn main() { let matches = clap_app!( @@ -13,13 +14,21 @@ fn main() { (version: "0.1") (author: "Kjetil Ørbekk") (about: "A systemd web frontend") - (@arg PORT: -p --port +takes_value "Port to serve on")) + (@arg PORT: -p --port +takes_value "Port to serve on") + (@arg DB_FILE: --db_file +required +takes_value + "Path to sqlite database")) .get_matches(); let port = matches.value_of("PORT").unwrap_or("8080") .parse::().expect("port number"); + let db_file = matches.value_of("DB_FILE").unwrap(); + env_logger::init().unwrap(); + let mut conn = sqlite::Connection::open(db_file) + .expect(format!("opening sqlite database at {}", db_file).as_str()); + systemhttp::db::init(&mut conn); + let _server = systemhttp::server::serve(port).unwrap(); println!("Serving on {}", port); } diff --git a/src/db.rs b/src/db.rs new file mode 100644 index 0000000..678e603 --- /dev/null +++ b/src/db.rs @@ -0,0 +1,22 @@ +use sqlite::{Connection}; +use std; + +type Result = std::result::Result; + +fn is_initialized(conn: &mut Connection) -> Result { + Ok(false) +} + +pub fn init(conn: &mut Connection) -> Result<()> { + if !is_initialized(conn)? { + info!("Initializing db..."); + conn.execute(" + BEGIN; + CREATE TABLE users (username TEXT, + salt TEXT, + passwd TEXT); + COMMIT; + ").unwrap(); + } + Ok(()) +} diff --git a/src/lib.rs b/src/lib.rs index ad0f971..eaa1956 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -18,6 +18,7 @@ pub mod systemd; pub mod render; pub mod auth; pub mod server; +pub mod db; #[cfg(test)] mod tests { -- cgit v1.2.3