From: Radoslaw Zarzynski Date: Wed, 3 Feb 2016 15:59:50 +0000 (+0100) Subject: rgw: rework serialization in token retrieval for Keystone's admin. X-Git-Tag: v10.1.0~352^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a622e3f9c98cbb4ff3f469886029af006512ab74;p=ceph.git rgw: rework serialization in token retrieval for Keystone's admin. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/rgw/rgw_json_enc.cc b/src/rgw/rgw_json_enc.cc index 56930425fb7..26a54a34c3f 100644 --- a/src/rgw/rgw_json_enc.cc +++ b/src/rgw/rgw_json_enc.cc @@ -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(); +} diff --git a/src/rgw/rgw_keystone.h b/src/rgw/rgw_keystone.h index 29194756140..23e76720a13 100644 --- a/src/rgw/rgw_keystone.h +++ b/src/rgw/rgw_keystone.h @@ -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 diff --git a/src/rgw/rgw_swift.cc b/src/rgw/rgw_swift.cc index f3c28c69d53..9660fa5f0b1 100644 --- a/src/rgw/rgw_swift.cc +++ b/src/rgw/rgw_swift.cc @@ -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());