feat: Implement game opinion functionality, update authentication to store username in token, and protect user list with a mutex.
This commit is contained in:
+12
-5
@@ -20,7 +20,10 @@ impl AuthState {
|
||||
|
||||
#[derive(Debug)]
|
||||
#[allow(dead_code)]
|
||||
pub struct Token(pub String);
|
||||
pub struct Token {
|
||||
pub token: String,
|
||||
pub username: String,
|
||||
}
|
||||
|
||||
#[rocket::async_trait]
|
||||
impl<'r> rocket::request::FromRequest<'r> for Token {
|
||||
@@ -38,8 +41,11 @@ impl<'r> rocket::request::FromRequest<'r> for Token {
|
||||
let state = request.guard::<&State<AuthState>>().await.unwrap();
|
||||
let tokens = state.tokens.lock().unwrap();
|
||||
|
||||
if tokens.contains_key(token) {
|
||||
return rocket::request::Outcome::Success(Token(token.to_string()));
|
||||
if let Some(username) = tokens.get(token) {
|
||||
return rocket::request::Outcome::Success(Token {
|
||||
token: token.to_string(),
|
||||
username: username.clone(),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,12 +59,13 @@ impl<'r> rocket::request::FromRequest<'r> for Token {
|
||||
#[post("/login", data = "<request>")]
|
||||
pub fn login(
|
||||
state: &State<AuthState>,
|
||||
user_list: &State<Vec<crate::User>>,
|
||||
user_list: &State<Mutex<Vec<crate::User>>>,
|
||||
request: Proto<items::LoginRequest>,
|
||||
) -> items::LoginResponse {
|
||||
let req = request.into_inner();
|
||||
let users = user_list.lock().unwrap();
|
||||
|
||||
if let Some(user) = user_list.iter().find(|u| u.name == req.username)
|
||||
if let Some(user) = users.iter().find(|u| u.person.name == req.username)
|
||||
&& bcrypt::verify(&req.password, &user.password_hash).unwrap_or(false)
|
||||
{
|
||||
let token = Uuid::new_v4().to_string();
|
||||
|
||||
Reference in New Issue
Block a user