diff options
author | natrixaeria <janng@gmx.de> | 2019-05-19 18:25:29 +0200 |
---|---|---|
committer | natrixaeria <janng@gmx.de> | 2019-05-19 18:25:29 +0200 |
commit | 36df226f113151fe3c18831a082fea64ba8a0c03 (patch) | |
tree | c1d5976998856c0293dc5edc6e26e1b4318134be | |
parent | 14c163e415a8ad37d9111e6a5a4a34e3cbe0ad74 (diff) |
Validate tokens successfully
-rw-r--r-- | game_server/src/backend_connection.rs | 18 | ||||
-rw-r--r-- | game_server/src/server.rs | 9 | ||||
-rw-r--r-- | game_server/src/ws_test.html | 3 |
3 files changed, 24 insertions, 6 deletions
diff --git a/game_server/src/backend_connection.rs b/game_server/src/backend_connection.rs index fa41791..4a12439 100644 --- a/game_server/src/backend_connection.rs +++ b/game_server/src/backend_connection.rs @@ -15,6 +15,11 @@ pub enum BackendError { RequestError(ReqError), InvalidTokenFormat, InvalidToken, + BadResponse(Response), +} + +struct TokenResponseStruct { + } pub type TokenValidity = Result<(), BackendError>; @@ -61,8 +66,15 @@ impl BackendConnection { pub fn validate_token(&self, token: &Token) -> TokenValidity { let location = format!("/api/lobby/tokens/{}", token); self.request(&location).map_err(|err| BackendError::UrlError(err))?; - let response = self.get_response(); - println!("backend response: {:?}", response); - Ok(()) + let mut response = self.get_response().map_err(|err| BackendError::RequestError(err))?; + if response.status().is_success() { + Ok(()) + } else if response.status() == reqwest::StatusCode::NOT_FOUND { + Err(BackendError::InvalidToken) + } else if response.status().is_client_error() { + Err(BackendError::InvalidTokenFormat) + } else { + Err(BackendError::BadResponse(response)) + } } } diff --git a/game_server/src/server.rs b/game_server/src/server.rs index a4b1ed5..79cd322 100644 --- a/game_server/src/server.rs +++ b/game_server/src/server.rs @@ -55,6 +55,10 @@ impl GameClient { None } } + + fn host_name(&self) -> SocketAddr { + self.addr + } } type ClientConnection = Result<GameClient, GameServerError>; @@ -90,12 +94,13 @@ impl GameServer { std::thread::spawn(move || { let token = client.require_token(); if let Some(token) = token { - println!("Token: {}", token); let locked_backend = backend.lock().unwrap(); let result = locked_backend.validate_token(&token); if let Err(err) = result { - warn!("token {} is invalid: '{:?}'", token, err); + warn!("client's token {} is not valid: '{:?}'", token, err); } else { + debug!("client validation was successfull"); + debug!("add client: ({}, {})", token, client.host_name()); clients.lock().unwrap().insert(token, client); } } else { diff --git a/game_server/src/ws_test.html b/game_server/src/ws_test.html index ea259b7..f802327 100644 --- a/game_server/src/ws_test.html +++ b/game_server/src/ws_test.html @@ -26,7 +26,8 @@ function test_connection() { ws.addEventListener('open', function (event) { add_text('connection established'); toggle_connected(true); - ws.send('1230123'); + // send token + ws.send('42'); }); ws.addEventListener('error', function (event) { add_text('ws error occured: "' + event + '"'); |