]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: rework serialization in token retrieval for Keystone's admin.
authorRadoslaw Zarzynski <rzarzynski@mirantis.com>
Wed, 3 Feb 2016 15:59:50 +0000 (16:59 +0100)
committerYehuda Sadeh <yehuda@redhat.com>
Fri, 19 Feb 2016 20:16:35 +0000 (12:16 -0800)
Signed-off-by: Radoslaw Zarzynski <rzarzynski@mirantis.com>
src/rgw/rgw_json_enc.cc
src/rgw/rgw_keystone.h
src/rgw/rgw_swift.cc

index 56930425fb7e50b4b17c134151961ac08d455991..26a54a34c3fca6edbd80e5418d66d39ac22c8409 100644 (file)
@@ -1204,3 +1204,49 @@ void rgw_sync_error_info::dump(Formatter *f) const {
   encode_json("error_code", error_code, f);
   encode_json("message", message, f);
 }
+
+void KeystoneAdminTokenRequestVer2::dump(Formatter * const f) const
+{
+  f->open_object_section("token_request");
+    f->open_object_section("auth");
+      f->open_object_section("passwordCredentials");
+        encode_json("username", cct->_conf->rgw_keystone_admin_user, f);
+        encode_json("password", cct->_conf->rgw_keystone_admin_password, f);
+      f->close_section();
+      encode_json("tenantName", cct->_conf->rgw_keystone_admin_tenant, f);
+    f->close_section();
+  f->close_section();
+}
+
+void KeystoneAdminTokenRequestVer3::dump(Formatter * const f) const
+{
+  f->open_object_section("auth");
+    f->open_object_section("identity");
+      f->open_array_section("methods");
+        f->dump_string("", "password");
+      f->close_section();
+      f->open_object_section("password");
+        f->open_object_section("user");
+          f->open_object_section("domain");
+            encode_json("name", cct->_conf->rgw_keystone_admin_domain, f);
+          f->close_section();
+          encode_json("name", cct->_conf->rgw_keystone_admin_user, f);
+          encode_json("password", cct->_conf->rgw_keystone_admin_password, f);
+        f->close_section();
+      f->close_section();
+    f->close_section();
+    f->open_object_section("scope");
+      f->open_object_section("project");
+        if (!cct->_conf->rgw_keystone_admin_project.empty()) {
+          encode_json("name", cct->_conf->rgw_keystone_admin_project, f);
+        }
+        else {
+          encode_json("name", cct->_conf->rgw_keystone_admin_tenant, f);
+        }
+        f->open_object_section("domain");
+          encode_json("name", cct->_conf->rgw_keystone_admin_domain, f);
+        f->close_section();
+      f->close_section();
+    f->close_section();
+  f->close_section();
+}
index 29194756140501e6a9f421eb6046fb39cf02e744..23e76720a13bc1b18e681ef0a502e4538cebacec 100644 (file)
@@ -97,5 +97,30 @@ public:
   void invalidate(const string& token_id);
 };
 
+class KeystoneAdminTokenRequest {
+public:
+  virtual ~KeystoneAdminTokenRequest() = default;
+  virtual void dump(Formatter *f) const = 0;
+};
+
+class KeystoneAdminTokenRequestVer2 : public KeystoneAdminTokenRequest {
+  CephContext *cct;
+
+public:
+  KeystoneAdminTokenRequestVer2(CephContext * const _cct)
+    : cct(_cct) {
+  }
+  void dump(Formatter *f) const;
+};
+
+class KeystoneAdminTokenRequestVer3 : public KeystoneAdminTokenRequest {
+  CephContext *cct;
+
+public:
+  KeystoneAdminTokenRequestVer3(CephContext * const _cct)
+    : cct(_cct) {
+  }
+  void dump(Formatter *f) const;
+};
 
 #endif
index f3c28c69d530f2862bc22e0e9533284b146f87de..9660fa5f0b1efaa73578f21812f94f95a31e9314 100644 (file)
@@ -289,15 +289,9 @@ int RGWSwift::get_keystone_admin_token(CephContext * const cct,
   JSONFormatter jf;
   std::string keystone_version = cct->_conf->rgw_keystone_api_version;
   if (keystone_version == "2.0") {
-    jf.open_object_section("token_request");
-      jf.open_object_section("auth");
-        jf.open_object_section("passwordCredentials");
-          encode_json("username", cct->_conf->rgw_keystone_admin_user, &jf);
-          encode_json("password", cct->_conf->rgw_keystone_admin_password, &jf);
-        jf.close_section();
-        encode_json("tenantName", cct->_conf->rgw_keystone_admin_tenant, &jf);
-      jf.close_section();
-    jf.close_section();
+    KeystoneAdminTokenRequestVer2 req_serializer(cct);
+    req_serializer.dump(&jf);
+
     std::stringstream ss;
     jf.flush(ss);
     token_req.set_post_data(ss.str());
@@ -311,37 +305,10 @@ int RGWSwift::get_keystone_admin_token(CephContext * const cct,
       return -EINVAL;
     token = t.token.id;
     return 0;
-  }
-  else if (keystone_version == "3") {
-    jf.open_object_section("auth");
-      jf.open_object_section("identity");
-        jf.open_array_section("methods");
-          jf.dump_string("", "password");
-        jf.close_section();
-        jf.open_object_section("password");
-          jf.open_object_section("user");
-            jf.open_object_section("domain");
-              encode_json("name", cct->_conf->rgw_keystone_admin_domain, &jf);
-            jf.close_section();
-            encode_json("name", cct->_conf->rgw_keystone_admin_user, &jf);
-            encode_json("password", cct->_conf->rgw_keystone_admin_password, &jf);
-          jf.close_section();
-        jf.close_section();
-      jf.close_section();
-      jf.open_object_section("scope");
-        jf.open_object_section("project");
-          if (!cct->_conf->rgw_keystone_admin_project.empty()) {
-            encode_json("name", cct->_conf->rgw_keystone_admin_project, &jf);
-          }
-          else {
-            encode_json("name", cct->_conf->rgw_keystone_admin_tenant, &jf);
-          }
-          jf.open_object_section("domain");
-            encode_json("name", cct->_conf->rgw_keystone_admin_domain, &jf);
-          jf.close_section();
-        jf.close_section();
-      jf.close_section();
-    jf.close_section();
+  } else if (keystone_version == "3") {
+    KeystoneAdminTokenRequestVer3 req_serializer(cct);
+    req_serializer.dump(&jf);
+
     std::stringstream ss;
     jf.flush(ss);
     token_req.set_post_data(ss.str());