diff options
author | Alessandro Pilotti <apilotti@cloudbasesolutions.com> | 2017-07-10 20:56:29 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-10 20:56:29 +0300 |
commit | b839677880e768cf12ad17fd9bae76cb0b002637 (patch) | |
tree | 5b92152bb788acc849c088180b72f8887405b177 | |
parent | fd8be194a3829fdc5ea226dae83edccc4ff5ce86 (diff) | |
parent | f8832812905df4d9f58ddd43c69f598bdfcc7712 (diff) |
Merge pull request #165 from c64cosmin/master
Adds project ID, project domain and user domain configuration.
-rw-r--r-- | wsgate/nova_token_auth.cpp | 70 | ||||
-rw-r--r-- | wsgate/nova_token_auth.hpp | 7 | ||||
-rw-r--r-- | wsgate/wsgate.ini.sample.in | 5 | ||||
-rw-r--r-- | wsgate/wsgateEHS.cpp | 45 | ||||
-rw-r--r-- | wsgate/wsgateEHS.hpp | 7 |
5 files changed, 114 insertions, 20 deletions
diff --git a/wsgate/nova_token_auth.cpp b/wsgate/nova_token_auth.cpp index 7c5cd06..1ab139c 100644 --- a/wsgate/nova_token_auth.cpp +++ b/wsgate/nova_token_auth.cpp @@ -40,13 +40,18 @@ private: std::pair<std::string, std::string> 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<std::string, std::string> get_auth_token_data_v3(std::string osAuthUrl, std::string osUserName, std::string osPassword, - std::string osTenantName, + 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, @@ -57,7 +62,12 @@ public: virtual nova_console_info get_console_info(std::string osAuthUrl, std::string osUserName, std::string osPassword, - std::string osTenantName, + 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); @@ -92,7 +102,7 @@ json::value nova_console_token_auth_impl::get_json_from_response( std::pair<std::string, std::string> 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(); @@ -101,7 +111,7 @@ std::pair<std::string, std::string> 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")); @@ -140,7 +150,10 @@ std::pair<std::string, std::string> nova_console_token_auth_impl::get_auth_token std::pair<std::string, std::string> nova_console_token_auth_impl::get_auth_token_data_v3( string osAuthUrl, string osUserName, - string osPassword, string osTenantName, + string osPassword, string osProjectName, + string osProjectId, + string osProjectDomainName, string osUserDomainName, + string osProjectDomainId, string osUserDomainId, string osRegion) { auto jsonRequestBody = json::value::object(); @@ -154,18 +167,37 @@ std::pair<std::string, std::string> 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(); - project[U("name")] = json::value::string(to_string_t(osTenantName)); - project[U("domain")] = domain; + if (!osProjectId.empty()) + { + project[U("id")] = json::value::string(to_string_t(osProjectId)); + } + else if (!osProjectName.empty()) + { + 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")] = projectDomain; scope[U("project")] = project; auth[U("identity")] = identity; @@ -220,7 +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 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) { @@ -231,14 +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, + osProjectName, + osProjectId, + osProjectDomainName, + osUserDomainName, + osProjectDomainId, + osUserDomainId, osRegion); } else{ diff --git a/wsgate/nova_token_auth.hpp b/wsgate/nova_token_auth.hpp index d8f4332..1f6028e 100644 --- a/wsgate/nova_token_auth.hpp +++ b/wsgate/nova_token_auth.hpp @@ -68,7 +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 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 c4a9c93..bcba7b3 100644 --- a/wsgate/wsgate.ini.sample.in +++ b/wsgate/wsgate.ini.sample.in @@ -156,6 +156,11 @@ nofullwindowdrag = true #username = admin #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 bd75806..581d365 100644 --- a/wsgate/wsgateEHS.cpp +++ b/wsgate/wsgateEHS.cpp @@ -286,7 +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 @@ -915,9 +918,45 @@ namespace wsgate{ m_sOpenStackPassword.clear(); } if (pt.get_optional<std::string>("openstack.tenantname")) { - m_sOpenStackTenantName.assign(pt.get<std::string>("openstack.tenantname")); + m_sOpenStackProjectName.assign(pt.get<std::string>("openstack.tenantname")); } else { - m_sOpenStackTenantName.clear(); + m_sOpenStackProjectName.clear(); + } + if (pt.get_optional<std::string>("openstack.projectname")) { + m_sOpenStackProjectName.assign(pt.get<std::string>("openstack.projectname")); + } + else { + m_sOpenStackProjectName.clear(); + } + if (pt.get_optional<std::string>("openstack.projectid")) { + m_sOpenStackProjectId.assign(pt.get<std::string>("openstack.projectid")); + } + else { + m_sOpenStackProjectId.clear(); + } + if (pt.get_optional<std::string>("openstack.projectdomainname")) { + m_sOpenStackProjectDomainName.assign(pt.get<std::string>("openstack.projectdomainname")); + } + else { + m_sOpenStackProjectDomainName.assign("default"); + } + if (pt.get_optional<std::string>("openstack.userdomainname")) { + m_sOpenStackUserDomainName.assign(pt.get<std::string>("openstack.userdomainname")); + } + else { + m_sOpenStackUserDomainName.assign("default"); + } + if (pt.get_optional<std::string>("openstack.projectdomainid")) { + m_sOpenStackProjectDomainId.assign(pt.get<std::string>("openstack.projectdomainid")); + } + else { + m_sOpenStackProjectDomainId.clear(); + } + if (pt.get_optional<std::string>("openstack.userdomainid")) { + m_sOpenStackUserDomainId.assign(pt.get<std::string>("openstack.userdomainid")); + } + else { + m_sOpenStackUserDomainId.clear(); } if (pt.get_optional<std::string>("openstack.keystoneversion")) { m_sOpenStackKeystoneVersion.assign(pt.get<std::string>("openstack.keystoneversion")); diff --git a/wsgate/wsgateEHS.hpp b/wsgate/wsgateEHS.hpp index 27499e5..bb5aef7 100644 --- a/wsgate/wsgateEHS.hpp +++ b/wsgate/wsgateEHS.hpp @@ -114,7 +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; |