blob: b83661843ac59321529751767f7b3658c0972098 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef TOPAZ_AUTH_PROVIDERS_OAUTH_OAUTH_REQUEST_BUILDER_H_
#define TOPAZ_AUTH_PROVIDERS_OAUTH_OAUTH_REQUEST_BUILDER_H_
#include <fuchsia/net/oldhttp/cpp/fidl.h>
namespace auth_providers {
namespace oauth {
// Request builder for an OAuth Https Request. This builder converts the
// oauth endpoint request to an URI in the format as described by the OAuth
// protocol specification:
// - https://tools.ietf.org/html/rfc6749
class OAuthRequestBuilder {
public:
OAuthRequestBuilder(const std::string& url, const std::string& method);
~OAuthRequestBuilder();
// Sets the bearer token in the http authorization header field.
OAuthRequestBuilder& SetAuthorizationHeader(const std::string& token);
// Sets the HTTP request body to the url encoded format of |body|. This
// method also adds the relevant http request headers for content-type and
// content-length fields for posting "application/x-www-form-urlencoded" MIME
// datatypes.
OAuthRequestBuilder& SetUrlEncodedBody(const std::string& body);
// Sets the HTTP request body to the json encoded string |body|. This method
// also adds the relevant http headers for accept, content-type and
// content-length fields for posting JSON data.
OAuthRequestBuilder& SetJsonBody(const std::string& body);
// Url encodes the query params which are appended to the url string while
// building the request.
OAuthRequestBuilder& SetQueryParams(
std::map<std::string, std::string> query_params);
// Returns an HTTP |URLRequest| handle for the OAuth endpoint.
::fuchsia::net::oldhttp::URLRequest Build() const;
private:
// Sets the HTTP request body field to |body|.
OAuthRequestBuilder& SetRequestBody(const std::string& body);
const std::string url_;
const std::string method_;
std::string query_string_;
std::string request_body_;
std::map<std::string, std::string> http_headers_;
};
} // namespace oauth
} // namespace auth_providers
#endif // TOPAZ_AUTH_PROVIDERS_OAUTH_OAUTH_REQUEST_BUILDER_H_