Prepend protocol if there isn't on url argument 39/54239/2 accepted/tizen/mobile/20151215.055039 accepted/tizen/tv/20151215.055058 accepted/tizen/wearable/20151215.055116 submit/tizen/20151215.032306
authorKyungwook Tak <k.tak@samsung.com>
Mon, 14 Dec 2015 09:06:02 +0000 (18:06 +0900)
committerkyungwook tak <k.tak@samsung.com>
Mon, 14 Dec 2015 09:09:45 +0000 (01:09 -0800)
 * parser from chromium-efl cannot detect port appendix
   if there isn't protocol info on the head of url.
   (e.g., "www.review.tizen.org:9418")
 * To parse hostname by parser without touching parser,
   prepend protocol info to url if there isn't.
   default prepended protocol is "https"
   ("www.review.tizen.org:9418" -> "https://www.review.tizen.org:9418")

Change-Id: I6e470f5a2397a34390200b00ab198800473d46df
Signed-off-by: Kyungwook Tak <k.tak@samsung.com>
src/common/src/tpkp_common.cpp

index 5c0d9ac..2a3a485 100644 (file)
@@ -57,6 +57,17 @@ inline std::string _toLower(const std::string &host)
        return lowerHost;
 }
 
+std::string prependHttps(const std::string &url)
+{
+       const std::string separator = "://";
+       auto pos = url.find(separator);
+
+       if (pos != std::string::npos)
+               return url;
+
+       return std::string("https") + separator + url;
+}
+
 } // anonymous namespace
 
 namespace TPKP {
@@ -112,7 +123,6 @@ public:
        bool hasPins(void);
 
 private:
-       std::string m_url;
        std::string m_host;
        net::PreloadResult m_preloaded;
        HashValueVector m_hashes;
@@ -129,14 +139,16 @@ private:
        };
 };
 
-Context::Impl::Impl(const std::string &url) : m_url(url)
+Context::Impl::Impl(const std::string &url)
 {
        url::Parsed parsed;
-       url::ParseStandardURL(m_url.c_str(), m_url.length(), &parsed);
+       auto newUrl = prependHttps(url);
+
+       url::ParseStandardURL(newUrl.c_str(), newUrl.length(), &parsed);
        TPKP_CHECK_THROW_EXCEPTION(parsed.host.is_valid(),
-               TPKP_E_INVALID_URL, "Failed to parse url: " << url);
+               TPKP_E_INVALID_URL, "Failed to parse url: " << newUrl);
 
-       m_host = _toLower(m_url.substr(
+       m_host = _toLower(newUrl.substr(
                        static_cast<size_t>(parsed.host.begin),
                        static_cast<size_t>(parsed.host.len)));