summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/docs/udm.conf.sample1
-rw-r--r--server/include/server_session.h1
-rw-r--r--server/include/utilities.h2
-rw-r--r--server/src/main.cpp5
-rw-r--r--server/src/server_session.cpp59
-rw-r--r--server/src/utilities.cpp22
-rw-r--r--server/udm-server.cbp3
7 files changed, 92 insertions, 1 deletions
diff --git a/server/docs/udm.conf.sample b/server/docs/udm.conf.sample
index 0739aa5..47a5642 100644
--- a/server/docs/udm.conf.sample
+++ b/server/docs/udm.conf.sample
@@ -3,6 +3,7 @@
server ;section for core server settings
{
;port 6613; server port
+ ;password "client_passwod"; client password to connect
;default_download_directory ~/udm_downloads ; default directory to store downloads
;default_metadata_module flat_files_metadata ; first loaded metadata module used by default if not set
;default_data_storage_module <not set> ; first loaded data_storage module used by default if not set
diff --git a/server/include/server_session.h b/server/include/server_session.h
index 330e0a9..b3b6f26 100644
--- a/server/include/server_session.h
+++ b/server/include/server_session.h
@@ -49,6 +49,7 @@ class server_session
socket_wraper *socket_;
boost::asio::io_service &io_service_;
boost::asio::ssl::context *context_;
+ std::string client_auth_token;
};
diff --git a/server/include/utilities.h b/server/include/utilities.h
index 9becc48..0130cf5 100644
--- a/server/include/utilities.h
+++ b/server/include/utilities.h
@@ -31,6 +31,8 @@ class server_msg;
std::shared_ptr<char*> pack_msg(server_msg *msg, int *size);
+std::string random_string(int length);
+std::string generate_auth_token();
diff --git a/server/src/main.cpp b/server/src/main.cpp
index 3d3d0c4..30126fa 100644
--- a/server/src/main.cpp
+++ b/server/src/main.cpp
@@ -21,6 +21,7 @@
#include <boost/filesystem.hpp>
#include <boost/asio.hpp>
#include <iostream>
+#include <map>
#include "api_module_metadata_storage.h"
#include "modules_handler.h"
@@ -28,6 +29,7 @@
#include "server.h"
#include "main.h"
#include "config.h"
+#include "client.h"
core_api *module_api = nullptr;
@@ -36,6 +38,7 @@ modules_handler *modules = nullptr;
namespace bpo = boost::program_options;
+std::map<std::string, client> clients; //auth token used for key
runtime_config_s runtime_config;
@@ -177,7 +180,7 @@ int main(int argc, char *argv[])
{
//TODO:
}
- //TODO: run in separate thread
+ //TODO: run in separate thread ?
boost::system::error_code ec;
io_service_server.run(ec);
if(ec)
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;
}
diff --git a/server/src/utilities.cpp b/server/src/utilities.cpp
index ab10e30..c8510c9 100644
--- a/server/src/utilities.cpp
+++ b/server/src/utilities.cpp
@@ -20,6 +20,10 @@
#include <boost/log/trivial.hpp>
+#include <boost/random.hpp>
+#include <boost/nondet_random.hpp>
+
+
#include "utilities.h"
#include "../../protocol/udm.pb.h"
@@ -56,3 +60,21 @@ std::shared_ptr<char*> pack_msg(server_msg *msg, int *size_)
msg->SerializeToString(&msg_buf);
return pack_data(msg_buf, size_);
}
+
+std::string random_string(int length)
+{
+ BOOST_LOG_TRIVIAL(debug)<<__FILE__<<":"<<__LINE__<<"\t"<<__func__;
+ std::string chars("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
+ std::string data;
+ boost::random_device rng;
+ boost::variate_generator<boost::random_device&, boost::uniform_int<>> gen(rng, boost::uniform_int<>(0, (int)chars.length()-1));
+ for(int i = 0; i < length; ++i)
+ data += chars[gen()];
+ return data;
+}
+
+std::string generate_auth_token()
+{
+ return random_string(64);
+}
+
diff --git a/server/udm-server.cbp b/server/udm-server.cbp
index 1d976d6..159c144 100644
--- a/server/udm-server.cbp
+++ b/server/udm-server.cbp
@@ -47,6 +47,7 @@
<Add library="pthread" />
<Add library="crypto" />
<Add library="ssl" />
+ <Add library="boost_random" />
</Linker>
<ExtraCommands>
<Add before="[ -d ../protocol ] || mkdir ../protocol" />
@@ -58,6 +59,7 @@
<Unit filename="include/api_module_base.h" />
<Unit filename="include/api_module_downloader.h" />
<Unit filename="include/api_module_metadata_storage.h" />
+ <Unit filename="include/client.h" />
<Unit filename="include/config.h" />
<Unit filename="include/main.h" />
<Unit filename="include/modules_handler.h" />
@@ -67,6 +69,7 @@
<Unit filename="include/socket_wraper.h" />
<Unit filename="include/utilities.h" />
<Unit filename="src/api_core.cpp" />
+ <Unit filename="src/client.cpp" />
<Unit filename="src/main.cpp" />
<Unit filename="src/modules_handler.cpp" />
<Unit filename="src/protocol.cpp" />