From 94cee80cc691a63ee341092ad05e30e0b157b976 Mon Sep 17 00:00:00 2001 From: dijunkun Date: Mon, 8 Sep 2025 18:53:14 +0800 Subject: [PATCH] [feat] use argv to set certs dir --- .github/workflows/deploy.yml | 8 ++++++++ src/main.cpp | 12 +++++++++--- src/signal_server.cpp | 14 +++++++++++--- src/signal_server.h | 3 ++- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 8147966..20e07e9 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -15,6 +15,14 @@ jobs: - name: Checkout code uses: actions/checkout@v4 + - name: Cache xmake dependencies + uses: actions/cache@v4 + with: + path: ~/.xmake/packages + key: ${{ runner.os }}-xmake-deps-linux-${{ hashFiles('**/xmake.lua') }} + restore-keys: | + ${{ runner.os }}-xmake-deps-linux- + - name: Install dependencies run: | sudo apt update diff --git a/src/main.cpp b/src/main.cpp index cbf9018..e709517 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,20 +13,26 @@ #include "signal_server.h" int main(int argc, char* argv[]) { - SignalServer s; std::string port = "9090"; std::string log_dir = "./logs"; + std::string certs_dir = "./cert"; if (argc > 1) { port = argv[1]; } if (argc > 2) { - log_dir = argv[2]; + certs_dir = argv[2]; + } + + if (argc > 3) { + log_dir = argv[3]; } InitLogger(log_dir); - s.Run(std::stoi(port)); + + SignalServer s; + s.Run(std::stoi(port), certs_dir); return 0; } diff --git a/src/signal_server.cpp b/src/signal_server.cpp index 4406ddc..2e86e87 100644 --- a/src/signal_server.cpp +++ b/src/signal_server.cpp @@ -73,8 +73,10 @@ context_ptr SignalServer::OnTlsInit(websocketpp::connection_hdl hdl) { asio::ssl::context::default_workarounds | asio::ssl::context::no_sslv2 | asio::ssl::context::no_sslv3 | asio::ssl::context::single_dh_use); - ctx->use_certificate_chain_file("cert/crossdesk.cn_bundle.crt"); - ctx->use_private_key_file("cert/crossdesk.cn.key", asio::ssl::context::pem); + std::string cert_file = certs_dir_ + "/crossdesk.cn.crt"; + std::string key_file = certs_dir_ + "/crossdesk.cn.key"; + ctx->use_certificate_chain_file(cert_file); + ctx->use_private_key_file(key_file, asio::ssl::context::pem); SSL_CTX_set_cipher_list(ctx->native_handle(), "ECDHE-ECDSA-AES256-GCM-SHA384:" @@ -96,7 +98,13 @@ bool SignalServer::OnPong(websocketpp::connection_hdl hdl, std::string s) { return true; } -void SignalServer::Run(uint16_t port) { +void SignalServer::Run(uint16_t port, std::string certs_dir) { + certs_dir_ = certs_dir; + if (!std::filesystem::exists(certs_dir_)) { + LOG_ERROR("Certs dir [{}] not exist", certs_dir_); + return; + } + server_.set_reuse_addr(true); LOG_INFO("Signal server runs on port [{}]", port); diff --git a/src/signal_server.h b/src/signal_server.h index 6ef971d..60ec5eb 100644 --- a/src/signal_server.h +++ b/src/signal_server.h @@ -35,12 +35,13 @@ class SignalServer { bool OnPing(websocketpp::connection_hdl hdl, std::string s); bool OnPong(websocketpp::connection_hdl hdl, std::string s); - void Run(uint16_t port); + void Run(uint16_t port, std::string certs_dir); void SendMsg(websocketpp::connection_hdl hdl, json message); void OnMessage(websocketpp::connection_hdl hdl, server::message_ptr msg); private: server server_; + std::string certs_dir_; std::map> ws_connections_;