]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: use a struct instead of std::tuple in AWS's VersionAbstractor.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Fri, 23 Jun 2017 10:05:54 +0000 (06:05 -0400)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Fri, 23 Jun 2017 10:23:02 +0000 (06:23 -0400)
The C++11 standard mandates the variadic constructor of std::tuple
to be explicit. As a result, we can't use the uniform initialization
syntax in return statements. Moreover, the tuples became too verbose
after the AWSv4 rework.

See: https://stackoverflow.com/a/14961849
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/rgw/rgw_rest_s3.cc
src/rgw/rgw_rest_s3.h

index 293d21133f7b44bf04825ee859854b601be605a5..79fc07f4ca4739943689d1f54ae483b11fceb120 100644 (file)
@@ -3492,13 +3492,7 @@ null_completer_factory(const boost::optional<std::string>& secret_key)
 }
 
 
-using AWSVerAbstractor = AWSEngine::VersionAbstractor;
-
-std::tuple<AWSVerAbstractor::access_key_id_t,
-           AWSVerAbstractor::client_signature_t,
-           AWSVerAbstractor::string_to_sign_t,
-           AWSVerAbstractor::signature_factory_t,
-           AWSVerAbstractor::completer_factory_t>
+AWSEngine::VersionAbstractor::auth_data_t
 AWSGeneralAbstractor::get_auth_data(const req_state* const s) const
 {
   AwsVersion version;
@@ -3525,11 +3519,7 @@ AWSGeneralAbstractor::get_v4_canonical_headers(
                                                  using_qs, false);
 }
 
-std::tuple<AWSVerAbstractor::access_key_id_t,
-           AWSVerAbstractor::client_signature_t,
-           AWSVerAbstractor::string_to_sign_t,
-           AWSVerAbstractor::signature_factory_t,
-           AWSVerAbstractor::completer_factory_t>
+AWSEngine::VersionAbstractor::auth_data_t
 AWSGeneralAbstractor::get_auth_data_v4(const req_state* const s,
                                        /* FIXME: const. */
                                        bool using_qs) const
@@ -3711,11 +3701,7 @@ AWSGeneralBoto2Abstractor::get_v4_canonical_headers(
 }
 
 
-std::tuple<AWSVerAbstractor::access_key_id_t,
-           AWSVerAbstractor::client_signature_t,
-           AWSVerAbstractor::string_to_sign_t,
-           AWSVerAbstractor::signature_factory_t,
-           AWSVerAbstractor::completer_factory_t>
+AWSEngine::VersionAbstractor::auth_data_t
 AWSGeneralAbstractor::get_auth_data_v2(const req_state* const s) const
 {
   boost::string_view access_key_id;
@@ -3779,11 +3765,7 @@ AWSGeneralAbstractor::get_auth_data_v2(const req_state* const s) const
 }
 
 
-std::tuple<AWSVerAbstractor::access_key_id_t,
-           AWSVerAbstractor::client_signature_t,
-           AWSVerAbstractor::string_to_sign_t,
-           AWSVerAbstractor::signature_factory_t,
-           AWSVerAbstractor::completer_factory_t>
+AWSEngine::VersionAbstractor::auth_data_t
 AWSBrowserUploadAbstractor::get_auth_data_v2(const req_state* const s) const
 {
   return {
@@ -3795,11 +3777,7 @@ AWSBrowserUploadAbstractor::get_auth_data_v2(const req_state* const s) const
   };
 }
 
-std::tuple<AWSVerAbstractor::access_key_id_t,
-           AWSVerAbstractor::client_signature_t,
-           AWSVerAbstractor::string_to_sign_t,
-           AWSVerAbstractor::signature_factory_t,
-           AWSVerAbstractor::completer_factory_t>
+AWSEngine::VersionAbstractor::auth_data_t
 AWSBrowserUploadAbstractor::get_auth_data_v4(const req_state* const s) const
 {
   const boost::string_view credential = s->auth.s3_postobj_creds.x_amz_credential;
@@ -3828,11 +3806,7 @@ AWSBrowserUploadAbstractor::get_auth_data_v4(const req_state* const s) const
   };
 }
 
-std::tuple<AWSVerAbstractor::access_key_id_t,
-           AWSVerAbstractor::client_signature_t,
-           AWSVerAbstractor::string_to_sign_t,
-           AWSVerAbstractor::signature_factory_t,
-           AWSVerAbstractor::completer_factory_t>
+AWSEngine::VersionAbstractor::auth_data_t
 AWSBrowserUploadAbstractor::get_auth_data(const req_state* const s) const
 {
   if (s->auth.s3_postobj_creds.x_amz_algorithm == AWS4_HMAC_SHA256_STR) {
@@ -3849,25 +3823,18 @@ AWSBrowserUploadAbstractor::get_auth_data(const req_state* const s) const
 AWSEngine::result_t
 AWSEngine::authenticate(const req_state* const s) const
 {
-  boost::string_view access_key_id;
-  boost::string_view signature;
-  VersionAbstractor::string_to_sign_t string_to_sign;
-
-  VersionAbstractor::signature_factory_t signature_factory;
-  VersionAbstractor::completer_factory_t completer_factory;
-
   /* Small reminder: an ver_abstractor is allowed to throw! */
-  std::tie(access_key_id,
-           signature,
-           string_to_sign,
-           signature_factory,
-           completer_factory) = ver_abstractor.get_auth_data(s);
+  const auto auth_data = ver_abstractor.get_auth_data(s);
 
-  if (access_key_id.empty() || signature.empty()) {
+  if (auth_data.access_key_id.empty() || auth_data.client_signature.empty()) {
     return result_t::deny(-EINVAL);
   } else {
-    return authenticate(access_key_id, signature, string_to_sign,
-                        signature_factory, completer_factory, s);
+    return authenticate(auth_data.access_key_id,
+                       auth_data.client_signature,
+                       auth_data.string_to_sign,
+                        auth_data.signature_factory,
+                       auth_data.completer_factory,
+                       s);
   }
 }
 
index 65d1b36ad1531139d3b5eb70c55f8a5b509c4e0b..556dee12d1b1bd72e34d57fd630ec56d6dde42d2 100644 (file)
@@ -697,12 +697,15 @@ public:
       std::function<rgw::auth::Completer::cmplptr_t(
         const boost::optional<std::string>& secret_key)>;
 
-    virtual std::tuple<access_key_id_t,
-                       client_signature_t,
-                       string_to_sign_t,
-                       signature_factory_t,
-                       completer_factory_t>
-    get_auth_data(const req_state* s) const = 0;
+    struct auth_data_t {
+      access_key_id_t access_key_id;
+      client_signature_t client_signature;
+      string_to_sign_t string_to_sign;
+      signature_factory_t signature_factory;
+      completer_factory_t completer_factory;
+    };
+
+    virtual auth_data_t get_auth_data(const req_state* s) const = 0;
   };
 
 protected:
@@ -745,31 +748,15 @@ class AWSGeneralAbstractor : public AWSEngine::VersionAbstractor {
                            const boost::string_view& signedheaders,
                            const bool using_qs) const;
 
-  std::tuple<access_key_id_t,
-             client_signature_t,
-             string_to_sign_t,
-             signature_factory_t,
-             completer_factory_t>
-  get_auth_data_v2(const req_state* s) const;
-
-  std::tuple<access_key_id_t,
-             client_signature_t,
-             string_to_sign_t,
-             signature_factory_t,
-             completer_factory_t>
-  get_auth_data_v4(const req_state* s, bool using_qs) const;
+  auth_data_t get_auth_data_v2(const req_state* s) const;
+  auth_data_t get_auth_data_v4(const req_state* s, bool using_qs) const;
 
 public:
   AWSGeneralAbstractor(CephContext* const cct)
     : cct(cct) {
   }
 
-  std::tuple<access_key_id_t,
-             client_signature_t,
-             string_to_sign_t,
-             signature_factory_t,
-             completer_factory_t>
-  get_auth_data(const req_state* s) const override;
+  auth_data_t get_auth_data(const req_state* s) const override;
 };
 
 class AWSGeneralBoto2Abstractor : public AWSGeneralAbstractor {
@@ -788,12 +775,6 @@ class AWSBrowserUploadAbstractor : public AWSEngine::VersionAbstractor {
                        static_cast<std::string::size_type>(bl.length()));
   }
 
-  using auth_data_t = std::tuple<access_key_id_t,
-                                 client_signature_t,
-                                 string_to_sign_t,
-                                 signature_factory_t,
-                                 completer_factory_t>;
-
   auth_data_t get_auth_data_v2(const req_state* s) const;
   auth_data_t get_auth_data_v4(const req_state* s) const;
 
@@ -801,12 +782,7 @@ public:
   AWSBrowserUploadAbstractor(CephContext*) {
   }
 
-  std::tuple<access_key_id_t,
-             client_signature_t,
-             string_to_sign_t,
-             signature_factory_t,
-             completer_factory_t>
-  get_auth_data(const req_state* s) const override;
+  auth_data_t get_auth_data(const req_state* s) const override;
 };