| // Copyright 2014 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef LIBBRILLO_BRILLO_URL_UTILS_H_ | |
| #define LIBBRILLO_BRILLO_URL_UTILS_H_ | |
| #include <string> | |
| #include <vector> | |
| #include <brillo/brillo_export.h> | |
| #include <brillo/data_encoding.h> | |
| namespace brillo { | |
| namespace url { | |
| // Appends a subpath to url and delimiting then with '/' if the path doesn't | |
| // end with it already. Also handles URLs with query parameters/fragment. | |
| [[nodiscard]] BRILLO_EXPORT std::string Combine(const std::string& url, | |
| const std::string& subpath); | |
| [[nodiscard]] BRILLO_EXPORT std::string CombineMultiple( | |
| const std::string& url, const std::vector<std::string>& parts); | |
| // Removes the query string/fragment from |url| and returns the query string. | |
| // This method actually modifies |url|. So, if you call it on this: | |
| // http://www.test.org/?foo=bar | |
| // it will modify |url| to "http://www.test.org/" and return "?foo=bar" | |
| BRILLO_EXPORT std::string TrimOffQueryString(std::string* url); | |
| // Returns the query string, if available. | |
| // For example, for the following URL: | |
| // http://server.com/path/to/object?k=v&foo=bar#fragment | |
| // Here: | |
| // http://server.com/path/to/object - is the URL of the object, | |
| // ?k=v&foo=bar - URL query string | |
| // #fragment - URL fragment string | |
| // If |remove_fragment| is true, the function returns the query string without | |
| // the fragment. Otherwise the fragment is included as part of the result. | |
| BRILLO_EXPORT std::string GetQueryString(const std::string& url, | |
| bool remove_fragment); | |
| // Parses the query string into a set of key-value pairs. | |
| BRILLO_EXPORT data_encoding::WebParamList GetQueryStringParameters( | |
| const std::string& url); | |
| // Returns a value of the specified query parameter, or empty string if missing. | |
| BRILLO_EXPORT std::string GetQueryStringValue(const std::string& url, | |
| const std::string& name); | |
| BRILLO_EXPORT std::string GetQueryStringValue( | |
| const data_encoding::WebParamList& params, const std::string& name); | |
| // Removes the query string and/or a fragment part from URL. | |
| // If |remove_fragment| is specified, the fragment is also removed. | |
| // For example: | |
| // http://server.com/path/to/object?k=v&foo=bar#fragment | |
| // true -> http://server.com/path/to/object | |
| // false -> http://server.com/path/to/object#fragment | |
| [[nodiscard]] BRILLO_EXPORT std::string RemoveQueryString( | |
| const std::string& url, bool remove_fragment); | |
| // Appends a single query parameter to the URL. | |
| [[nodiscard]] BRILLO_EXPORT std::string AppendQueryParam( | |
| const std::string& url, const std::string& name, const std::string& value); | |
| // Appends a list of query parameters to the URL. | |
| [[nodiscard]] BRILLO_EXPORT std::string AppendQueryParams( | |
| const std::string& url, const data_encoding::WebParamList& params); | |
| // Checks if the URL has query parameters. | |
| BRILLO_EXPORT bool HasQueryString(const std::string& url); | |
| } // namespace url | |
| } // namespace brillo | |
| #endif // LIBBRILLO_BRILLO_URL_UTILS_H_ |