diff options
Diffstat (limited to 'src/db.rs')
-rw-r--r-- | src/db.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/db.rs b/src/db.rs new file mode 100644 index 0000000..71490d8 --- /dev/null +++ b/src/db.rs @@ -0,0 +1,36 @@ +use crate::models; +use crate::error::Error; +use diesel::connection::Connection; +use diesel::pg::PgConnection; +use diesel::RunQueryDsl; +use rand::Rng; +use rand; +use base64; +use bcrypt; + +pub const COST: u32 = 12; + +pub fn create_config(conn: &PgConnection, config: &models::Config) -> Result<(), Error> { + use crate::schema::config; + + conn.transaction(|| { + diesel::delete(config::table).execute(conn)?; + + diesel::insert_into(config::table) + .values(config) + .execute(conn)?; + Ok(()) + }) +} + +pub fn adduser(conn: &PgConnection, username: &str, password: &str) -> Result<(), Error> { + use crate::schema::users; + + let hashed = bcrypt::hash(password, COST)?; + let rows = diesel::insert_into(users::table) + .values(models::User::new(username, &hashed)).execute(conn)?; + if rows != 1 { + Err(Error::AlreadyExists)?; + } + Ok(()) +} |