summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornatrixaeria <janng@gmx.de>2019-05-19 18:25:29 +0200
committernatrixaeria <janng@gmx.de>2019-05-19 18:25:29 +0200
commit36df226f113151fe3c18831a082fea64ba8a0c03 (patch)
treec1d5976998856c0293dc5edc6e26e1b4318134be
parent14c163e415a8ad37d9111e6a5a4a34e3cbe0ad74 (diff)
Validate tokens successfully
-rw-r--r--game_server/src/backend_connection.rs18
-rw-r--r--game_server/src/server.rs9
-rw-r--r--game_server/src/ws_test.html3
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 + '"');