Browse Source

Bearer Token auth support. Fix #484

yhirose 5 years ago
parent
commit
4f84eeb298
1 changed files with 40 additions and 0 deletions
  1. 40 0
      httplib.h

+ 40 - 0
httplib.h

@@ -789,6 +789,7 @@ public:
   void set_write_timeout(time_t sec, time_t usec = 0);
   void set_write_timeout(time_t sec, time_t usec = 0);
 
 
   void set_basic_auth(const char *username, const char *password);
   void set_basic_auth(const char *username, const char *password);
+  void set_bearer_token_auth(const char *token);
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
   void set_digest_auth(const char *username, const char *password);
   void set_digest_auth(const char *username, const char *password);
 #endif
 #endif
@@ -804,6 +805,7 @@ public:
 
 
   void set_proxy(const char *host, int port);
   void set_proxy(const char *host, int port);
   void set_proxy_basic_auth(const char *username, const char *password);
   void set_proxy_basic_auth(const char *username, const char *password);
+  void set_proxy_bearer_token_auth(const char *token);
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
   void set_proxy_digest_auth(const char *username, const char *password);
   void set_proxy_digest_auth(const char *username, const char *password);
 #endif
 #endif
@@ -849,6 +851,7 @@ protected:
 
 
   std::string basic_auth_username_;
   std::string basic_auth_username_;
   std::string basic_auth_password_;
   std::string basic_auth_password_;
+  std::string bearer_token_auth_token_;
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
   std::string digest_auth_username_;
   std::string digest_auth_username_;
   std::string digest_auth_password_;
   std::string digest_auth_password_;
@@ -870,6 +873,7 @@ protected:
 
 
   std::string proxy_basic_auth_username_;
   std::string proxy_basic_auth_username_;
   std::string proxy_basic_auth_password_;
   std::string proxy_basic_auth_password_;
+  std::string proxy_bearer_token_auth_token_;
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
   std::string proxy_digest_auth_username_;
   std::string proxy_digest_auth_username_;
   std::string proxy_digest_auth_password_;
   std::string proxy_digest_auth_password_;
@@ -887,6 +891,7 @@ protected:
     write_timeout_usec_ = rhs.write_timeout_usec_;
     write_timeout_usec_ = rhs.write_timeout_usec_;
     basic_auth_username_ = rhs.basic_auth_username_;
     basic_auth_username_ = rhs.basic_auth_username_;
     basic_auth_password_ = rhs.basic_auth_password_;
     basic_auth_password_ = rhs.basic_auth_password_;
+    bearer_token_auth_token_ = rhs.bearer_token_auth_token_;
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
     digest_auth_username_ = rhs.digest_auth_username_;
     digest_auth_username_ = rhs.digest_auth_username_;
     digest_auth_password_ = rhs.digest_auth_password_;
     digest_auth_password_ = rhs.digest_auth_password_;
@@ -902,6 +907,7 @@ protected:
     proxy_port_ = rhs.proxy_port_;
     proxy_port_ = rhs.proxy_port_;
     proxy_basic_auth_username_ = rhs.proxy_basic_auth_username_;
     proxy_basic_auth_username_ = rhs.proxy_basic_auth_username_;
     proxy_basic_auth_password_ = rhs.proxy_basic_auth_password_;
     proxy_basic_auth_password_ = rhs.proxy_basic_auth_password_;
+    proxy_bearer_token_auth_token_ = rhs.proxy_bearer_token_auth_token_;
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
     proxy_digest_auth_username_ = rhs.proxy_digest_auth_username_;
     proxy_digest_auth_username_ = rhs.proxy_digest_auth_username_;
     proxy_digest_auth_password_ = rhs.proxy_digest_auth_password_;
     proxy_digest_auth_password_ = rhs.proxy_digest_auth_password_;
@@ -1046,6 +1052,7 @@ public:
   void set_write_timeout(time_t sec, time_t usec = 0);
   void set_write_timeout(time_t sec, time_t usec = 0);
 
 
   void set_basic_auth(const char *username, const char *password);
   void set_basic_auth(const char *username, const char *password);
+  void set_bearer_token_auth(const char *token);
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
   void set_digest_auth(const char *username, const char *password);
   void set_digest_auth(const char *username, const char *password);
 #endif
 #endif
@@ -1061,6 +1068,7 @@ public:
 
 
   void set_proxy(const char *host, int port);
   void set_proxy(const char *host, int port);
   void set_proxy_basic_auth(const char *username, const char *password);
   void set_proxy_basic_auth(const char *username, const char *password);
+  void set_proxy_bearer_token_auth(const char *token);
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
   void set_proxy_digest_auth(const char *username, const char *password);
   void set_proxy_digest_auth(const char *username, const char *password);
 #endif
 #endif
@@ -3320,6 +3328,14 @@ make_basic_authentication_header(const std::string &username,
   return std::make_pair(key, field);
   return std::make_pair(key, field);
 }
 }
 
 
+inline std::pair<std::string, std::string>
+make_bearer_token_authentication_header(const std::string &token,
+                                 bool is_proxy = false) {
+  auto field = "Bearer " + token;
+  auto key = is_proxy ? "Proxy-Authorization" : "Authorization";
+  return std::make_pair(key, field);
+}
+
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 inline std::pair<std::string, std::string> make_digest_authentication_header(
 inline std::pair<std::string, std::string> make_digest_authentication_header(
     const Request &req, const std::map<std::string, std::string> &auth,
     const Request &req, const std::map<std::string, std::string> &auth,
@@ -4761,6 +4777,16 @@ inline bool ClientImpl::write_request(Stream &strm, const Request &req,
         proxy_basic_auth_username_, proxy_basic_auth_password_, true));
         proxy_basic_auth_username_, proxy_basic_auth_password_, true));
   }
   }
 
 
+  if (!bearer_token_auth_token_.empty()) {
+    headers.insert(make_bearer_token_authentication_header(
+        bearer_token_auth_token_, false));
+  }
+
+  if (!proxy_bearer_token_auth_token_.empty()) {
+    headers.insert(make_bearer_token_authentication_header(
+        proxy_bearer_token_auth_token_, true));
+  }
+
   detail::write_headers(bstrm, req, headers);
   detail::write_headers(bstrm, req, headers);
 
 
   // Flush buffer
   // Flush buffer
@@ -5253,6 +5279,10 @@ inline void ClientImpl::set_basic_auth(const char *username,
   basic_auth_password_ = password;
   basic_auth_password_ = password;
 }
 }
 
 
+inline void ClientImpl::set_bearer_token_auth(const char *token) {
+  bearer_token_auth_token_ = token;
+}
+
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 inline void ClientImpl::set_digest_auth(const char *username,
 inline void ClientImpl::set_digest_auth(const char *username,
                                         const char *password) {
                                         const char *password) {
@@ -5288,6 +5318,10 @@ inline void ClientImpl::set_proxy_basic_auth(const char *username,
   proxy_basic_auth_password_ = password;
   proxy_basic_auth_password_ = password;
 }
 }
 
 
+inline void ClientImpl::set_proxy_bearer_token_auth(const char *token) {
+  proxy_bearer_token_auth_token_ = token;
+}
+
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 inline void ClientImpl::set_proxy_digest_auth(const char *username,
 inline void ClientImpl::set_proxy_digest_auth(const char *username,
                                               const char *password) {
                                               const char *password) {
@@ -6186,6 +6220,9 @@ inline void Client::set_write_timeout(time_t sec, time_t usec) {
 inline void Client::set_basic_auth(const char *username, const char *password) {
 inline void Client::set_basic_auth(const char *username, const char *password) {
   cli_->set_basic_auth(username, password);
   cli_->set_basic_auth(username, password);
 }
 }
+inline void Client::set_bearer_token_auth(const char *token) {
+  cli_->set_bearer_token_auth(token);
+}
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 inline void Client::set_digest_auth(const char *username,
 inline void Client::set_digest_auth(const char *username,
                                     const char *password) {
                                     const char *password) {
@@ -6213,6 +6250,9 @@ inline void Client::set_proxy_basic_auth(const char *username,
                                          const char *password) {
                                          const char *password) {
   cli_->set_proxy_basic_auth(username, password);
   cli_->set_proxy_basic_auth(username, password);
 }
 }
+inline void Client::set_proxy_bearer_token_auth(const char *token) {
+  cli_->set_proxy_bearer_token_auth(token);
+}
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
 inline void Client::set_proxy_digest_auth(const char *username,
 inline void Client::set_proxy_digest_auth(const char *username,
                                           const char *password) {
                                           const char *password) {