From caf1ec9381fbd9c43c0f61847475915984dfe22c Mon Sep 17 00:00:00 2001 From: stephb9959 Date: Wed, 13 Sep 2023 08:10:19 -0700 Subject: [PATCH] https://telecominfraproject.atlassian.net/browse/WIFI-7831 Signed-off-by: stephb9959 --- build | 2 +- src/AP_WS_Connection.cpp | 10 +- src/AP_WS_Process_alarm.cpp | 2 +- src/AP_WS_Process_connect.cpp | 14 +- src/AP_WS_Process_event.cpp | 5 +- src/AP_WS_Process_healthcheck.cpp | 6 +- src/AP_WS_Process_state.cpp | 5 +- src/AP_WS_Process_telemetry.cpp | 4 +- src/AP_WS_Process_wifiscan.cpp | 6 +- src/AP_WS_Server.cpp | 5 +- src/GWKafkaEvents.cpp | 3 +- src/RESTAPI/RESTAPI_device_commandHandler.cpp | 7 +- src/framework/EventBusManager.cpp | 6 +- src/framework/KafkaManager.cpp | 25 ++- src/framework/KafkaManager.h | 21 +-- src/framework/RESTAPI_Handler.h | 22 ++- src/framework/ow_constants.h | 1 + src/framework/utils.cpp | 153 +++++++++++++++++- src/framework/utils.h | 13 ++ src/rttys/RTTYS_server.cpp | 3 - src/storage/storage_device.cpp | 4 +- 21 files changed, 237 insertions(+), 80 deletions(-) diff --git a/build b/build index 25bf17fc5..dec2bf5d6 100644 --- a/build +++ b/build @@ -1 +1 @@ -18 \ No newline at end of file +19 \ No newline at end of file diff --git a/src/AP_WS_Connection.cpp b/src/AP_WS_Connection.cpp index 0de38b201..97c590fd4 100644 --- a/src/AP_WS_Connection.cpp +++ b/src/AP_WS_Connection.cpp @@ -231,10 +231,7 @@ namespace OpenWifi { Details.set(uCentralProtocol::TIMESTAMP, Utils::Now()); Details.set(uCentralProtocol::UUID,uuid); Disconnect.set(uCentralProtocol::DISCONNECTION, Details); - Poco::JSON::Stringifier Stringify; - std::ostringstream OS; - Stringify.condense(Disconnect, OS); - KafkaManager()->PostMessage(KafkaTopics::CONNECTION, SerialNumber, std::make_shared(OS.str())); + KafkaManager()->PostMessage(KafkaTopics::CONNECTION, SerialNumber, Disconnect); } catch (...) { } } @@ -725,10 +722,7 @@ namespace OpenWifi { PingDetails.set(uCentralProtocol::UUID, uuid_); PingDetails.set("locale", State_.locale); PingObject.set(uCentralProtocol::PING, PingDetails); - Poco::JSON::Stringifier Stringify; - std::ostringstream OS; - Stringify.condense(PingObject, OS); - KafkaManager()->PostMessage(KafkaTopics::CONNECTION, SerialNumber_, std::make_shared(OS.str())); + KafkaManager()->PostMessage(KafkaTopics::CONNECTION, SerialNumber_,PingObject); } return; } break; diff --git a/src/AP_WS_Process_alarm.cpp b/src/AP_WS_Process_alarm.cpp index 180696915..2609bd9d3 100644 --- a/src/AP_WS_Process_alarm.cpp +++ b/src/AP_WS_Process_alarm.cpp @@ -25,7 +25,7 @@ namespace OpenWifi { Poco::JSON::Stringifier Stringify; std::ostringstream OS; Stringify.condense(ParamsObj, OS); - KafkaManager()->PostMessage(KafkaTopics::ALERTS, SerialNumber_, std::make_shared(OS.str())); + KafkaManager()->PostMessage(KafkaTopics::ALERTS, SerialNumber_, OS.str()); } } } diff --git a/src/AP_WS_Process_connect.cpp b/src/AP_WS_Process_connect.cpp index 5d221a4a4..696c046cc 100644 --- a/src/AP_WS_Process_connect.cpp +++ b/src/AP_WS_Process_connect.cpp @@ -32,9 +32,7 @@ namespace OpenWifi { Event.set("type", "device.firmware_change"); Event.set("timestamp", Utils::Now()); Event.set("payload", EventDetails); - std::ostringstream OS; - Event.stringify(OS); - KafkaManager()->PostMessage(KafkaTopics::DEVICE_EVENT_QUEUE, SerialNumber, std::make_shared(OS.str())); + KafkaManager()->PostMessage(KafkaTopics::DEVICE_EVENT_QUEUE, SerialNumber, Event); } } @@ -51,9 +49,7 @@ namespace OpenWifi { Event.set("type", "device.not_provisioned"); Event.set("timestamp", Utils::Now()); Event.set("payload", EventDetails); - std::ostringstream OS; - Event.stringify(OS); - KafkaManager()->PostMessage(KafkaTopics::DEVICE_EVENT_QUEUE, SerialNumber, std::make_shared(OS.str())); + KafkaManager()->PostMessage(KafkaTopics::DEVICE_EVENT_QUEUE, SerialNumber, Event); } } @@ -285,15 +281,11 @@ namespace OpenWifi { GWWebSocketNotifications::DeviceConnected(Notification); if (KafkaManager()->Enabled()) { - Poco::JSON::Stringifier Stringify; - ParamsObj->set(uCentralProtocol::CONNECTIONIP, CId_); ParamsObj->set("locale", State_.locale); ParamsObj->set(uCentralProtocol::TIMESTAMP, Utils::Now()); ParamsObj->set(uCentralProtocol::UUID, uuid_); - std::ostringstream OS; - Stringify.condense(ParamsObj, OS); - KafkaManager()->PostMessage(KafkaTopics::CONNECTION, SerialNumber_, std::make_shared(OS.str())); + KafkaManager()->PostMessage(KafkaTopics::CONNECTION, SerialNumber_, *ParamsObj); } } else { poco_warning( diff --git a/src/AP_WS_Process_event.cpp b/src/AP_WS_Process_event.cpp index e077b330d..5ccd0f8da 100644 --- a/src/AP_WS_Process_event.cpp +++ b/src/AP_WS_Process_event.cpp @@ -34,11 +34,8 @@ namespace OpenWifi { FullEvent.set("type", EventType); FullEvent.set("timestamp", EventTimeStamp); FullEvent.set("payload", EventPayload); - - std::ostringstream OS; - FullEvent.stringify(OS); KafkaManager()->PostMessage(KafkaTopics::DEVICE_EVENT_QUEUE, SerialNumber_, - std::make_shared(OS.str())); + FullEvent); } } } catch (const Poco::Exception &E) { diff --git a/src/AP_WS_Process_healthcheck.cpp b/src/AP_WS_Process_healthcheck.cpp index a1784d0cc..f9a317d5c 100644 --- a/src/AP_WS_Process_healthcheck.cpp +++ b/src/AP_WS_Process_healthcheck.cpp @@ -60,11 +60,7 @@ namespace OpenWifi { SetLastHealthCheck(Check); if (KafkaManager()->Enabled()) { - Poco::JSON::Stringifier Stringify; - std::ostringstream OS; - ParamsObj->set("timestamp", Utils::Now()); - Stringify.condense(ParamsObj, OS); - KafkaManager()->PostMessage(KafkaTopics::HEALTHCHECK, SerialNumber_, std::make_shared(OS.str())); + KafkaManager()->PostMessage(KafkaTopics::HEALTHCHECK, SerialNumber_, *ParamsObj); } } else { poco_warning(Logger_, fmt::format("HEALTHCHECK({}): Missing parameter", CId_)); diff --git a/src/AP_WS_Process_state.cpp b/src/AP_WS_Process_state.cpp index 6956a8bb9..794dff30f 100644 --- a/src/AP_WS_Process_state.cpp +++ b/src/AP_WS_Process_state.cpp @@ -56,10 +56,7 @@ namespace OpenWifi { State_.Associations_5G, State_.Associations_6G); if (KafkaManager()->Enabled()) { - Poco::JSON::Stringifier Stringify; - std::ostringstream OS; - Stringify.condense(ParamsObj, OS); - KafkaManager()->PostMessage(KafkaTopics::STATE, SerialNumber_, std::make_shared(OS.str())); + KafkaManager()->PostMessage(KafkaTopics::STATE, SerialNumber_, *ParamsObj); } GWWebSocketNotifications::SingleDevice_t N; diff --git a/src/AP_WS_Process_telemetry.cpp b/src/AP_WS_Process_telemetry.cpp index 354ae3d56..d5827237a 100644 --- a/src/AP_WS_Process_telemetry.cpp +++ b/src/AP_WS_Process_telemetry.cpp @@ -27,7 +27,7 @@ namespace OpenWifi { std::ostringstream SS; Payload->stringify(SS); auto now = Utils::Now(); - auto KafkaPayload = std::make_shared(SS.str()); + auto KafkaPayload = SS.str(); if (ParamsObj->has("adhoc")) { KafkaManager()->PostMessage(KafkaTopics::DEVICE_TELEMETRY, SerialNumber_, KafkaPayload); @@ -39,7 +39,7 @@ namespace OpenWifi { // std::endl; TelemetryWebSocketPackets_++; State_.websocketPackets = TelemetryWebSocketPackets_; - TelemetryStream()->NotifyEndPoint(SerialNumberInt_, *KafkaPayload); + TelemetryStream()->NotifyEndPoint(SerialNumberInt_, KafkaPayload); } else { StopWebSocketTelemetry(CommandManager()->Next_RPC_ID()); } diff --git a/src/AP_WS_Process_wifiscan.cpp b/src/AP_WS_Process_wifiscan.cpp index 3da6431c6..d5b6afd96 100644 --- a/src/AP_WS_Process_wifiscan.cpp +++ b/src/AP_WS_Process_wifiscan.cpp @@ -21,11 +21,7 @@ namespace OpenWifi { if (ParamsObj->has(uCentralProtocol::SERIAL) && ParamsObj->has(uCentralProtocol::DATA)) { if (KafkaManager()->Enabled()) { - auto Data = ParamsObj->get(uCentralProtocol::DATA); - Poco::JSON::Stringifier Stringify; - std::ostringstream OS; - Stringify.condense(ParamsObj, OS); - KafkaManager()->PostMessage(KafkaTopics::WIFISCAN, SerialNumber_, std::make_shared(OS.str())); + KafkaManager()->PostMessage(KafkaTopics::WIFISCAN, SerialNumber_, *ParamsObj); } } } diff --git a/src/AP_WS_Server.cpp b/src/AP_WS_Server.cpp index 7f98d25bf..cf7aa48e7 100644 --- a/src/AP_WS_Server.cpp +++ b/src/AP_WS_Server.cpp @@ -233,10 +233,7 @@ namespace OpenWifi { FullEvent.set("timestamp", now); FullEvent.set("payload", KafkaNotification); - std::ostringstream OS; - FullEvent.stringify(OS); - KafkaManager()->PostMessage(KafkaTopics::DEVICE_EVENT_QUEUE, "system", - std::make_shared(OS.str())); + KafkaManager()->PostMessage(KafkaTopics::DEVICE_EVENT_QUEUE, "system", FullEvent); } void AP_WS_Server::Stop() { diff --git a/src/GWKafkaEvents.cpp b/src/GWKafkaEvents.cpp index f1b3de011..71160c17d 100644 --- a/src/GWKafkaEvents.cpp +++ b/src/GWKafkaEvents.cpp @@ -14,8 +14,7 @@ namespace OpenWifi { Event.set("payload", payload_); std::ostringstream OS; Event.stringify(OS); - auto payload = std::make_shared(OS.str()); - KafkaManager()->PostMessage(KafkaTopics::DEVICE_EVENT_QUEUE, Utils::IntToSerialNumber(serialNumber_), payload); + KafkaManager()->PostMessage(KafkaTopics::DEVICE_EVENT_QUEUE, Utils::IntToSerialNumber(serialNumber_), OS.str()); } } diff --git a/src/RESTAPI/RESTAPI_device_commandHandler.cpp b/src/RESTAPI/RESTAPI_device_commandHandler.cpp index cf93cf0b2..05c59ccb9 100644 --- a/src/RESTAPI/RESTAPI_device_commandHandler.cpp +++ b/src/RESTAPI/RESTAPI_device_commandHandler.cpp @@ -1024,7 +1024,7 @@ namespace OpenWifi { RESTAPI_RPC::WaitForCommand(CMD_RPC, APCommands::Commands::wifiscan, false, Cmd, Params, *Request, *Response, timeout, nullptr, this, Logger_); if (Cmd.ErrorCode == 0) { - KafkaManager()->PostMessage(KafkaTopics::WIFISCAN, SerialNumber_, std::make_shared(Cmd.Results)); + KafkaManager()->PostMessage(KafkaTopics::WIFISCAN, SerialNumber_, Cmd.Results); } } @@ -1069,7 +1069,7 @@ namespace OpenWifi { Logger_); if (Cmd.ErrorCode == 0) { KafkaManager()->PostMessage(KafkaTopics::DEVICE_EVENT_QUEUE, SerialNumber_, - std::make_shared(Cmd.Results)); + Cmd.Results); } return; } @@ -1126,9 +1126,6 @@ namespace OpenWifi { BadRequest(RESTAPI::Errors::MissingOrInvalidParameters); } -#define DBGLINE \ - { std::cout << __LINE__ << std::endl; } - void RESTAPI_device_commandHandler::Rtty( const std::string &CMD_UUID, uint64_t CMD_RPC, std::chrono::milliseconds timeout, [[maybe_unused]] const GWObjects::DeviceRestrictions &Restrictions) { diff --git a/src/framework/EventBusManager.cpp b/src/framework/EventBusManager.cpp index 28d80378d..ca28ad940 100644 --- a/src/framework/EventBusManager.cpp +++ b/src/framework/EventBusManager.cpp @@ -14,18 +14,18 @@ namespace OpenWifi { void EventBusManager::run() { Running_ = true; Utils::SetThreadName("fmwk:EventMgr"); - auto Msg = std::make_shared(MicroServiceMakeSystemEventMessage(KafkaTopics::ServiceEvents::EVENT_JOIN)); + auto Msg = (MicroServiceMakeSystemEventMessage(KafkaTopics::ServiceEvents::EVENT_JOIN)); KafkaManager()->PostMessage(KafkaTopics::SERVICE_EVENTS, MicroServicePrivateEndPoint(), Msg, false); while (Running_) { Poco::Thread::trySleep((unsigned long)MicroServiceDaemonBusTimer()); if (!Running_) break; - Msg = std::make_shared(MicroServiceMakeSystemEventMessage(KafkaTopics::ServiceEvents::EVENT_KEEP_ALIVE)); + Msg = (MicroServiceMakeSystemEventMessage(KafkaTopics::ServiceEvents::EVENT_KEEP_ALIVE)); KafkaManager()->PostMessage(KafkaTopics::SERVICE_EVENTS, MicroServicePrivateEndPoint(), Msg, false); } - Msg = std::make_shared(MicroServiceMakeSystemEventMessage(KafkaTopics::ServiceEvents::EVENT_LEAVE)); + Msg = (MicroServiceMakeSystemEventMessage(KafkaTopics::ServiceEvents::EVENT_LEAVE)); KafkaManager()->PostMessage(KafkaTopics::SERVICE_EVENTS, MicroServicePrivateEndPoint(), Msg, false); }; diff --git a/src/framework/KafkaManager.cpp b/src/framework/KafkaManager.cpp index 09527a594..d32833edd 100644 --- a/src/framework/KafkaManager.cpp +++ b/src/framework/KafkaManager.cpp @@ -180,7 +180,7 @@ namespace OpenWifi { Consumer.async_commit(Msg); continue; } - KafkaManager()->Dispatch(Msg.get_topic().c_str(), Msg.get_key(), std::make_shared(Msg.get_payload())); + KafkaManager()->Dispatch(Msg.get_topic().c_str(), Msg.get_key(), Msg.get_payload()); if (!AutoCommit) Consumer.async_commit(Msg); } @@ -213,7 +213,7 @@ namespace OpenWifi { } void KafkaProducer::Produce(const char *Topic, const std::string &Key, - std::shared_ptr Payload) { + const std::string &Payload) { std::lock_guard G(Mutex_); Queue_.enqueueNotification(new KafkaMessage(Topic, Key, Payload)); } @@ -276,7 +276,7 @@ namespace OpenWifi { } void KafkaDispatcher::Dispatch(const char *Topic, const std::string &Key, - const std::shared_ptr Payload) { + const std::string & Payload) { std::lock_guard G(Mutex_); auto It = Notifiers_.find(Topic); if (It != Notifiers_.end()) { @@ -333,20 +333,29 @@ namespace OpenWifi { } void KafkaManager::PostMessage(const char *topic, const std::string &key, - const std::shared_ptr PayLoad, bool WrapMessage) { + const std::string & PayLoad, bool WrapMessage) { if (KafkaEnabled_) { ProducerThr_.Produce(topic, key, WrapMessage ? WrapSystemId(PayLoad) : PayLoad); } } + void KafkaManager::PostMessage(const char *topic, const std::string &key, + const Poco::JSON::Object &Object, bool WrapMessage) { + if (KafkaEnabled_) { + std::ostringstream ObjectStr; + Object.stringify(ObjectStr); + ProducerThr_.Produce(topic, key, WrapMessage ? WrapSystemId(ObjectStr.str()) : ObjectStr.str()); + } + } + + void KafkaManager::Dispatch(const char *Topic, const std::string &Key, - const std::shared_ptr Payload) { + const std::string &Payload) { Dispatcher_.Dispatch(Topic, Key, Payload); } - [[nodiscard]] const std::shared_ptr KafkaManager::WrapSystemId(const std::shared_ptr PayLoad) { - *PayLoad = SystemInfoWrapper_ + *PayLoad + "}"; - return PayLoad; + [[nodiscard]] std::string KafkaManager::WrapSystemId(const std::string & PayLoad) { + return SystemInfoWrapper_ + PayLoad + "}"; } uint64_t KafkaManager::RegisterTopicWatcher(const std::string &Topic, diff --git a/src/framework/KafkaManager.h b/src/framework/KafkaManager.h index 3ef594010..31cf0932a 100644 --- a/src/framework/KafkaManager.h +++ b/src/framework/KafkaManager.h @@ -6,7 +6,7 @@ #include "Poco/Notification.h" #include "Poco/NotificationQueue.h" - +#include "Poco/JSON/Object.h" #include "framework/KafkaTopics.h" #include "framework/OpenWifiTypes.h" #include "framework/SubSystemServer.h" @@ -18,17 +18,17 @@ namespace OpenWifi { class KafkaMessage : public Poco::Notification { public: - KafkaMessage(const char * Topic, const std::string &Key, std::shared_ptr Payload) + KafkaMessage(const char * Topic, const std::string &Key, const std::string &Payload) : Topic_(Topic), Key_(Key), Payload_(Payload) {} inline const char * Topic() { return Topic_; } inline const std::string &Key() { return Key_; } - inline const std::string &Payload() { return *Payload_; } + inline const std::string &Payload() { return Payload_; } private: const char *Topic_; std::string Key_; - std::shared_ptr Payload_; + std::string Payload_; }; class KafkaProducer : public Poco::Runnable { @@ -36,7 +36,7 @@ namespace OpenWifi { void run() override; void Start(); void Stop(); - void Produce(const char *Topic, const std::string &Key, std::shared_ptr Payload); + void Produce(const char *Topic, const std::string &Key, const std::string & Payload); private: std::recursive_mutex Mutex_; @@ -63,7 +63,7 @@ namespace OpenWifi { void Stop(); auto RegisterTopicWatcher(const std::string &Topic, Types::TopicNotifyFunction &F); void UnregisterTopicWatcher(const std::string &Topic, int Id); - void Dispatch(const char *Topic, const std::string &Key, const std::shared_ptr Payload); + void Dispatch(const char *Topic, const std::string &Key, const std::string & Payload); void run() override; void Topics(std::vector &T); @@ -92,9 +92,12 @@ namespace OpenWifi { void Stop() override; void PostMessage(const char *topic, const std::string &key, - std::shared_ptr PayLoad, bool WrapMessage = true); - void Dispatch(const char *Topic, const std::string &Key, std::shared_ptr Payload); - [[nodiscard]] const std::shared_ptr WrapSystemId(std::shared_ptr PayLoad); + const std::string &PayLoad, bool WrapMessage = true); + void PostMessage(const char *topic, const std::string &key, + const Poco::JSON::Object &Object, bool WrapMessage = true); + + void Dispatch(const char *Topic, const std::string &Key, const std::string &Payload); + [[nodiscard]] std::string WrapSystemId(const std::string & PayLoad); [[nodiscard]] inline bool Enabled() const { return KafkaEnabled_; } uint64_t RegisterTopicWatcher(const std::string &Topic, Types::TopicNotifyFunction &F); void UnregisterTopicWatcher(const std::string &Topic, uint64_t Id); diff --git a/src/framework/RESTAPI_Handler.h b/src/framework/RESTAPI_Handler.h index b74d6e759..d6f31be71 100644 --- a/src/framework/RESTAPI_Handler.h +++ b/src/framework/RESTAPI_Handler.h @@ -584,7 +584,27 @@ namespace OpenWifi { return ReturnRawJSON(os.str()); } - inline void ReturnRawJSON(const std::string &json_doc) { + template void ReturnObject(const std::vector &Objects) { + Poco::JSON::Array Arr; + for(const auto &Object:Objects) { + Poco::JSON::Object O; + Object.to_json(O); + Arr.add(O); + } + std::ostringstream os; + Arr.stringify(os); + return ReturnRawJSON(os.str()); + } + + template void ReturnObject(const T &Object) { + Poco::JSON::Object O; + Object.to_json(O); + std::ostringstream os; + O.stringify(os); + return ReturnRawJSON(os.str()); + } + + inline void ReturnRawJSON(const std::string &json_doc) { PrepareResponse(); if (Request != nullptr) { // can we compress ??? diff --git a/src/framework/ow_constants.h b/src/framework/ow_constants.h index c1a1bf76a..2d45a3d86 100644 --- a/src/framework/ow_constants.h +++ b/src/framework/ow_constants.h @@ -40,6 +40,7 @@ namespace OpenWifi { }; } +#define DBGLINE std::cout << __LINE__ << ":" << __FILE__ << ", " << __func__ << std::endl; namespace OpenWifi::RESTAPI::Errors { struct msg { uint64_t err_num; diff --git a/src/framework/utils.cpp b/src/framework/utils.cpp index a0f4c1114..b4486ba43 100644 --- a/src/framework/utils.cpp +++ b/src/framework/utils.cpp @@ -3,7 +3,8 @@ // #include "Poco/Path.h" - +#include "Poco/TemporaryFile.h" +#include "Poco/Crypto/ECKey.h" #include "framework/AppServiceRegistry.h" #include "framework/utils.h" @@ -608,4 +609,154 @@ namespace OpenWifi::Utils { return DT.timestamp().epochTime(); } + static std::string FileToString(const std::string &Filename) { + std::ifstream ifs(Filename.c_str(),std::ios_base::in|std::ios_base::binary); + std::ostringstream os; + Poco::StreamCopier::copyStream(ifs,os); + return os.str(); + } + + bool CreateX509CSR(const CSRCreationParameters & Parameters, CSRCreationResults & Results) { + int ret = 0; + RSA *r = nullptr; + BIGNUM *bne = nullptr; + + int nVersion = 0; + unsigned long e = RSA_F4; + + X509_REQ *x509_req = nullptr; + X509_NAME *x509_name = nullptr; + EVP_PKEY *pKey = nullptr; +// RSA *tem = nullptr; +// BIO *bio_err = nullptr; + + const char *szCountry = Parameters.Country.c_str(); + const char *szProvince = Parameters.Province.c_str(); + const char *szCity = Parameters.City.c_str(); + const char *szOrganization = Parameters.Organization.c_str(); + const char *szCommon = Parameters.CommonName.c_str(); + + Poco::TemporaryFile CsrPath, PubKey, PrivateKey; + std::string Result; + std::ifstream ifs; + std::ostringstream ss; + BIO *bp_public = nullptr, + *bp_private = nullptr, + *bp_csr = nullptr; + + // 1. generate rsa key + bne = BN_new(); + ret = BN_set_word(bne,e); + if(ret != 1){ + goto free_all; + } + + r = RSA_new(); + ret = RSA_generate_key_ex(r, Parameters.bits, bne, nullptr); + if(ret != 1){ + goto free_all; + } + + bp_public = BIO_new_file(PubKey.path().c_str(), "w+"); + ret = PEM_write_bio_RSAPublicKey(bp_public, r); + if(ret != 1) { + goto free_all; + } + + bp_private = BIO_new_file(PrivateKey.path().c_str(), "w+"); + ret = PEM_write_bio_RSAPrivateKey(bp_private, r, NULL, NULL, 0, NULL, NULL); + if(ret != 1) { + goto free_all; + } + +// 2. set version of x509 req + x509_req = X509_REQ_new(); + ret = X509_REQ_set_version(x509_req, nVersion); + if (ret != 1){ + goto free_all; + } + +// 3. set subject of x509 req + x509_name = X509_REQ_get_subject_name(x509_req); + + ret = X509_NAME_add_entry_by_txt(x509_name,"C", MBSTRING_ASC, (const unsigned char*)szCountry, -1, -1, 0); + if (ret != 1){ + goto free_all; + } + + ret = X509_NAME_add_entry_by_txt(x509_name,"ST", MBSTRING_ASC, (const unsigned char*)szProvince, -1, -1, 0); + if (ret != 1){ + goto free_all; + } + + ret = X509_NAME_add_entry_by_txt(x509_name,"L", MBSTRING_ASC, (const unsigned char*)szCity, -1, -1, 0); + if (ret != 1){ + goto free_all; + } + + ret = X509_NAME_add_entry_by_txt(x509_name,"O", MBSTRING_ASC, (const unsigned char*)szOrganization, -1, -1, 0); + if (ret != 1){ + goto free_all; + } + + ret = X509_NAME_add_entry_by_txt(x509_name,"CN", MBSTRING_ASC, (const unsigned char*)szCommon, -1, -1, 0); + if (ret != 1){ + goto free_all; + } + +// 4. set public key of x509 req + pKey = EVP_PKEY_new(); + EVP_PKEY_assign_RSA(pKey, r); + r = nullptr; // will be free rsa when EVP_PKEY_free(pKey) + + ret = X509_REQ_set_pubkey(x509_req, pKey); + if (ret != 1){ + goto free_all; + } + +// 5. set sign key of x509 req + ret = X509_REQ_sign(x509_req, pKey, EVP_sha1()); // return x509_req->signature->length + if (ret <= 0){ + goto free_all; + } + + bp_csr = BIO_new_file(CsrPath.path().c_str(),"w"); + ret = PEM_write_bio_X509_REQ(bp_csr, x509_req); + +// 6. free + free_all: + X509_REQ_free(x509_req); + BIO_free_all(bp_csr); + BIO_free_all(bp_public); + BIO_free_all(bp_private); + + EVP_PKEY_free(pKey); + BN_free(bne); + if(ret==1) { + Results.CSR = FileToString(CsrPath.path()); + Results.PrivateKey = FileToString(PrivateKey.path()); + Results.PublicKey = FileToString(PubKey.path()); + } + + return ret; + } + + bool VerifyECKey(const std::string &key) { + try { + Poco::TemporaryFile F; + + std::ofstream of(F.path().c_str(), std::ios_base::trunc | std::ios_base::out | std::ios_base::binary); + of << key; + of.close(); + + auto Key = Poco::SharedPtr( + new Poco::Crypto::ECKey("", F.path(),"")); + + return true; + } catch (const Poco::Exception &E) { + + } + return false; + } + } // namespace OpenWifi::Utils diff --git a/src/framework/utils.h b/src/framework/utils.h index 3979dca8e..9a9c939d6 100644 --- a/src/framework/utils.h +++ b/src/framework/utils.h @@ -247,4 +247,17 @@ namespace OpenWifi::Utils { return count; } + struct CSRCreationParameters { + std::string Country, Province, City, + Organization, CommonName; + int bits=2048; + }; + + struct CSRCreationResults { + std::string CSR, PublicKey, PrivateKey; + }; + + bool CreateX509CSR(const CSRCreationParameters & Parameters, CSRCreationResults & Results); + + bool VerifyECKey(const std::string &key); } // namespace OpenWifi::Utils diff --git a/src/rttys/RTTYS_server.cpp b/src/rttys/RTTYS_server.cpp index d2d9c5783..65939bd2b 100644 --- a/src/rttys/RTTYS_server.cpp +++ b/src/rttys/RTTYS_server.cpp @@ -22,9 +22,6 @@ #include -#define DBGLINE \ - { std::cout << __LINE__ << std::endl; } - namespace OpenWifi { int RTTYS_server::Start() { diff --git a/src/storage/storage_device.cpp b/src/storage/storage_device.cpp index af65091ea..106c53c25 100644 --- a/src/storage/storage_device.cpp +++ b/src/storage/storage_device.cpp @@ -590,9 +590,7 @@ namespace OpenWifi { Poco::JSON::Object Message; Message.set("command", "device_deleted"); Message.set("timestamp", Utils::Now()); - std::ostringstream StrPayload; - Message.stringify(StrPayload); - KafkaManager()->PostMessage(KafkaTopics::COMMAND, SerialNumber, std::make_shared(StrPayload.str())); + KafkaManager()->PostMessage(KafkaTopics::COMMAND, SerialNumber, Message); } return true;