diff --git a/server/Cargo.toml b/server/Cargo.toml index 0eae311f..2cb579aa 100755 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -15,7 +15,7 @@ bcrypt = "0.2" dotenv = "0.9.0" env_logger = "*" +postgres = { version = "0.15", features = ["with-uuid"] } +r2d2 = "*" +r2d2_postgres = "*" -r2d2 = "0.8.2" -r2d2_sqlite = "0.6" -rusqlite = { version = "0.14.0", features = ["bundled"] } diff --git a/server/src/combat.rs b/server/src/combat.rs index dcec1447..d10ffbc9 100755 --- a/server/src/combat.rs +++ b/server/src/combat.rs @@ -82,7 +82,7 @@ pub fn test_battle() { match outcome.winner() { Some(w) => println!("{:?} is the winner with {:?} hp remaining", w.name, w.hp), - // None => println!("{:?} was a draw", outcome), + None => println!("{:?} was a draw", outcome), }; return diff --git a/server/src/cryp.rs b/server/src/cryp.rs index 793c3986..0ed27051 100755 --- a/server/src/cryp.rs +++ b/server/src/cryp.rs @@ -102,7 +102,7 @@ impl Cryp { }; } - pub fn named(self, name: String) -> Cryp { + pub fn named(mut self, name: String) -> Cryp { self.name = name.clone(); self } diff --git a/server/src/main.rs b/server/src/main.rs index 4a761a0e..bd86f468 100755 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -2,20 +2,19 @@ extern crate rand; extern crate uuid; extern crate ws; extern crate env_logger; +extern crate bcrypt; -// #[macro_use] -// extern crate dotenv; +#[macro_use] +extern crate dotenv; +extern crate postgres; extern crate r2d2; -extern crate r2d2_sqlite; -extern crate rusqlite; +extern crate r2d2_postgres; extern crate serde; extern crate serde_cbor; #[macro_use] extern crate serde_derive; -extern crate bcrypt; - mod cryp; mod battle; mod net; @@ -24,8 +23,10 @@ mod skill; mod rpc; mod user; +use dotenv::dotenv; use net::{start}; fn main() { + dotenv().ok(); start() } diff --git a/server/src/net.rs b/server/src/net.rs index 14c4210b..70ab4434 100755 --- a/server/src/net.rs +++ b/server/src/net.rs @@ -1,11 +1,13 @@ use ws::{listen, Handler, Sender, Result, Message, Handshake, CloseCode, Error}; use serde_cbor::{to_vec}; +use std::env; + use r2d2::{Pool}; use r2d2::{PooledConnection}; -use r2d2_sqlite::{SqliteConnectionManager}; +use r2d2_postgres::{TlsMode, PostgresConnectionManager}; -pub type Db = PooledConnection; +pub type Db = PooledConnection; use cryp::{generate}; use rpc::{Rpc,RpcMessage}; @@ -13,7 +15,7 @@ use rpc::{Rpc,RpcMessage}; struct Server { out: Sender, rpc: Rpc, - db: Pool, + db: Pool, } impl Handler for Server { @@ -32,7 +34,7 @@ impl Handler for Server { fn on_close(&mut self, code: CloseCode, reason: &str) { match code { CloseCode::Normal => println!("The client is done with the connection."), - // CloseCode::Away => println!("The client is leaving the site."), + CloseCode::Away => println!("The client is leaving the site."), CloseCode::Abnormal => println!( "Closing handshake failed! Unable to obtain closing status from client."), _ => println!("The client encountered an error: {}", reason), @@ -45,7 +47,11 @@ impl Handler for Server { } pub fn start() { - let manager = SqliteConnectionManager::file("/var/cryps/cryps.db"); + let database_url = env::var("DATABASE_URL") + .expect("DATABASE_URL must be set"); + + let manager = PostgresConnectionManager::new(database_url, TlsMode::None) + .expect("could not instantiate pg manager"); let pool = Pool::builder() .build(manager) diff --git a/server/src/user.rs b/server/src/user.rs index 49f599c1..8512e249 100644 --- a/server/src/user.rs +++ b/server/src/user.rs @@ -3,38 +3,35 @@ use uuid::Uuid; use net::Db; use rpc::{AccountCreateParams}; -use bcrypt::{DEFAULT_COST, hash}; +#[derive(Debug,Clone,Serialize,Deserialize)] struct User { - name: String, - password: String, id: Uuid, + name: String, } pub fn create(params: AccountCreateParams, db: Db) -> Vec { - let pw_hash = hash(¶ms.password, DEFAULT_COST) - .expect("unable to hash password"); - - let uuid = Uuid::new_v4(); - + let id = Uuid::new_v4(); let user = User { - id: uuid, - password: pw_hash, - name: params.name, + id, + name: "heeeya".to_string(), }; let query = " - INSERT INTO users (id, name, password) - VALUES ($1, $2, $3) + INSERT INTO users (id, name) + VALUES ($1, $2) + RETURNING *; "; - let entry = db - .query(query, &[&user.id.to_string(), &user.name]).unwrap(); + let result = db.query(query, &[&user.id, &user.name]).expect("user insert failed"); + let returned = result.iter().next().expect("no row returned"); + + let entry = User { + id: returned.get(0), + name: returned.get(1), + }; println!("{:?}", entry); - match to_vec(&true) { - Ok(v) => v, - Err(e) => panic!("couldn't serialize cryp"), - } + to_vec(&entry).expect("serialising user failed") }