diff --git a/frameworks/js/napi/http/async_context/include/request_context.h b/frameworks/js/napi/http/async_context/include/request_context.h index dc7a92c9e701d7888bf5fe6c501537325c5c73af..99621998d7fad724bfbc3cf4a34acfde0b86132a 100644 --- a/frameworks/js/napi/http/async_context/include/request_context.h +++ b/frameworks/js/napi/http/async_context/include/request_context.h @@ -199,6 +199,8 @@ private: void ParseCaPath(napi_value optionsValue); + void ParseCaData(napi_value optionsValue); + void ParseDnsServers(napi_value optionsValue); void ParseMultiFormData(napi_value optionsValue); diff --git a/frameworks/js/napi/http/async_context/src/request_context.cpp b/frameworks/js/napi/http/async_context/src/request_context.cpp index 38b5224bf82c15757e36392120b6064a0cbf876a..22f3d8dca220df8dd30ebb192f358e10c6d4b6a5 100755 --- a/frameworks/js/napi/http/async_context/src/request_context.cpp +++ b/frameworks/js/napi/http/async_context/src/request_context.cpp @@ -499,6 +499,14 @@ void RequestContext::ParseCaPath(napi_value optionsValue) } } +void RequestContext::ParseCaData(napi_value optionsValue) +{ + std::string caData = NapiUtils::GetStringPropertyUtf8(GetEnv(), optionsValue, HttpConstant::PARAM_KEY_CA_DATA); + if (!caData.empty()) { + options.SetCaData(caData); + } +} + void RequestContext::ParseDohUrl(napi_value optionsValue) { std::string dohUrl = NapiUtils::GetStringPropertyUtf8(GetEnv(), optionsValue, HttpConstant::PARAM_KEY_DOH_URL); @@ -537,6 +545,7 @@ void RequestContext::UrlAndOptions(napi_value urlValue, napi_value optionsValue) ParseHeader(optionsValue); ParseCaPath(optionsValue); + ParseCaData(optionsValue); ParseDohUrl(optionsValue); ParseResumeFromToNumber(optionsValue); ParseDnsServers(optionsValue); diff --git a/frameworks/js/napi/http/constant/include/constant.h b/frameworks/js/napi/http/constant/include/constant.h index 9b44ccdbe229c7476ccf9bb6fca1aa324c8f9fc2..5fa1da25b73646c9bafb8d5a3941365c6e9fe21b 100644 --- a/frameworks/js/napi/http/constant/include/constant.h +++ b/frameworks/js/napi/http/constant/include/constant.h @@ -151,6 +151,7 @@ public: static const char *const PARAM_KEY_EXPECT_DATA_TYPE; static const char *const PARAM_KEY_PRIORITY; static const char *const PARAM_KEY_CA_PATH; + static const char *const PARAM_KEY_CA_DATA; static const char *const PARAM_KEY_DOH_URL; static const char *const PARAM_KEY_USING_HTTP_PROXY; diff --git a/frameworks/js/napi/http/constant/src/constant.cpp b/frameworks/js/napi/http/constant/src/constant.cpp index 5c855002ed01833e228045ce292223329accf1b9..b094bace8ebb08917bb50bee2eaeff5855dcf7ea 100644 --- a/frameworks/js/napi/http/constant/src/constant.cpp +++ b/frameworks/js/napi/http/constant/src/constant.cpp @@ -48,6 +48,7 @@ const char *const HttpConstant::PARAM_KEY_PRIORITY = "priority"; const char *const HttpConstant::PARAM_KEY_USING_HTTP_PROXY = "usingProxy"; const char *const HttpConstant::PARAM_KEY_CA_PATH = "caPath"; +const char *const HttpConstant::PARAM_KEY_CA_DATA = "caData"; const char *const HttpConstant::PARAM_KEY_DOH_URL = "dnsOverHttps"; const char *const HttpConstant::PARAM_KEY_CLIENT_CERT = "clientCert"; const char *const HttpConstant::PARAM_KEY_MULTI_FORM_DATA_LIST = "multiFormDataList"; diff --git a/frameworks/js/napi/http/options/include/http_request_options.h b/frameworks/js/napi/http/options/include/http_request_options.h index 586409e2a4e982ae124dd79d132c84e856964ad3..77942a843531fab5d338eaa5f251cc44e93ffe0f 100644 --- a/frameworks/js/napi/http/options/include/http_request_options.h +++ b/frameworks/js/napi/http/options/include/http_request_options.h @@ -110,6 +110,8 @@ public: void SetCaPath(const std::string &SetCaPath); + void SetCaData(const std::string &SetCaData); + void SetDnsServers(const std::vector &dnsServers); void SetDohUrl(const std::string &SetDohUrl); @@ -162,6 +164,8 @@ public: [[nodiscard]] const std::string &GetCaPath() const; + [[nodiscard]] const std::string &GetCaData() const; + [[nodiscard]] const std::string &GetDohUrl() const; [[nodiscard]] std::string GetRangeString() const; @@ -214,6 +218,8 @@ private: std::string caPath_; + std::string caData_; + std::string dohUrl_; std::vector dnsServers_; diff --git a/frameworks/js/napi/http/options/src/http_request_options.cpp b/frameworks/js/napi/http/options/src/http_request_options.cpp index e323f7ce025281534a557dcb4d8a2a987ab26a50..55967ff3392a01172a716c1728406bfb270d81c5 100644 --- a/frameworks/js/napi/http/options/src/http_request_options.cpp +++ b/frameworks/js/napi/http/options/src/http_request_options.cpp @@ -247,6 +247,20 @@ const std::string &HttpRequestOptions::GetCaPath() const return caPath_; } +void HttpRequestOptions::SetCaData(const std::string &data) +{ + if (data.empty()) { + return; + } + + caData_ = data; +} + +const std::string &HttpRequestOptions::GetCaData() const +{ + return caData_; +} + void HttpRequestOptions::SetTlsOption(const TlsOption &tlsOption) { tlsOption_.tlsVersionMax = tlsOption.tlsVersionMax; diff --git a/test/fuzztest/http_fuzzer/http_fuzzer.cpp b/test/fuzztest/http_fuzzer/http_fuzzer.cpp index 7f5b4e6d740faad3ca1dd833472e23727dd41da3..253a7da62c6944defeb90532cf8b4daf6488ab3d 100644 --- a/test/fuzztest/http_fuzzer/http_fuzzer.cpp +++ b/test/fuzztest/http_fuzzer/http_fuzzer.cpp @@ -86,6 +86,18 @@ void SetCaPathFuzzTest(const uint8_t *data, size_t size) requestOptions.SetCaPath(str); } +void SetCaDataFuzzTest(const uint8_t *data, size_t size) +{ + if ((data == nullptr) || (size < 1)) { + return; + } + SetGlobalFuzzData(data, size); + std::string str = GetStringFromData(STR_LEN); + + HttpRequestOptions requestOptions; + requestOptions.SetCaData(str); +} + void SetUrlFuzzTest(const uint8_t *data, size_t size) { if ((data == nullptr) || (size < 1)) { diff --git a/test/unittest/http/HttpRequestOptionsTest.cpp b/test/unittest/http/HttpRequestOptionsTest.cpp index 50f4074eda47dab7e3398cd786aa6b5538a067e6..1d993fae0a2c19941c4d167b460bb01350b3d23f 100644 --- a/test/unittest/http/HttpRequestOptionsTest.cpp +++ b/test/unittest/http/HttpRequestOptionsTest.cpp @@ -68,6 +68,23 @@ HWTEST_F(HttpRequestOptionsTest, CaPathTest003, TestSize.Level1) EXPECT_EQ(path, OTHER_CA_PATH); } +HWTEST_F(HttpRequestOptionsTest, CaDataTest001, TestSize.Level1) +{ + HttpRequestOptions requestOptions; + + string data = requestOptions.GetCaData(); + EXPECT_EQ(data, ""); +} + +HWTEST_F(HttpRequestOptionsTest, CaDataTest002, TestSize.Level1) +{ + HttpRequestOptions requestOptions; + + requestOptions.SetCaData("abc"); + string data = requestOptions.GetCaData(); + EXPECT_EQ(data, "abc"); +} + HWTEST_F(HttpRequestOptionsTest, SetDnsServersTest, TestSize.Level1) { HttpRequestOptions requestOptions;