diff --git a/server/src/users.rs b/server/src/users.rs new file mode 100644 index 0000000..2be8975 --- /dev/null +++ b/server/src/users.rs @@ -0,0 +1,42 @@ +use chrono:Utc; +use payload::NewUserInfo; +use getrandom::getrandom; +use bcrypt::{hash, DEFAULT_COST}; + +fn rand_string() -> Option { + // Returns a random string which we later hash with bcrypt + let mut raw_slice = [0u8; 32]; + if let Some(_ignored) = getrandom(raw_slice) { + let mut buf = String::new(); + for i in raw_slice { + let mut cv: u8 = *i; + if cv > 126 { cv %= 126; } + if cv < 33 { cv += 34; } + buf.push(cv as char); + } + Some(buf) + } + else { + None + } +} + +fn rand_uid() -> u64 { + let mut buf = [0u8;8]; + let _r = getrandom(&mut buf); // this basically never fails hehexd + u64::from_ne_bytes(buf) +} + +// Returns a struct of payload::NewUserInfo +pub fn createNewUser() -> NewUserInfo { + let uid = rand_id(); + let uname = format!("User: {}", uid); + let hashkey = bcrypt(rand_string(), DEFAULT_COST); + // Fuck it + NewUserInfo { + userid: uid, + username: uname, + key_hash: hashkey, + valid: true + } +} \ No newline at end of file