Line data Source code
1 : #include "ServerUtils.h"
2 :
3 : #define DEFAULT_LOG_CONFG "logCnfgs/default.conf"
4 : #define DEBUG_LOG_CONFG "logCnfgs/debug.conf"
5 : #define DEFAULT_CONFG "server.conf"
6 : #define DEFAULT_PORT "8000"
7 : #define DEFAULT_LOG "default"
8 : #define DEBUG_LOG "debug"
9 : #define DEFAULT_SHARED "http://dr-tinder.herokuapp.com"
10 : #define CONFG_PORT_KEY "port"
11 : #define CONFG_SHARED_KEY "shared"
12 : #define CONFG_LOGFILE_KEY "logfile"
13 :
14 : using namespace std;
15 :
16 5 : void intToString(int number, std::string& result) {
17 5 : std::ostringstream convert;
18 5 : convert << number;
19 5 : result = convert.str();
20 5 : }
21 :
22 247 : int is_equal(const struct mg_str *s1, const std::string s2) {
23 247 : return mg_vcmp(s1, s2.c_str()) == 0;
24 : }
25 :
26 142 : bool equals(string s1,string s2){
27 142 : return s1.compare(s2) == 0;
28 : }
29 :
30 157 : bool isInteger(std::string & s)
31 : {
32 157 : if(s.empty() || ((!isdigit(s[0])) && (s[0] != '-') && (s[0] != '+'))) return false ;
33 :
34 : char * p ;
35 142 : strtol(s.c_str(), &p, 10) ;
36 :
37 142 : return (*p == 0) ;
38 : }
39 :
40 156 : bool isFloat( string myString ) {
41 156 : std::istringstream iss(myString);
42 : float f;
43 156 : iss >> noskipws >> f; // noskipws considers leading whitespace invalid
44 : // Check the entire string was consumed and if either failbit or badbit is set
45 156 : return iss.eof() && !iss.fail();
46 : }
47 :
48 96 : void setCnfgValue(JsonParser* parser, string key, string &value_to_set){
49 96 : Json::Value value;
50 96 : value = parser->getValue(key);
51 96 : if (!value.empty()) {
52 96 : value_to_set = value.asString();
53 96 : }
54 96 : }
55 :
56 32 : void readConfigFile(string &port, string &shared, string &logCnfFile){
57 32 : ifstream config(DEFAULT_CONFG);
58 32 : if (config.is_open()){
59 32 : JsonParser parser;
60 64 : string line, buff="";
61 224 : while ( getline (config,line) ){
62 160 : buff += line;
63 : }
64 32 : if (parser.parsing(buff)){
65 32 : setCnfgValue(&parser, CONFG_PORT_KEY,port);
66 32 : setCnfgValue(&parser, CONFG_SHARED_KEY,shared);
67 32 : setCnfgValue(&parser, CONFG_LOGFILE_KEY,logCnfFile);
68 : }
69 64 : config.close();
70 32 : }
71 32 : }
72 :
73 883 : void makeUsername(string &username){
74 883 : char * charsToRemove="@";
75 1766 : for (unsigned int i = 0; i < strlen(charsToRemove); ++i) {
76 : username.erase(
77 : remove(username.begin(), username.end(), charsToRemove[i]),
78 883 : username.end());
79 : }
80 :
81 883 : }
82 :
83 32 : void configure(int argc, char **argv, string &port, string &shared) {
84 64 : string _port="", _shared="", _logCnf="", logCnfFile="";
85 :
86 : //primero lee .conf
87 32 : readConfigFile(_port,_shared,logCnfFile);
88 :
89 : //sobreescribe con comandos
90 59 : for (int i = 1; i + 1 < argc; i++) {
91 27 : string flag = string(argv[i]);
92 27 : if (equals(flag,"-p") || equals(flag,"--port")) {
93 5 : _port = argv[i + 1];
94 22 : } else if (equals(flag,"-s") || equals(flag,"--shared") ) {
95 5 : _shared = argv[i + 1];
96 17 : } else if (equals(flag,"-l") || equals(flag,"--log") ) {
97 7 : _logCnf = argv[i + 1];
98 10 : }else if (equals(flag,"-lf") || equals(flag,"--logfile")){
99 0 : logCnfFile = argv[i + 1];
100 : }
101 27 : }
102 :
103 : //set defaults
104 32 : if (_logCnf.empty()){
105 25 : _logCnf = DEFAULT_LOG;
106 : }
107 :
108 32 : if ( (logCnfFile.empty()) || (_logCnf.compare(DEBUG_LOG) == 0 ) ){
109 7 : if (equals(_logCnf, DEBUG_LOG)) {
110 7 : logCnfFile = DEBUG_LOG_CONFG;
111 : } else {
112 0 : logCnfFile = DEFAULT_LOG_CONFG;
113 : }
114 : }
115 :
116 : //set logger
117 64 : el::Configurations conf(logCnfFile);
118 32 : el::Loggers::reconfigureAllLoggers(conf);
119 32 : el::Loggers::addFlag(el::LoggingFlag::ColoredTerminalOutput);
120 :
121 32 : LOGG(INFO)<< "Logger took cnfg from: " << logCnfFile;
122 :
123 32 : if (_port.empty() || ! isInteger(_port)){
124 0 : _port = DEFAULT_PORT;
125 0 : LOGG(INFO) << "Port set to default";
126 : }else{
127 32 : LOGG(INFO) << "Server port set to: " << _port;
128 : }
129 :
130 32 : if (_shared.empty()){
131 0 : _shared = DEFAULT_SHARED;
132 0 : LOGG(INFO) << "Shared server set to defualt";
133 : }else{
134 32 : LOGG(INFO) << "Shared server link to: " << _shared;
135 : }
136 :
137 32 : port = _port;
138 64 : shared = _shared;
139 :
140 98 : }
|