6060// Global var to signal drogon to shutdown
6161volatile bool shutdown_signal;
6262
63- void RunServer (std::optional<std::string> host, std::optional<int > port,
64- bool ignore_cout) {
63+ struct ServerParams {
64+ std::optional<std::string> server_host;
65+ std::optional<int > server_port;
66+ std::optional<std::string> api_keys;
67+ std::optional<std::string> cors;
68+ std::optional<std::string> allowed_origins;
69+ };
70+
71+ void SetupServer (const ServerParams& params) {
72+ auto config = file_manager_utils::GetCortexConfig ();
73+
74+ if (params.server_host && *(params.server_host ) != config.apiServerHost ) {
75+ config.apiServerHost = *(params.server_host );
76+ }
77+
78+ if (params.server_port &&
79+ *(params.server_port ) != std::stoi (config.apiServerPort )) {
80+ config.apiServerPort = std::to_string (*(params.server_port ));
81+ }
82+
83+ if (params.api_keys ) {
84+ config.apiKeys = string_utils::SplitBy (*(params.api_keys ), " ," );
85+ }
86+
87+ if (params.cors ) {
88+ config.enableCors = *(params.cors ) == " ON" ;
89+ }
90+
91+ if (params.allowed_origins ) {
92+ config.allowedOrigins =
93+ string_utils::SplitBy (*(params.allowed_origins ), " ," );
94+ }
95+
96+ auto result = file_manager_utils::UpdateCortexConfig (config);
97+ if (result.has_error ()) {
98+ CTL_ERR (result.error ());
99+ }
100+ }
101+
102+ void RunServer (bool ignore_cout) {
65103#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
66104 auto signal_handler = +[](int sig) -> void {
67105 std::cout << " \r Caught interrupt signal:" << sig << " , shutting down\n " ;
@@ -81,23 +119,6 @@ void RunServer(std::optional<std::string> host, std::optional<int> port,
81119 reinterpret_cast <PHANDLER_ROUTINE>(console_ctrl_handler), TRUE );
82120#endif
83121 auto config = file_manager_utils::GetCortexConfig ();
84- if (host.has_value () || port.has_value ()) {
85- if (host.has_value () && *host != config.apiServerHost ) {
86- config.apiServerHost = *host;
87- }
88-
89- if (port.has_value () && *port != std::stoi (config.apiServerPort )) {
90- config.apiServerPort = std::to_string (*port);
91- }
92-
93- auto config_path = file_manager_utils::GetConfigurationPath ();
94- auto result =
95- config_yaml_utils::CortexConfigMgr::GetInstance ().DumpYamlConfig (
96- config, config_path.string ());
97- if (result.has_error ()) {
98- CTL_ERR (" Error update " << config_path.string () << result.error ());
99- }
100- }
101122
102123 if (!ignore_cout) {
103124 std::cout << " Host: " << config.apiServerHost
@@ -434,7 +455,8 @@ void print_help() {
434455 " ~/cortexcpp)\n " ;
435456 std::cout << " --host Host name (default: 127.0.0.1)\n " ;
436457 std::cout << " --port Port number (default: 39281)\n " ;
437- std::cout << " --api_configs Keys to acess API endpoints\n " ;
458+ std::cout << " --api_keys Keys to acess API endpoints\n " ;
459+ std::cout << " --cors Enable CORS (ON|OFF)\n " ;
438460 std::cout << " --ignore_cout Ignore cout output\n " ;
439461 std::cout << " --loglevel Set log level\n " ;
440462
@@ -461,9 +483,7 @@ int main(int argc, char* argv[]) {
461483 // avoid printing logs to terminal
462484 is_server = true ;
463485
464- std::optional<std::string> server_host;
465- std::optional<int > server_port;
466- std::optional<std::string> api_keys;
486+ ServerParams params;
467487 bool ignore_cout_log = false ;
468488#if defined(_WIN32)
469489 for (int i = 0 ; i < argc; i++) {
@@ -477,11 +497,19 @@ int main(int argc, char* argv[]) {
477497 file_manager_utils::cortex_data_folder_path =
478498 cortex::wc::WstringToUtf8 (v);
479499 } else if (command == L" --host" ) {
480- server_host = cortex::wc::WstringToUtf8 (argv[i + 1 ]);
500+ params. server_host = cortex::wc::WstringToUtf8 (argv[i + 1 ]);
481501 } else if (command == L" --port" ) {
482- server_port = std::stoi (argv[i + 1 ]);
502+ params. server_port = std::stoi (argv[i + 1 ]);
483503 } else if (command == L" --api_keys" ) {
484- api_keys = cortex::wc::WstringToUtf8 (argv[i + 1 ]);
504+ params.api_keys = cortex::wc::WstringToUtf8 (argv[i + 1 ]);
505+ } else if (command == L" --cors" ) {
506+ params.cors = cortex::wc::WstringToUtf8 (argv[i + 1 ]);
507+ if (*(params.cors ) != " ON" && *(params.cors ) != " OFF" ) {
508+ print_help ();
509+ return 0 ;
510+ }
511+ } else if (command == L" --allowed_origins" ) {
512+ params.allowed_origins = cortex::wc::WstringToUtf8 (argv[i + 1 ]);
485513 } else if (command == L" --ignore_cout" ) {
486514 ignore_cout_log = true ;
487515 } else if (command == L" --loglevel" ) {
@@ -499,11 +527,19 @@ int main(int argc, char* argv[]) {
499527 } else if (strcmp (argv[i], " --data_folder_path" ) == 0 ) {
500528 file_manager_utils::cortex_data_folder_path = argv[i + 1 ];
501529 } else if (strcmp (argv[i], " --host" ) == 0 ) {
502- server_host = argv[i + 1 ];
530+ params. server_host = argv[i + 1 ];
503531 } else if (strcmp (argv[i], " --port" ) == 0 ) {
504- server_port = std::stoi (argv[i + 1 ]);
532+ params. server_port = std::stoi (argv[i + 1 ]);
505533 } else if (strcmp (argv[i], " --api_keys" ) == 0 ) {
506- api_keys = argv[i + 1 ];
534+ params.api_keys = argv[i + 1 ];
535+ } else if (strcmp (argv[i], " --cors" ) == 0 ) {
536+ params.cors = argv[i + 1 ];
537+ if (*(params.cors ) != " ON" && *(params.cors ) != " OFF" ) {
538+ print_help ();
539+ return 0 ;
540+ }
541+ } else if (strcmp (argv[i], " --allowed_origins" ) == 0 ) {
542+ params.allowed_origins = argv[i + 1 ];
507543 } else if (strcmp (argv[i], " --ignore_cout" ) == 0 ) {
508544 ignore_cout_log = true ;
509545 } else if (strcmp (argv[i], " --loglevel" ) == 0 ) {
@@ -539,14 +575,7 @@ int main(int argc, char* argv[]) {
539575 }
540576 }
541577
542- if (api_keys) {
543- auto config = file_manager_utils::GetCortexConfig ();
544- config.apiKeys = string_utils::SplitBy (*api_keys, " ," );
545- auto result = file_manager_utils::UpdateCortexConfig (config);
546- if (result.has_error ()) {
547- CTL_ERR (result.error ());
548- }
549- }
578+ SetupServer (params);
550579
551580 // check if migration is needed
552581 if (auto res = cortex::migr::MigrationManager (
@@ -568,6 +597,6 @@ int main(int argc, char* argv[]) {
568597 }
569598 }
570599
571- RunServer (server_host, server_port, ignore_cout_log);
600+ RunServer (ignore_cout_log);
572601 return 0 ;
573602}
0 commit comments