require 'fog/openstack/auth/token' require 'fog/openstack/auth/name' module Fog module OpenStack module Auth module Token class V3 include Fog::OpenStack::Auth::Token attr_reader :domain, :project # Default Domain ID DOMAIN_ID = 'default'.freeze def credentials identity = if @token { 'methods' => ['token'], 'token' => {'id' => @token} } else { 'methods' => ['password'], 'password' => @user.identity } end if scope { 'auth' => { 'identity' => identity, 'scope' => scope } } else {'auth' => {'identity' => identity}} end end def prefix_path(uri) if uri.path =~ /\/v3(\/)*.*$/ '' else '/v3' end end def path '/auth/tokens' end def scope return @project.identity if @project return @domain.identity if @domain end def set(response) @data = Fog::JSON.decode(response.body) @token = response.headers['x-subject-token'] @expires = @data['token']['expires_at'] @tenant = @data['token']['project'] @user = @data['token']['user'] catalog = @data['token']['catalog'] if catalog @catalog = Fog::OpenStack::Auth::Catalog::V3.new(catalog) end end def build_credentials(auth) if auth[:openstack_project_id] || auth[:openstack_project_name] # project scoped @project = Fog::OpenStack::Auth::ProjectScope.new( auth[:openstack_project_id], auth[:openstack_project_name] ) @project.domain = if auth[:openstack_project_domain_id] || auth[:openstack_project_domain_name] Fog::OpenStack::Auth::Name.new( auth[:openstack_project_domain_id], auth[:openstack_project_domain_name] ) elsif auth[:openstack_domain_id] || auth[:openstack_domain_name] Fog::OpenStack::Auth::Name.new( auth[:openstack_domain_id], auth[:openstack_domain_name] ) else Fog::OpenStack::Auth::Name.new(DOMAIN_ID, nil) end elsif auth[:openstack_domain_id] || auth[:openstack_domain_name] # domain scoped @domain = Fog::OpenStack::Auth::DomainScope.new( auth[:openstack_domain_id], auth[:openstack_domain_name] ) end if auth[:openstack_auth_token] @token = auth[:openstack_auth_token] else @user = Fog::OpenStack::Auth::User.new(auth[:openstack_userid], auth[:openstack_username]) @user.password = auth[:openstack_api_key] @user.domain = if auth[:openstack_user_domain_id] || auth[:openstack_user_domain_name] Fog::OpenStack::Auth::Name.new( auth[:openstack_user_domain_id], auth[:openstack_user_domain_name] ) elsif auth[:openstack_domain_id] || auth[:openstack_domain_name] Fog::OpenStack::Auth::Name.new( auth[:openstack_domain_id], auth[:openstack_domain_name] ) else Fog::OpenStack::Auth::Name.new(DOMAIN_ID, nil) end end credentials end end end end end end