diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-08-11 14:29:43 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-08-11 14:29:43 +0300 |
commit | 04edaab436dae1747270d7d10c0586a2a4c222bf (patch) | |
tree | e8c059076ec341861c734ce2efd0d8afef431a33 /server/src/server_session.cpp | |
parent | 1aaddd285d1c3ba2ba99eef006062a32c4dedafc (diff) |
missed changes
Diffstat (limited to 'server/src/server_session.cpp')
-rw-r--r-- | server/src/server_session.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/server/src/server_session.cpp b/server/src/server_session.cpp index 234f130..3b8c3b1 100644 --- a/server/src/server_session.cpp +++ b/server/src/server_session.cpp @@ -121,6 +121,65 @@ void server_session::handle_command(client_msg *msg) { switch(msg->type()) { + case CLIENT_MSG_TYPE::CLIENT_AUTH_REQUEST: + { + server_msg m; + m.set_type(SERVER_MSG_TYPE::SERVER_AUTH_REPLY); + //TODO: check for already existing auth token + std::string server_password = runtime_config.config_file.get<std::string>("server.password", ""); + if(server_password.empty()) + m.mutable_auth_reply()->set_status(true); + else + { + switch(msg->auth_info().hash_type()) + { + case PASSWD_HASH_TYPE::HASH_NONE: + { + if(msg->auth_info().password() != server_password) + { + m.mutable_auth_reply()->set_status(false); + m.mutable_auth_reply()->set_error_description("wrong password"); + } + else + m.mutable_auth_reply()->set_status(true); + } + break; + case PASSWD_HASH_TYPE::HASH_MD5: + { + //TODO: + } + break; + case PASSWD_HASH_TYPE::HASH_SHA2: + { + //TODO: + } + break; + case PASSWD_HASH_TYPE::HASH_SHA512: + { + unsigned char hash[64]; + SHA512((unsigned char*)server_password.c_str(), server_password.length(), hash); + if(msg->auth_info().password() != std::string((const char*)hash)) + { + m.mutable_auth_reply()->set_status(false); + m.mutable_auth_reply()->set_error_description("wrong password"); + } + else + m.mutable_auth_reply()->set_status(true); + } + break; + default: + break; + } + } + if(m.auth_reply().status() == true) + { + client_auth_token = generate_auth_token(); + m.mutable_auth_reply()->set_auth_token(client_auth_token); + //set auth token + } + send_message(&m); + } + break; default: break; } |