From b8bb09d9625d7f51ca94a59f4b259913333b601e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D1=80=D0=B5=D0=BF=D0=BE=D0=B4=D0=BE=D0=B1=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=90=D0=BB=D0=B5=D0=BD?= Date: Mon, 10 Oct 2022 13:29:48 +0300 Subject: [PATCH] Committing updates. --- src/app/Common.cpp | 24 +++++++++++++++++++ src/app/Common.hpp | 2 ++ src/modules/Workers/WebService/WebService.cpp | 8 +++---- src/modules/Workers/WebSocket/WebSocket.cpp | 6 ++--- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/app/Common.cpp b/src/app/Common.cpp index 7ca8409..d90fe08 100644 --- a/src/app/Common.cpp +++ b/src/app/Common.cpp @@ -456,6 +456,30 @@ namespace Apostol { } //-------------------------------------------------------------------------------------------------------------- + CString CCustomModule::GetAddress(CHTTPRequest *ARequest) { + CString Result; + + Result = ARequest->Params["address"]; + + if (Result.IsEmpty() && !ARequest->Content.IsEmpty()) { + const auto &contentType = ARequest->Headers.Values(_T("content-type")); + if (contentType.Find("application/x-www-form-urlencoded") == 0) { + const CStringList &FormData = ARequest->FormData; + Result = FormData["address"]; + } else if (contentType.Find("multipart/form-data") == 0) { + CFormData FormData; + CHTTPRequestParser::ParseFormData(ARequest, FormData); + Result = FormData.Data("address"); + } else if (contentType.Find("application/json") == 0) { + const CJSON contextJson(ARequest->Content); + Result = contextJson["address"].AsString(); + } + } + + return Result; + } + //-------------------------------------------------------------------------------------------------------------- + void CCustomModule::DoGet(CHTTPServerConnection *AConnection) { auto pRequest = AConnection->Request(); diff --git a/src/app/Common.hpp b/src/app/Common.hpp index 5cc898c..dd8fbe5 100644 --- a/src/app/Common.hpp +++ b/src/app/Common.hpp @@ -105,6 +105,8 @@ namespace Apostol { void ModuleNew(CContext &Context); void ModuleAuthorize(CContext &Context); + static CString GetAddress(CHTTPRequest *ARequest); + void DoGet(CHTTPServerConnection *AConnection) override; virtual void DoPost(CHTTPServerConnection *AConnection); diff --git a/src/modules/Workers/WebService/WebService.cpp b/src/modules/Workers/WebService/WebService.cpp index ad634ad..d034b38 100644 --- a/src/modules/Workers/WebService/WebService.cpp +++ b/src/modules/Workers/WebService/WebService.cpp @@ -223,7 +223,7 @@ namespace Apostol { const auto &caModuleAddress = m_Module["address"]; const auto &caHost = pServerRequest->Headers["host"]; const auto &caOrigin = pServerRequest->Headers["origin"]; - const auto &caUserAddress = pServerRequest->Params["address"]; + const auto &caUserAddress = GetAddress(pServerRequest); const auto &pgpValue = pServerRequest->Params["pgp"]; const auto &caServerParam = pServerRequest->Params["server"]; @@ -458,7 +458,7 @@ namespace Apostol { const auto &caHost = pServerRequest->Headers["host"]; const auto &caOrigin = pServerRequest->Headers["origin"]; - const auto &address = pServerRequest->Params["address"]; + const auto &address = GetAddress(pServerRequest); const auto &code = pServerRequest->Params["code"]; const auto &caUserAddress = address.length() == 40 ? CString() : address; @@ -478,7 +478,7 @@ namespace Apostol { CString sPayload; - if (!pServerRequest->Content.IsEmpty()) { + if (!pServerRequest->Content.IsEmpty() && Action != "status") { const auto &ContentType = pServerRequest->Headers.Values(_T("content-type")); @@ -875,7 +875,7 @@ namespace Apostol { const auto &caHost = pServerRequest->Headers["host"]; const auto &caOrigin = pServerRequest->Headers["origin"]; - const auto &address = pServerRequest->Params["address"]; + const auto &address = GetAddress(pServerRequest); const auto &code = pServerRequest->Params["code"]; const auto &caUserAddress = address.length() == 40 ? CString() : address; diff --git a/src/modules/Workers/WebSocket/WebSocket.cpp b/src/modules/Workers/WebSocket/WebSocket.cpp index dda105d..5cb055e 100644 --- a/src/modules/Workers/WebSocket/WebSocket.cpp +++ b/src/modules/Workers/WebSocket/WebSocket.cpp @@ -362,7 +362,7 @@ namespace Apostol { const auto &caModuleAddress = m_Module["address"]; const auto &caHost = pServerRequest->Headers["host"]; const auto &caOrigin = pServerRequest->Headers["origin"]; - const auto &caUserAddress = pServerRequest->Params["address"]; + const auto &caUserAddress = GetAddress(pServerRequest); const auto &pgpValue = pServerRequest->Params["pgp"]; const auto &caServerParam = pServerRequest->Params["server"]; @@ -583,7 +583,7 @@ namespace Apostol { const auto &caHost = pServerRequest->Headers["host"]; const auto &caOrigin = pServerRequest->Headers["origin"]; - const auto &address = pServerRequest->Params["address"]; + const auto &address = GetAddress(pServerRequest); const auto &code = pServerRequest->Params["code"]; const auto &caUserAddress = address.length() == 40 ? CString() : address; @@ -603,7 +603,7 @@ namespace Apostol { CString sPayload; - if (!pServerRequest->Content.IsEmpty()) { + if (!pServerRequest->Content.IsEmpty() && Action != "status") { const auto &ContentType = pServerRequest->Headers.Values(_T("content-type"));