Class: EME::SSO::TokenReader

Inherits:
Object
  • Object
show all
Defined in:
lib/eme/sso/token_reader.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ TokenReader

Returns a new instance of TokenReader.



3
4
5
# File 'lib/eme/sso/token_reader.rb', line 3

def initialize(app)
  @app = app
end

Class Method Details

.get_account_info(ssot) ⇒ Object



43
44
45
46
47
48
49
50
51
# File 'lib/eme/sso/token_reader.rb', line 43

def self.(ssot)
  auth_response = nil
  Net::HTTP.start(EME::SSO.settings[:auth_server], EME::SSO.settings[:auth_server_port]) do |http|
    http.open_timeout = 5
    http.read_timeout = 10
    auth_response = http.post("/sso/ticket/#{ssot}/verify", "tt=sso_insecure")
  end
  return auth_response
end

.setup_user_session(user, session, ssot = nil) ⇒ Object



53
54
55
56
57
58
59
60
61
62
# File 'lib/eme/sso/token_reader.rb', line 53

def self.setup_user_session(user, session, ssot = nil)
  session[:ssot] = ssot
  session[:screen_name] = if user["temp_screen_name"]
    user["email"].split("@")[0]
  else
    user["screen_name"]
  end
  session[:account_id] = user["id"]
  session[:account_info] = user
end

Instance Method Details

#call(env) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/eme/sso/token_reader.rb', line 7

def call(env)
  req = Rack::Request.new(env)
  cookies = req.cookies
  session = req.session
  @eat_cookies = false
  @bake_cookies = false
  if cookies["_ssot"] && (!session["account_id"] || cookies["_ssot"] != session[:ssot])
    (cookies, session)
  elsif !cookies["_ssot"] && session["account_id"]
    @eat_cookies = true
    #disconnect_account(cookies, session)
  end
  @status, @headers, @response = @app.call(env)
  set_cookies(cookies, session) if @eat_cookies || @bake_cookies
  return [@status, @headers, @response]
end

#connect_account(cookies, session) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/eme/sso/token_reader.rb', line 24

def (cookies, session)
  auth_response = EME::SSO::TokenReader.(cookies["_ssot"])
  code = auth_response.code.to_i
  # {"temp_screen_name"=>false, "screen_name"=>"kaboo", "language"=>"en", "account_status"=>1, "email"=>"[email protected]", "id"=>12345}
  if code == 200
     = JSON.parse(auth_response.body)
    EME::SSO::TokenReader.setup_user_session(, session, cookies["_ssot"])
    @bake_cookies = true
  else # delete cookie if it was bad?
    @eat_cookies = true
  end
  return true
rescue Exception => e
  puts e.inspect
  puts e.backtrace
  #Airbrake.notify(e) # TO DO: setup airbrake?
  return true
end

#set_cookies(cookies, session) ⇒ Object



64
65
66
67
68
69
70
71
72
73
# File 'lib/eme/sso/token_reader.rb', line 64

def set_cookies(cookies, session)
  if @eat_cookies
    Rack::Utils.set_cookie_header!(@headers, "screen_name", {:value => "", :path => "/", :domain => ".enmasse.com", :expires => Time.now-86400})
    Rack::Utils.set_cookie_header!(@headers, "_ssot", {:value => "", :path => "/", :domain => ".enmasse.com", :expires => Time.now-86400})
    Rack::Utils.set_cookie_header!(@headers, "serialized", {:value => "", :path => "/", :domain => ".enmasse.com", :expires => Time.now-86400})
    session.clear
  elsif @bake_cookies
    Rack::Utils.set_cookie_header!(@headers, "screen_name", {:value => session[:screen_name], :domain => ".enmasse.com", :path => "/"})
  end
end