From f8832812905df4d9f58ddd43c69f598bdfcc7712 Mon Sep 17 00:00:00 2001 From: Cosmin Munteanu Date: Wed, 31 May 2017 15:54:40 +0300 Subject: Domain name and domain id --- wsgate/nova_token_auth.cpp | 74 +++++++++++++++++++++++++++++++-------------- wsgate/nova_token_auth.hpp | 8 +++-- wsgate/wsgate.ini.sample.in | 4 +++ wsgate/wsgateEHS.cpp | 38 +++++++++++++++++++++-- wsgate/wsgateEHS.hpp | 6 +++- 5 files changed, 101 insertions(+), 29 deletions(-) diff --git a/wsgate/nova_token_auth.cpp b/wsgate/nova_token_auth.cpp index 3974ec6..1ab139c 100644 --- a/wsgate/nova_token_auth.cpp +++ b/wsgate/nova_token_auth.cpp @@ -40,14 +40,18 @@ private: std::pair get_auth_token_data_v2(std::string osAuthUrl, std::string osUserName, std::string osPassword, - std::string osTenantName, + std::string osProjectName, std::string osRegion); std::pair get_auth_token_data_v3(std::string osAuthUrl, std::string osUserName, std::string osPassword, - std::string osTenantName, - std::string osProjectID, + std::string osProjectName, + std::string osProjectId, + std::string osProjectDomainName, + std::string osUserDomainName, + std::string osProjectDomainId, + std::string osUserDomainId, std::string osRegion); web::json::value get_console_token_data(std::string authToken, @@ -58,8 +62,12 @@ public: virtual nova_console_info get_console_info(std::string osAuthUrl, std::string osUserName, std::string osPassword, - std::string osTenantName, - std::string osProjectID, + std::string osProjectName, + std::string osProjectId, + std::string osProjectDomainName, + std::string osUserDomainName, + std::string osProjectDomainId, + std::string osUserDomainId, std::string consoleToken, std::string keystoneVersion, std::string osRegion); @@ -94,7 +102,7 @@ json::value nova_console_token_auth_impl::get_json_from_response( std::pair nova_console_token_auth_impl::get_auth_token_data_v2( string osAuthUrl, string osUserName, - string osPassword, string osTenantName, + string osPassword, string osProjectName, string osRegion) { auto jsonRequestBody = json::value::object(); @@ -103,7 +111,7 @@ std::pair nova_console_token_auth_impl::get_auth_token cred[U("username")] = json::value::string(to_string_t(osUserName)); cred[U("password")] = json::value::string(to_string_t(osPassword)); auth[U("passwordCredentials")] = cred; - auth[U("tenantName")] = json::value::string(to_string_t(osTenantName)); + auth[U("tenantName")] = json::value::string(to_string_t(osProjectName)); jsonRequestBody[U("auth")] = auth; http::http_request request(http::methods::POST); request.set_request_uri(U("tokens")); @@ -142,8 +150,10 @@ std::pair nova_console_token_auth_impl::get_auth_token std::pair nova_console_token_auth_impl::get_auth_token_data_v3( string osAuthUrl, string osUserName, - string osPassword, string osTenantName, - string osProjectID, + string osPassword, string osProjectName, + string osProjectId, + string osProjectDomainName, string osUserDomainName, + string osProjectDomainId, string osUserDomainId, string osRegion) { auto jsonRequestBody = json::value::object(); @@ -157,25 +167,37 @@ std::pair nova_console_token_auth_impl::get_auth_token user[U("name")] = json::value::string(to_string_t(osUserName)); user[U("password")] = json::value::string(to_string_t(osPassword)); - auto domain = json::value::object(); - domain[U("id")] = json::value::string(to_string_t("default")); - - user[U("domain")] = domain; + auto userDomain = json::value::object(); + if (!osUserDomainId.empty()){ + userDomain[U("id")] = json::value::string(to_string_t(osUserDomainId)); + } + else{ + userDomain[U("name")] = json::value::string(to_string_t(osUserDomainName)); + } + user[U("domain")] = userDomain; password[U("user")] = user; identity[U("methods")] = methods; identity[U("password")] = password; auto scope = json::value::object(); auto project = json::value::object(); - if (!osTenantName.empty()) + if (!osProjectId.empty()) { - project[U("name")] = json::value::string(to_string_t(osTenantName)); + project[U("id")] = json::value::string(to_string_t(osProjectId)); } - if (!osProjectID.empty()) + else if (!osProjectName.empty()) { - project[U("id")] = json::value::string(to_string_t(osProjectID)); + project[U("name")] = json::value::string(to_string_t(osProjectName)); + } + + auto projectDomain = json::value::object(); + if (!osProjectDomainId.empty()){ + projectDomain[U("id")] = json::value::string(to_string_t(osProjectDomainId)); + } + else{ + projectDomain[U("name")] = json::value::string(to_string_t(osProjectDomainName)); } - project[U("domain")] = domain; + project[U("domain")] = projectDomain; scope[U("project")] = project; auth[U("identity")] = identity; @@ -230,8 +252,10 @@ json::value nova_console_token_auth_impl::get_console_token_data( nova_console_info nova_console_token_auth_impl::get_console_info( std::string osAuthUrl, std::string osUserName, - std::string osPassword, std::string osTenantName, - std::string osProjectID, + std::string osPassword, + std::string osProjectName, std::string osProjectId, + std::string osProjectDomainName, std::string osUserDomainName, + std::string osProjectDomainId, std::string osUserDomainId, std::string consoleToken, std::string keystoneVersion, std::string osRegion) { @@ -242,15 +266,19 @@ nova_console_info nova_console_token_auth_impl::get_console_info( std::tie(authToken, novaUrl) = get_auth_token_data_v2(osAuthUrl, osUserName, osPassword, - osTenantName, + osProjectName, osRegion); } else if (keystoneVersion == KEYSTONE_V3){ std::tie(authToken, novaUrl) = get_auth_token_data_v3(osAuthUrl, osUserName, osPassword, - osTenantName, - osProjectID, + osProjectName, + osProjectId, + osProjectDomainName, + osUserDomainName, + osProjectDomainId, + osUserDomainId, osRegion); } else{ diff --git a/wsgate/nova_token_auth.hpp b/wsgate/nova_token_auth.hpp index 5238b01..1f6028e 100644 --- a/wsgate/nova_token_auth.hpp +++ b/wsgate/nova_token_auth.hpp @@ -68,8 +68,12 @@ namespace wsgate { virtual nova_console_info get_console_info(std::string osAuthUrl, std::string osUserName, std::string osPassword, - std::string osTenantName, - std::string osProjectID, + std::string osProjectName, + std::string osProjectId, + std::string osProjectDomainName, + std::string osUserDomainName, + std::string osProjectDomainId, + std::string osUserDomainId, std::string consoleToken, std::string keystoneVersion, std::string osRegion) = 0; diff --git a/wsgate/wsgate.ini.sample.in b/wsgate/wsgate.ini.sample.in index bc7833c..bcba7b3 100644 --- a/wsgate/wsgate.ini.sample.in +++ b/wsgate/wsgate.ini.sample.in @@ -157,6 +157,10 @@ nofullwindowdrag = true #password = secret #tenantname = admin #projectid = openstack project id +#projectdomainid = project domain id, if ommited project domain name is used instead +#userdomainid = user domain id, if ommited user domain name is used instead +#projectdomainname = project domain name, if ommited "default" is used +#userdomainname = user domain name, if ommited "default" is used #region = optional region [hyperv] diff --git a/wsgate/wsgateEHS.cpp b/wsgate/wsgateEHS.cpp index 1b77eaa..581d365 100644 --- a/wsgate/wsgateEHS.cpp +++ b/wsgate/wsgateEHS.cpp @@ -286,8 +286,10 @@ namespace wsgate{ nova_console_token_auth* token_auth = nova_console_token_auth_factory::get_instance(); nova_console_info info = token_auth->get_console_info(m_sOpenStackAuthUrl, m_sOpenStackUsername, - m_sOpenStackPassword, m_sOpenStackTenantName, + m_sOpenStackPassword, m_sOpenStackProjectName, m_sOpenStackProjectId, + m_sOpenStackProjectDomainName, m_sOpenStackUserDomainName, + m_sOpenStackProjectDomainId, m_sOpenStackUserDomainId, tokenId, m_sOpenStackKeystoneVersion, m_sOpenStackRegion); log::info << "Host: " << info.host << " Port: " << info.port @@ -916,9 +918,15 @@ namespace wsgate{ m_sOpenStackPassword.clear(); } if (pt.get_optional("openstack.tenantname")) { - m_sOpenStackTenantName.assign(pt.get("openstack.tenantname")); + m_sOpenStackProjectName.assign(pt.get("openstack.tenantname")); } else { - m_sOpenStackTenantName.clear(); + m_sOpenStackProjectName.clear(); + } + if (pt.get_optional("openstack.projectname")) { + m_sOpenStackProjectName.assign(pt.get("openstack.projectname")); + } + else { + m_sOpenStackProjectName.clear(); } if (pt.get_optional("openstack.projectid")) { m_sOpenStackProjectId.assign(pt.get("openstack.projectid")); @@ -926,6 +934,30 @@ namespace wsgate{ else { m_sOpenStackProjectId.clear(); } + if (pt.get_optional("openstack.projectdomainname")) { + m_sOpenStackProjectDomainName.assign(pt.get("openstack.projectdomainname")); + } + else { + m_sOpenStackProjectDomainName.assign("default"); + } + if (pt.get_optional("openstack.userdomainname")) { + m_sOpenStackUserDomainName.assign(pt.get("openstack.userdomainname")); + } + else { + m_sOpenStackUserDomainName.assign("default"); + } + if (pt.get_optional("openstack.projectdomainid")) { + m_sOpenStackProjectDomainId.assign(pt.get("openstack.projectdomainid")); + } + else { + m_sOpenStackProjectDomainId.clear(); + } + if (pt.get_optional("openstack.userdomainid")) { + m_sOpenStackUserDomainId.assign(pt.get("openstack.userdomainid")); + } + else { + m_sOpenStackUserDomainId.clear(); + } if (pt.get_optional("openstack.keystoneversion")) { m_sOpenStackKeystoneVersion.assign(pt.get("openstack.keystoneversion")); } diff --git a/wsgate/wsgateEHS.hpp b/wsgate/wsgateEHS.hpp index cc3cae3..bb5aef7 100644 --- a/wsgate/wsgateEHS.hpp +++ b/wsgate/wsgateEHS.hpp @@ -114,8 +114,12 @@ namespace wsgate{ string m_sOpenStackAuthUrl; string m_sOpenStackUsername; string m_sOpenStackPassword; - string m_sOpenStackTenantName; + string m_sOpenStackProjectName; string m_sOpenStackProjectId; + string m_sOpenStackProjectDomainName; + string m_sOpenStackUserDomainName; + string m_sOpenStackProjectDomainId; + string m_sOpenStackUserDomainId; string m_sOpenStackKeystoneVersion; string m_sOpenStackRegion; string m_sHyperVHostUsername; -- cgit v1.2.3