lib/yao/auth.rb in yao-0.3.7 vs lib/yao/auth.rb in yao-0.3.8

- old
+ new

@@ -1,12 +1,14 @@ require 'json' require 'time' require 'yao/token' +require 'yao/tokenv3' module Yao - %i(tenant_name username password timeout client_cert client_key region_name).each do |name| + %i(tenant_name username password timeout client_cert client_key region_name + identity_api_version user_domain_id user_domain_name project_domain_id project_domain_name).each do |name| Yao.config.param name, nil end module Auth class << self @@ -14,24 +16,75 @@ if Yao.config.tenant_name && Yao.config.username && Yao.config.password && Yao.default_client Yao::Auth.new end end + def build_authv3_info(tenant_name, username, password, + user_domain_id, user_domain_name, + project_domain_id, project_domain_name) + identity = { + methods: ["password"], + password: { + user: { name: username, password: password } + } + } + if user_domain_id + identity[:password][:user][:domain] = { id: user_domain_id } + elsif user_domain_name + identity[:password][:user][:domain] = { name: user_domain_name } + end + + scope = { + project: { name: tenant_name } + } + if project_domain_id + scope[:project][:domain] = { id: project_domain_id } + elsif project_domain_name + scope[:project][:domain] = { name: project_domain_name } + end + + { + auth: { + identity: identity, + scope: scope + } + } + end + + def build_auth_info(tenant_name, username, password) + auth_info = { + auth: { + passwordCredentials: { + username: username, password: password + } + } + } + auth_info[:auth][:tenantName] = tenant_name if tenant_name + + auth_info + end + def new( tenant_name: Yao.config.tenant_name, username: Yao.config.username, - password: Yao.config.password + password: Yao.config.password, + identity_api_version: Yao.config.identity_api_version, + user_domain_id: Yao.config.user_domain_id, + user_domain_name: Yao.config.user_domain_name, + project_domain_id: Yao.config.project_domain_id, + project_domain_name: Yao.config.project_domain_name ) - auth_info = { - auth: { - passwordCredentials: { - username: username, password: password - } - } - } - auth_info[:auth][:tenantName] = tenant_name if tenant_name + if identity_api_version.to_i == 3 + auth_info = build_authv3_info(tenant_name, username, password, + user_domain_id, user_domain_name, + project_domain_id, project_domain_name) + issue = TokenV3.issue(Yao.default_client.default, auth_info) + else + auth_info = build_auth_info(tenant_name, username, password) + issue = Token.issue(Yao.default_client.default, auth_info) + end - return Token.issue(Yao.default_client.default, auth_info) + issue end end end end