Class: MnUtilsAuth::Sso

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/mn_utils_gem/sso.rb

Constant Summary collapse

:mnsso.freeze
"#{SSO_COOKIE_NAME}_".freeze

Instance Method Summary collapse

Constructor Details

#initializeSso

Returns a new instance of Sso.



12
13
14
# File 'lib/mn_utils_gem/sso.rb', line 12

def initialize
  @logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
end

Instance Method Details

#delete_sso(cookies) ⇒ Object

Raises:

  • (ArgumentError)


56
57
58
59
60
61
62
63
64
65
66
# File 'lib/mn_utils_gem/sso.rb', line 56

def delete_sso(cookies)
  raise ArgumentError, "ENV['MN_REDIS_URL'] is required" \
      unless ENV.key? 'MN_REDIS_URL'
  if cookies[SSO_COOKIE_NAME]
    redis_server.del(cookies[SSO_COOKIE_NAME])
    cookies.delete SSO_COOKIE_NAME
  end
  if RequestStore.store[:sso]
    RequestStore.store[:sso] = nil
  end
end

#get_sso(cookies) ⇒ Object



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

def get_sso(cookies)
  raise ArgumentError, "ENV['MN_REDIS_URL'] is required" \
      unless ENV.key? 'MN_REDIS_URL'
  return RequestStore.store[:sso] if RequestStore.store[:sso]
  return nil if cookies.nil? || cookies[SSO_COOKIE_NAME].nil? || redis_server.nil?
  json = redis_server.get(cookies[SSO_COOKIE_NAME])
  return nil if json.nil?
  parsed = JSON.parse(json, symbolize_names: true)
  return nil unless parsed.is_a?(Hash)
  RequestStore.store[:sso] = parsed
  parsed
rescue Exception => e
  @logger.error e
  nil
end

#get_sso_user_id(cookies) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# File 'lib/mn_utils_gem/sso.rb', line 16

def get_sso_user_id(cookies)
  raise ArgumentError, "ENV['MN_REDIS_URL'] is required" \
      unless ENV.key? 'MN_REDIS_URL'
  parsed = get_sso cookies
  return nil if parsed.nil?
  parsed[:user_id]
rescue Exception => e
  @logger.error e
  nil
end

#set_sso(cookies, user_id, persistent, other_attributes = {}) ⇒ Object

Raises:

  • (ArgumentError)


43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/mn_utils_gem/sso.rb', line 43

def set_sso(cookies, user_id, persistent, other_attributes = {})
  raise ArgumentError, "ENV['MN_REDIS_URL'] is required" \
      unless ENV.key? 'MN_REDIS_URL'
  return if cookies.nil? || user_id.blank? || RequestStore.store[:sso] || redis_server.nil?
  value = other_attributes.reverse_merge({ user_id: user_id })
  redis_ttl = (persistent) ? 1.year.to_i : 1.day.to_i
  if cookies[SSO_COOKIE_NAME].nil? || !redis_server.get(cookies[SSO_COOKIE_NAME])
    cookie = set_sso_cookie cookies, persistent
    redis_server.set(cookie, JSON[value], ex: redis_ttl)
    RequestStore.store[:sso] = value
  end
end