Object
# File lib/heroku/kensa/sso.rb, line 9 def initialize(data) @id = data[:id] @salt = data['api']['sso_salt'] env = data.fetch :env, 'test' if @url = data['api'][env]['sso_url'] @use_post = true @proxy_port = find_available_port else @url = data["api"][env].chomp('/') end @timestamp = Time.now.to_i @token = make_token(@timestamp) end
# File lib/heroku/kensa/sso.rb, line 95 def base64_url_variant(text) base64 = [text].pack('m').gsub('=', '').gsub("\n", '') base64.tr('+/','-_') end
# File lib/heroku/kensa/sso.rb, line 113 def find_available_port server = TCPServer.new('127.0.0.1', 0) server.addr[1] ensure server.close if server end
# File lib/heroku/kensa/sso.rb, line 44 def full_url [ url, path, querystring ].join end
# File lib/heroku/kensa/sso.rb, line 58 def make_token(t) Digest::SHA1.hexdigest([@id, @salt, t].join(':')) end
# File lib/heroku/kensa/sso.rb, line 100 def message if self.POST? "POSTing #{query_data} to #{post_url} via proxy on port #{@proxy_port}" else "Opening #{full_url}" end end
# File lib/heroku/kensa/sso.rb, line 24 def path if self.POST? URI.parse(url).path else "/heroku/resources/#{id}" end end
# File lib/heroku/kensa/sso.rb, line 67 def query_data query_params.map{|p| p.join('=')}.join('&') end
# File lib/heroku/kensa/sso.rb, line 71 def query_params { 'token' => @token, 'timestamp' => @timestamp.to_s, 'nav-data' => sample_nav_data, 'email' => 'username@example.com', 'app' => 'myapp' }.tap do |params| params.merge!('id' => @id) if self.POST? end end
# File lib/heroku/kensa/sso.rb, line 62 def querystring return '' unless @salt '?' + query_data end
# File lib/heroku/kensa/sso.rb, line 120 def run_proxy return unless self.POST? server = PostProxy.new self @proxy = server trap("INT") { server.stop } pid = fork do server.start end at_exit { server.stop; Process.waitpid pid } end
# File lib/heroku/kensa/sso.rb, line 36 def sso_url if self.POST? "http://localhost:#{@proxy_port}/" else full_url end end
Generated with the Darkfish Rdoc Generator 2.