]> granicus.if.org Git - icinga2/commitdiff
Allow to disable brackets for the Url class and Format()
authorMichael Friedrich <michael.friedrich@icinga.com>
Fri, 6 Apr 2018 12:49:15 +0000 (14:49 +0200)
committerMichael Friedrich <michael.friedrich@icinga.com>
Thu, 19 Apr 2018 08:46:15 +0000 (10:46 +0200)
This commit also adds unit tests.

refs #5706

refs #6207

lib/remote/url.cpp
lib/remote/url.hpp
test/remote-url.cpp

index 16a0dbd8864af20ad48f50ce7aead2482cfa61e7..03e8d5e6af87266921d0885c6988637758b37006 100644 (file)
@@ -208,6 +208,11 @@ void Url::SetQuery(const std::map<String, std::vector<String> >& query)
        m_Query = query;
 }
 
+void Url::SetArrayFormatUseBrackets(bool useBrackets)
+{
+       m_ArrayFormatUseBrackets = useBrackets;
+}
+
 void Url::AddQueryElement(const String& name, const String& value)
 {
        auto it = m_Query.find(name);
@@ -276,8 +281,11 @@ String Url::Format(bool onlyPathAndQuery, bool printCredentials) const
                                        temp += "&";
 
                                temp += key;
-                               if (kv.second.size() > 1)
-                                       temp += "[]";
+
+                               if (m_ArrayFormatUseBrackets) {
+                                       if (kv.second.size() > 1)
+                                               temp += "[]";
+                               }
 
                                if (!s.IsEmpty())
                                        temp += "=" + Utility::EscapeString(s, ACQUERY_ENCODE, false);
index 43b169fc246c043d6f3b4b988ecf00335b9eb820..5c145ae78a2a92bc70b34822d39d32d346b98da4 100644 (file)
@@ -65,6 +65,7 @@ public:
        void SetPort(const String& port);
        void SetPath(const std::vector<String>& path);
        void SetQuery(const std::map<String, std::vector<String> >& query);
+       void SetArrayFormatUseBrackets(bool useBrackets = true);
 
        void AddQueryElement(const String& name, const String& query);
        void SetQueryElements(const String& name, const std::vector<String>& query);
@@ -78,6 +79,7 @@ private:
        String m_Port;
        std::vector<String> m_Path;
        std::map<String, std::vector<String> > m_Query;
+       bool m_ArrayFormatUseBrackets;
        String m_Fragment;
 
        bool ParseScheme(const String& scheme);
index fce18d7ed5ad4455cae8c6ad54559baaf6ed2dc2..645b858c0a6ba10315ab3de6c3135135512c9f7a 100644 (file)
@@ -96,6 +96,14 @@ BOOST_AUTO_TEST_CASE(format)
 
        url = new Url("/");
        BOOST_CHECK(url->Format(false, false) == "/");
+
+       url = new Url("https://nsclient:8443/query/check_cpu?time%5B%5D=1m&time=5m&time%5B%5D=15m");
+       url->SetArrayFormatUseBrackets(false);
+       BOOST_CHECK(url2 = new Url(url->Format(false, false)));
+
+       url = new Url("https://icinga2/query?a[]=1&a[]=2&a[]=3");
+       url->SetArrayFormatUseBrackets(true);
+       BOOST_CHECK(url2 = new Url(url->Format(false, false)));
 }
 
 BOOST_AUTO_TEST_CASE(illegal_legal_strings)