class OmniAuth::Strategies::Tequila
Attributes
raw_info[RW]
user_info[RW]
Public Instance Methods
callback_phase()
click to toggle source
Calls superclass method
# File lib/omniauth/strategies/tequila.rb, line 36 def callback_phase response = fetch_attributes( request.params['key'] ) return fail!(:invalid_response, TequilaFail.new('nil response from Tequila')) if response.nil? return fail!(:invalid_response, TequilaFail.new('Invalid reponse from Tequila: ' + response.code)) unless response.code == '200' # parse attributes self.raw_info = {} response.body.each_line { |line| item = line.split('=', 2) if item.length == 2 raw_info[item[0]] = item[1].strip end } missing_info = @options[:request_info].values.reject { |k| raw_info.include?(k) } if !missing_info.empty? log :error, 'Missing attributes in Tequila server response: ' + missing_info.join(', ') return fail!(:invalid_info, TequilaFail.new('Invalid info from Tequila')) end super end
request_phase()
click to toggle source
# File lib/omniauth/strategies/tequila.rb, line 60 def request_phase response = get_request_key if response.nil? or response.code != '200' log :error, 'Received invalid response from Tequila server: ' + (response.nil? ? 'nil' : response.code) return fail!(:invalid_response, TequilaFail.new('Invalid response from Tequila server')) end request_key = response.body[/^key=(.*)$/, 1] if request_key.nil? or request_key.empty? log :error, 'Received invalid key from Tequila server: ' + (request_key.nil? ? 'nil' : request_key) return fail!(:invalid_key, TequilaFail.new('Invalid key from Tequila')) end # redirect to the Tequila server's login page [ 302, { 'Location' => tequila_uri.to_s + '/requestauth?requestkey=' + request_key, 'Content-Type' => 'text/plain' }, ['You are being redirected to Tequila for sign-in.'] ] end
Private Instance Methods
fetch_attributes( request_key )
click to toggle source
retrieves user attributes from the Tequila
server
# File lib/omniauth/strategies/tequila.rb, line 87 def fetch_attributes( request_key ) tequila_post '/fetchattributes', "key=" + request_key end
get_request_key()
click to toggle source
retrieves the request key from the Tequila
server
# File lib/omniauth/strategies/tequila.rb, line 92 def get_request_key # NB: You might want to set the service and required group yourself. request_fields = @options[:request_info].values << @options[:uid_field] body = 'urlaccess=' + callback_url + "\nservice=Omniauth\n" + 'request=' + request_fields.join(',') + "\nrequire=group=my-group" tequila_post '/createrequest', body end
tequila_post( path, body )
click to toggle source
# File lib/omniauth/strategies/tequila.rb, line 117 def tequila_post( path, body ) http = Net::HTTP.new(tequila_uri.host, tequila_uri.port) http.use_ssl = @options.ssl if http.use_ssl? http.verify_mode = OpenSSL::SSL::VERIFY_NONE if @options.disable_ssl_verification? http.ca_path = @options.ca_path end response = nil http.start do |c| response = c.request_post tequila_uri.path + path, body end response end
tequila_uri()
click to toggle source
Build a Tequila
host with protocol and port
# File lib/omniauth/strategies/tequila.rb, line 103 def tequila_uri @tequila_uri ||= begin if @options.port.nil? @options.port = @options.ssl ? 443 : 80 end Addressable::URI.new( :scheme => @options.ssl ? 'https' : 'http', :host => @options.host, :port => @options.port, :path => @options.path ) end end