+++ /dev/null
-module Aviator
- # Original work by Stephen Paul Suarez
- # https://github.com/musashi-dev/aviator/blob/develop/lib/aviator/openstack/identity/v3/public/create_token.rb
-
- define_request :create_token, :inherit => [:openstack, :common, :v3, :public, :base] do
-
- meta :anonymous, true
- meta :service, :identity
- meta :api_version, :v3
-
- link 'documentation',
- 'http://api.openstack.org/api-ref-identity-v3.html#Token_Calls'
-
- param :domainId, :required => false, :alias => :domain_id
- param :domainName, :required => false, :alias => :domain_name
- param :password, :required => false
- param :tenantId, :required => false, :alias => :tenant_id
- param :tenantName, :required => false, :alias => :tenant_name
- param :tokenId, :required => false, :alias => :token_id
- param :userId, :required => false, :alias => :user_id
- param :username, :required => false
-
-
- def body
- params[:token_id] ? token_auth_body : password_auth_body
- end
-
-
- def http_method
- :post
- end
-
-
- def url
- url = session_data[:auth_service][:host_uri]
- url += '/v3' if (URI(url).path =~ /^\/?\w+/).nil?
- url += "/auth/tokens"
- end
-
-
- private
-
- # Removes nil elements from hash
- # Adapted from http://stackoverflow.com/a/14773555/402145
- def compact_hash(hash, opts = {})
- opts[:recurse] ||= true
- hash.inject({}) do |new_hash, (k,v)|
- if !v.nil?
- new_hash[k] = opts[:recurse] && v.kind_of?(Hash) ? compact_hash(v, opts) : v
- end
- new_hash
- end
- end
-
-
- def domain_hash
- compact_hash({
- :id => params[:domain_id],
- :name => params[:domain_name]
- })
- end
-
-
- def password_auth_body
- p = {
- :auth => {
- :identity => {
- :methods => ['password'],
- :password => {
- :user => compact_hash({
- :id => params[:user_id],
- :name => params[:username],
- :password => params[:password]
- })
- }
- }
- }
- }
-
- if params[:domain_name] || params[:domain_id]
- p[:auth][:identity][:password][:user][:domain] = domain_hash
- end
-
- if params[:tenant_name] || params[:tenant_id] || params[:domain_name] || params[:domain_id]
- p[:auth][:scope] = scope_hash
- end
- p
- end
-
-
- def scope_hash
- p = {}
-
- if params[:tenant_name] || params[:tenant_id]
- p[:project] = compact_hash({
- :id => params[:tenant_id],
- :name => params[:tenant_name]
- })
- p[:project][:domain] = domain_hash if params[:domain_name] || params[:domain_id]
-
- elsif params[:domain_name] || params[:domain_id]
- p[:domain] = domain_hash
- end
-
- p
- end
-
-
- def token_auth_body
- p = {
- :auth => {
- :identity => {
- :methods => ['token'],
- :token => { :id => params[:token_id] }
- }
- }
- }
- p[:auth][:scope] = scope_hash if params[:tenant_name] || params[:tenant_id]
- p
- end
-
-
- end
-
-end