first commit, base server

This commit is contained in:
Guillermo Roche 2020-05-08 12:43:46 +02:00
commit e5078b4969
23 changed files with 955 additions and 0 deletions

29
ServidorTFG.pro Normal file
View File

@ -0,0 +1,29 @@
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
LIBS += -lcrypto -lssl -pthread -lcppunit -lmysqlcppconn
SOURCES += \
main.cpp \
conexion.cpp \
conexion_ssl.cpp \
thread_selector.cpp \
config_reader.cpp \
tests.cpp \
data_acces.cpp \
msql_acces.cpp \
session_manager.cpp \
session_manager_ssl.cpp \
config_package.cpp
HEADERS += \
conexion.h \
conexion_ssl.h \
thread_selector.h \
config_reader.h \
tests.h \
data_acces.h \
msql_acces.h \
session_manager.h \
session_manager_ssl.h \
config_package.h

292
ServidorTFG.pro.user Normal file
View File

@ -0,0 +1,292 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.8.2, 2020-05-07T01:43:45. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{6372de0b-6c3f-4b3a-9367-dde6c2574520}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{dd182432-2a2f-4b92-8ddc-d07764586196}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/roche/Cosas/C++/build-ServidorTFG-Desktop-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/roche/Cosas/C++/build-ServidorTFG-Desktop-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/roche/Cosas/C++/build-ServidorTFG-Desktop-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy Configuration</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">ServidorTFG</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/roche/Cosas/C++/ServidorTFG/ServidorTFG.pro</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">ServidorTFG.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/roche/Cosas/C++/build-ServidorTFG-Desktop-Debug</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">20</value>
</data>
<data>
<variable>Version</variable>
<value type="int">20</value>
</data>
</qtcreator>

82
conexion.cpp Normal file
View File

@ -0,0 +1,82 @@
#include "conexion.h"
#include "session_manager.h"
#include "msql_acces.h"
#include <arpa/inet.h>
#include <thread>
#include <unistd.h>
void conexion_client(int client);
conexion::conexion(config_reader &config)
{
this->config=&config;
this->data=new msql_acces();
}
int conexion::create_socket(int port)
{
int s;
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
s = socket(AF_INET, SOCK_STREAM, 0);
if (s < 0) {
perror("Unable to create socket");
exit(EXIT_FAILURE);
}
if (bind(s, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
perror("Unable to bind");
exit(EXIT_FAILURE);
}
if (listen(s, 1) < 0) {
perror("Unable to listen");
exit(EXIT_FAILURE);
}
return s;
}
void conexion::start_server(){
int sock;
string port;
if(!this->config->get_param("port", port)){
perror("bad port in config file");
}
sock = this->create_socket(atoi(port.data()));
while(1) {
struct sockaddr_in addr;
uint len = sizeof(addr);
int client = accept(sock, (struct sockaddr*)&addr, &len);
std::thread t_client(conexion_client , client);
t_client.detach();
//cont++;
}
close(sock);
}
bool conexion::check_pass(std::string username, std::string passwd){
return passwd==this->data->get_passwd(username);
}
void conexion_client(int client){
char buf [256];
if (client < 0) {
perror("Unable to accept");
exit(EXIT_FAILURE);
}else{
session_manager* session = new session_manager(client);
while(session->validate_pass());
session->execute();
delete (session);
close(client);
}
}

18
conexion.h Normal file
View File

@ -0,0 +1,18 @@
#ifndef CONEXION_H
#define CONEXION_H
#include <string>
#include "config_reader.h"
#include "data_acces.h"
using namespace std;
class conexion
{
public:
conexion(config_reader &conf);
virtual void start_server();
bool check_pass(std::string username, std::string passwd);
protected:
data_acces* data;
int create_socket(int port);
config_reader* config;
};
#endif // CONEXION_H

133
conexion_ssl.cpp Normal file
View File

@ -0,0 +1,133 @@
#include "conexion_ssl.h"
#include "session_manager.h"
#include "session_manager_ssl.h"
#include "config_reader.h"
#include <stdio.h>
#include <cstring>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <openssl/err.h>
#include <thread>
#include <stdlib.h>
void init_openssl();
void cleanup_openssl();
SSL_CTX *create_context();
void conexion_client(SSL_CTX *ctx,int client);
conexion_ssl::conexion_ssl(config_reader &conf):conexion(conf)
{
}
void conexion_ssl::start_server(){
int sock;
string port;
if(!this->config->get_param("port", port)){
perror("bad port in config file");
}
sock = this->create_socket(atoi(port.data()));
/* Handle connections */
SSL_CTX *ctx;
init_openssl();
ctx = create_context();
this->configure_context(ctx);
//std::thread *hilos=new thread[50];
//int cont=0;
while(1) {
struct sockaddr_in addr;
uint len = sizeof(addr);
int client = accept(sock, (struct sockaddr*)&addr, &len);
std::thread t_client(conexion_client,ctx , client);
t_client.detach();
//cont++;
}
close(sock);
SSL_CTX_free(ctx);
cleanup_openssl();
}
void init_openssl()
{
SSL_load_error_strings();
OpenSSL_add_ssl_algorithms();
}
void cleanup_openssl()
{
EVP_cleanup();
}
SSL_CTX* conexion_ssl::create_context()
{
const SSL_METHOD *method;
SSL_CTX *ctx;
method = SSLv23_server_method();
ctx = SSL_CTX_new(method);
if (!ctx) {
perror("Unable to create SSL context");
ERR_print_errors_fp(stderr);
exit(EXIT_FAILURE);
}
return ctx;
}
void conexion_ssl::configure_context(SSL_CTX *ctx)
{
SSL_CTX_set_ecdh_auto(ctx, 1);
/* Set the key and cert */
string cert;
if(!this->config->get_param("cert", cert)){
perror("bad cert in config file");
}
if (SSL_CTX_use_certificate_file(ctx, cert.data(), SSL_FILETYPE_PEM) <= 0) {
ERR_print_errors_fp(stderr);
exit(EXIT_FAILURE);
}
string key;
if(!this->config->get_param("key", key)){
perror("bad key in config file");
}
if (SSL_CTX_use_PrivateKey_file(ctx, key.data(), SSL_FILETYPE_PEM) <= 0 ) {
ERR_print_errors_fp(stderr);
exit(EXIT_FAILURE);
}
}
void conexion_client(SSL_CTX *ctx,int client){
char buf [256];
if (client < 0) {
perror("Unable to accept");
exit(EXIT_FAILURE);
}else{
SSL *ssl;
ssl = SSL_new(ctx);
SSL_set_fd(ssl, client);
if (SSL_accept(ssl) <= 0) {
ERR_print_errors_fp(stderr);
}
else {
session_manager* session = new session_manager_ssl(ssl);
while(!session->validate_pass());
session->execute();
//SSL_write(ssl,std::to_string(la->execute()).data() , sizeof (int));
delete (session);
}
SSL_shutdown(ssl);
SSL_free(ssl);
close(client);
}
}

19
conexion_ssl.h Normal file
View File

@ -0,0 +1,19 @@
#ifndef CONEXION_SSL_H
#define CONEXION_SSL_H
#include "conexion.h"
#include <openssl/ssl.h>
class conexion_ssl : public conexion
{
public:
conexion_ssl(config_reader &conf);
void start_server();
private:
/*void init_openssl();
void cleanup_openssl();*/
SSL_CTX *create_context();
void configure_context(SSL_CTX *ctx);
};
#endif // CONEXION_SSL_H

19
config_package.cpp Normal file
View File

@ -0,0 +1,19 @@
#include "config_package.h"
config_package::config_package(std::string name) : name(name){
this->file = std::fstream("/etc/portage/package.use/"+name, std::ifstream::in);
for(std::string line; std::getline(this->file, line);){
this->uses+=line+"\n";
}
this->file.close();
}
void config_package::change_uses(std::string remote_uses){
if(remote_uses!=this->uses){
this->file=std::fstream("/etc/portage/package.use/"+name, std::ofstream::out);
this->file << remote_uses;
this->file.close();
}
}

17
config_package.h Normal file
View File

@ -0,0 +1,17 @@
#ifndef CONFIG_PACKAGE_H
#define CONFIG_PACKAGE_H
#include <string>
#include <fstream>
class config_package
{
public:
config_package(std::string name);
void change_uses(std::string remote_uses);
private:
std::string name;
std::string uses;
std::fstream file;
};
#endif // CONFIG_PACKAGE_H

27
config_reader.cpp Normal file
View File

@ -0,0 +1,27 @@
#include "config_reader.h"
#include <iostream>
config_reader::config_reader(std::string dir)
{
this->file.open(dir, std::ios::in);
std::string prueba;
std::getline(file, prueba);
}
bool config_reader::get_param(std::string variable, std::string &value){
this->file.clear();
this->file.seekg(0, file.beg);
std::string line;
while(std::getline(file, line)){
std::string no_coment=line.substr(0,line.find("#"));
std::size_t found=no_coment.find(variable);
if(found!=std::string::npos){
no_coment=no_coment.substr(found+variable.length(), no_coment.length());
found=no_coment.find("=");
if(found!=std::string::npos){
value=no_coment.substr(found+1, no_coment.length());
return true;
}
}
}
return false;
}

15
config_reader.h Normal file
View File

@ -0,0 +1,15 @@
#ifndef CONFIG_READER_H
#define CONFIG_READER_H
#include <string>
#include <fstream>
class config_reader
{
public:
config_reader(std::string);
bool get_param(std::string variable, std::string &value);
private:
std::ifstream file;
};
#endif // CONFIG_READER_H

6
data_acces.cpp Normal file
View File

@ -0,0 +1,6 @@
#include "data_acces.h"
data_acces::data_acces()
{
}

13
data_acces.h Normal file
View File

@ -0,0 +1,13 @@
#ifndef DATA_ACCES_H
#define DATA_ACCES_H
#include <iostream>
class data_acces
{
public:
data_acces();
virtual std::string get_passwd(std::string username) = 0;
};
#endif // DATA_ACCES_H

41
main.cpp Normal file
View File

@ -0,0 +1,41 @@
#include <iostream>
#include <cstdlib>
#include "conexion.h"
#include "conexion_ssl.h"
#include "config_reader.h"
#include "tests.h"
#define file_config "config"
CPPUNIT_TEST_SUITE_REGISTRATION( test_basic );
int main()
{
//inicio de los tests
CPPUNIT_NS::TestResult testresult;
CPPUNIT_NS::TestResultCollector collectedresults;
testresult.addListener (&collectedresults);
CPPUNIT_NS::BriefTestProgressListener progress;
testresult.addListener (&progress);
CPPUNIT_NS::TestRunner testrunner;
testrunner.addTest (CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest ());
testrunner.run(testresult);
CPPUNIT_NS::CompilerOutputter compileroutputter(&collectedresults, std::cerr);
compileroutputter.write ();
config_reader conf = config_reader(file_config);
string option;
if(conf.get_param("security",option)){
conexion *con=nullptr;
if(option=="yes"){
con = new conexion_ssl(conf);
}else if(option=="no"){
con = new conexion(conf);
}else{
perror("unknow option in security option");
}
con->start_server();
}else{
perror("no define security option");
}
return 0;
}

20
msql_acces.cpp Normal file
View File

@ -0,0 +1,20 @@
#include "msql_acces.h"
#include <iostream>
msql_acces::msql_acces()
{
driver = get_driver_instance();
con = driver->connect("tcp://127.0.0.1:3306", "root", "1234");
con->setSchema("bin_database");
}
std::string msql_acces::get_passwd(std::string username){
sql::PreparedStatement *pstmt = con->prepareStatement("select passwd from users where username=?");
pstmt->setString(1,username);
sql::ResultSet *res = pstmt->executeQuery();
std::string ret;
while(res->next())
ret = res->getString("passwd");
delete res;
return ret;
}

21
msql_acces.h Normal file
View File

@ -0,0 +1,21 @@
#ifndef MSQL_ACCES_H
#define MSQL_ACCES_H
#include "data_acces.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>
class msql_acces : public data_acces
{
public:
msql_acces();
std::string get_passwd(std::string username);
private:
sql::Connection *con;
sql::Driver *driver;
};
#endif // MSQL_ACCES_H

81
session_manager.cpp Normal file
View File

@ -0,0 +1,81 @@
#include "session_manager.h"
#include "msql_acces.h"
#include <unistd.h>
#include <sys/wait.h>
#include <iostream>
#include <cstring>
session_manager::session_manager(int fd)
{
this->fd=fd;
this->data=new msql_acces();
}
bool session_manager::validate_pass(){
char* buffer = new char[256];
this->read_data(buffer, 256);
std::string user=buffer;
this->read_data(buffer, 256);
std::string pass=buffer;
if(this->data->get_passwd(user)==pass){
this->write_data("pass");
return true;
}else{
this->write_data("fail");
return false;
}
}
void session_manager::start_dialog(){
char* buffer = new char[5];
while(true){
this->read_data(buffer,5);
if(strcmp(buffer, "exec")==0){
this->execute();
}else if(strcmp(buffer, "info")==0){
this->send_information();
}else if(strcmp(buffer,"exit")){
break;
}
}
}
int session_manager::execute(){
char* n_package = new char[256];
this->read_data(n_package, 256);
this->args=new char*[4];
this->args[0]="emerge";
this->args[1]="--ask";
this->args[2]=n_package;
this->args[3]=nullptr;
int pid = fork();
int status=-2;
if(pid==0){
if(execvp(this->args[0],this->args)==-1){
std::cout << "error inesperado" << std::endl;
}
exit(0);
}else {
waitpid(pid, &status, WCONTINUED);
if(status>0){
this->write_data("ok");
}else{
this->write_data("bad");
}
}
delete[] (n_package);
return status;
}
void session_manager::send_information(){
}
int session_manager::read_data(char* input, int size){
return read(this->fd, input, size);
}
int session_manager::write_data(std::string output){
return write(this->fd, output.data(), output.size());
}

21
session_manager.h Normal file
View File

@ -0,0 +1,21 @@
#ifndef LAUNCHER_H
#define LAUNCHER_H
#include <iostream>
#include <data_acces.h>
class session_manager
{
public:
session_manager(int fd);
void start_dialog();
int execute();
void send_information();
bool validate_pass();
private:
virtual int read_data(char* input, int size);
virtual int write_data(std::string output);
int fd;
data_acces* data;
char** args;
};
#endif // LAUNCHER_H

14
session_manager_ssl.cpp Normal file
View File

@ -0,0 +1,14 @@
#include "session_manager_ssl.h"
session_manager_ssl::session_manager_ssl(SSL* sfd):session_manager(-1)
{
this->sfd=sfd;
}
int session_manager_ssl::read_data(char* input, int size){
return SSL_read(this->sfd, input, size);
}
int session_manager_ssl::write_data(std::string output){
return SSL_write(this->sfd, output.data(), output.size());
}

16
session_manager_ssl.h Normal file
View File

@ -0,0 +1,16 @@
#ifndef SESSION_MANAGER_SSL_H
#define SESSION_MANAGER_SSL_H
#include <openssl/ssl.h>
#include "session_manager.h"
class session_manager_ssl : public session_manager
{
public:
session_manager_ssl(SSL* fd);
int read_data(char* input, int size);
int write_data(std::string output);
private:
SSL* sfd;
};
#endif // SESSION_MANAGER_SSL_H

22
tests.cpp Normal file
View File

@ -0,0 +1,22 @@
#include "tests.h"
void test_basic::setUp(){
this->conf=new config_reader("config");
}
void test_basic::testInitial(){
std::string res;
CPPUNIT_ASSERT(true==this->conf->get_param("port",res));
CPPUNIT_ASSERT("4433"==res);
}
void test_basic::pass_tests(){
CPPUNIT_NS::TestResult testresult;
CPPUNIT_NS::TestResultCollector collectedresults;
testresult.addListener (&collectedresults);
CPPUNIT_NS::BriefTestProgressListener progress;
testresult.addListener (&progress);
CPPUNIT_NS::TestRunner testrunner;
testrunner.addTest (CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest ());
testrunner.run(testresult);
}

28
tests.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef TESTS_H
#define TESTS_H
#include <cppunit/TestCase.h>
#include <cppunit/TestFixture.h>
#include <cppunit/ui/text/TextTestRunner.h>
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TestRunner.h>
#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/CompilerOutputter.h>
#include <cppunit/XmlOutputter.h>
#include "config_reader.h"
using namespace CppUnit;
class test_basic : public CppUnit::TestFixture{
CPPUNIT_TEST_SUITE(test_basic);
CPPUNIT_TEST(testInitial);
CPPUNIT_TEST_SUITE_END();
public:
void setUp(void);
void pass_tests();
private:
void testInitial(void);
config_reader *conf;
};
#endif // TESTS_H

6
thread_selector.cpp Normal file
View File

@ -0,0 +1,6 @@
#include "thread_selector.h"
thread_selector::thread_selector()
{
}

15
thread_selector.h Normal file
View File

@ -0,0 +1,15 @@
#ifndef THREAD_SELECTOR_H
#define THREAD_SELECTOR_H
#include <queue>
#include <thread>
class thread_selector
{
public:
thread_selector();
private:
std::queue<int> t_pos;
std::thread* list;
};
#endif // THREAD_SELECTOR_H