Add user roles

pull/5/head
~erin 2021-07-22 17:17:55 -04:00
parent 6328e05b16
commit 49d307a3b6
Signed by: erin
GPG Key ID: DA70E064A8C70F44
6 changed files with 42 additions and 46 deletions

28
Cargo.lock generated
View File

@ -228,9 +228,9 @@ dependencies = [
[[package]]
name = "crypto-mac"
version = "0.10.0"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4857fd85a0c34b3c3297875b747c1e02e06b6a0ea32dd892d8192b9ce0813ea6"
checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a"
dependencies = [
"generic-array",
"subtle",
@ -301,9 +301,9 @@ dependencies = [
[[package]]
name = "fastrand"
version = "1.4.1"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77b705829d1e87f762c2df6da140b26af5839e1033aa84aa5f56bb688e4e1bdb"
checksum = "b394ed3d285a429378d3b384b9eb1285267e7df4b166df24b7a6939a04dc392e"
dependencies = [
"instant",
]
@ -572,9 +572,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]]
name = "libc"
version = "0.2.97"
version = "0.2.98"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6"
checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790"
[[package]]
name = "lock_api"
@ -807,7 +807,7 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
[[package]]
name = "pogchat"
version = "0.5.0"
version = "0.5.1"
dependencies = [
"bincode",
"chrono",
@ -1062,7 +1062,7 @@ checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43"
dependencies = [
"proc-macro2 1.0.27",
"quote 1.0.9",
"syn 1.0.73",
"syn 1.0.74",
]
[[package]]
@ -1148,9 +1148,9 @@ dependencies = [
[[package]]
name = "syn"
version = "1.0.73"
version = "1.0.74"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7"
checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c"
dependencies = [
"proc-macro2 1.0.27",
"quote 1.0.9",
@ -1178,9 +1178,9 @@ dependencies = [
[[package]]
name = "tinyvec"
version = "1.2.0"
version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b5220f05bb7de7f3f53c7c065e1199b3172696fe2db9f9c4d8ad9b4ee74c342"
checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338"
dependencies = [
"tinyvec_macros",
]
@ -1259,9 +1259,9 @@ checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
[[package]]
name = "universal-hash"
version = "0.4.0"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402"
checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"
dependencies = [
"generic-array",
"subtle",

View File

@ -77,10 +77,10 @@ Whenever user sends a message, client will send message & token and backend will
- [x] Fail on NULL token
- [x] Pronouns
- [x] Set pronouns
- [ ] Change pronouns
- [ ] Multiple sets of pronouns
- [x] Change pronouns
- [ ] Some form of plural support?
- [ ] User management (banning, etc.)
- [ ] User roles (admin, mod, etc.)
- [ ] Blacklist words from chat/names
- [ ] More advanced chat features
- [x] Different types of message events? eg. default, announcement, command

View File

@ -1,7 +1,7 @@
extern crate log;
use crate::file_io::{db_add, db_write, db_read};
use rocket::http::{Cookie, Cookies, SameSite};
use crate::user::User;
use rocket::http::{Cookie, Cookies};
use crate::user::{User, UserType};
use rocket_contrib::json::{Json, JsonValue};
use random_string::generate;
extern crate sha1;
@ -40,13 +40,14 @@ pub fn register_user(name: String, pin: i32, pronouns: String) -> JsonValue {
}
let pin_hashed = sha1::Sha1::from(&pin.to_string()).digest().to_string(); // hash the pin
let new_user: User = User {
name: name.to_string().to_lowercase(),
pin_hashed: pin_hashed,
pin_hashed,
pronouns: pronouns.to_string().to_lowercase(),
session_token: "NULL".to_string(),
}; // append the user to the vec
role: UserType::Normal,
};
/*
// append to the json file
@ -409,6 +410,7 @@ pub fn get_user(name: String) -> JsonValue {
"user": {
"name": user.name,
"pronouns": user.pronouns,
"role": user.role,
},
}),
None => json!({
@ -417,3 +419,13 @@ pub fn get_user(name: String) -> JsonValue {
}),
}
}
/*
#[derive(Deserialize, Debug)]
pub struct ModerationAction {
}
/* User Management */
#[post("/mod", format = "json", data = "<data>")]
pub fn moderation_actions(data: Json<ModerationAction<'_>>, mut cookies: Cookies) -> JsonValue {
}*/

View File

@ -9,7 +9,6 @@ use rocket_contrib::json::{Json, JsonValue};
use chrono::prelude::*;
use uuid::Uuid;
use crate::user::User;
use std::time::{Duration, SystemTime};
static MESSAGES: Lazy<Mutex<Vec<Message>>> = Lazy::new(|| Mutex::new(Vec::new()));
@ -33,9 +32,9 @@ fn create_message(message: Json<MessageInput>, file: &str, user: &User) -> JsonV
// create full message object
let message_obj: Message = Message {
id: Uuid::new_v4(),
event_type,
user: user.name.to_owned(),
body: message.body.to_string(),
event_type: event_type,
created_at: Utc::now(),
};
info!("created mesage: {:?}", message_obj);

View File

@ -97,28 +97,6 @@ pub fn write_json(users_list: &Vec<User>) -> Result<()> {
Ok(())
}
// test sled funtion
pub fn test_sled() {
// create test user
let user = User {
name: "erin".to_string(),
pin_hashed: "nyaa".to_string(),
pronouns: "she/her".to_string(),
session_token: "NULL".to_string(),
};
// open database
let db: sled::Db = sled::open("my_db").unwrap();
let bytes = bincode::serialize(&user).unwrap();
db.insert(&user.name, bytes).unwrap();
match db.get(user.name).unwrap() {
Some(bytes) => {
let read_user: User = bincode::deserialize(&bytes).unwrap();
println!("username: {}, pronouns: {}", read_user.name, read_user.pronouns);
},
None => (),
}
}
// add a user to the database
pub fn db_add(user: &User) {
let db: sled::Db = sled::open("users_db").unwrap();

View File

@ -1,11 +1,18 @@
use serde::{Deserialize, Serialize};
#[derive(Clone, Serialize, Deserialize, Debug)]
pub enum UserType {
Normal,
Moderator,
Admin,
}
// Struct to store basic user data
#[derive(Clone, Serialize, Deserialize, Debug)]
pub struct User {
pub name: String,
pub pin_hashed: String,
pub pronouns: String,
#[serde(rename = "sessionToken")]
pub session_token: String,
pub role: UserType,
}