class Heroku::Kensa::Sso
Attributes
id[RW]
proxy_port[RW]
timestamp[RW]
token[RW]
url[RW]
Public Class Methods
new(data)
click to toggle source
# 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
Public Instance Methods
POST?()
click to toggle source
# File lib/heroku/kensa/sso.rb, line 32 def POST? @use_post end
base64_url_variant(text)
click to toggle source
# File lib/heroku/kensa/sso.rb, line 95 def base64_url_variant(text) base64 = [text].pack('m').gsub('=', '').gsub("\n", '') base64.tr('+/','-_') end
find_available_port()
click to toggle source
# 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
full_url()
click to toggle source
# File lib/heroku/kensa/sso.rb, line 44 def full_url [ url, path, querystring ].join end
Also aliased as: get_url
make_token(t)
click to toggle source
# File lib/heroku/kensa/sso.rb, line 58 def make_token(t) Digest::SHA1.hexdigest([@id, @salt, t].join(':')) end
message()
click to toggle source
# 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
path()
click to toggle source
# File lib/heroku/kensa/sso.rb, line 24 def path if self.POST? URI.parse(url).path else "/heroku/resources/#{id}" end end
post_url()
click to toggle source
# File lib/heroku/kensa/sso.rb, line 49 def post_url url end
query_data()
click to toggle source
# File lib/heroku/kensa/sso.rb, line 67 def query_data query_params.map{|p| p.join('=')}.join('&') end
query_params()
click to toggle source
# 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
querystring()
click to toggle source
# File lib/heroku/kensa/sso.rb, line 62 def querystring return '' unless @salt '?' + query_data end
run_proxy()
click to toggle source
# 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
sso_url()
click to toggle source
# File lib/heroku/kensa/sso.rb, line 36 def sso_url if self.POST? "http://localhost:#{@proxy_port}/" else full_url end end
start()
click to toggle source
# File lib/heroku/kensa/sso.rb, line 108 def start run_proxy self end
timestamp=(other)
click to toggle source
# File lib/heroku/kensa/sso.rb, line 53 def timestamp=(other) @timestamp = other @token = make_token(@timestamp) end