4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/devise_masquerade/controllers/helpers.rb', line 4
def self.define_helpers(mapping)
name = mapping.name
class_name = mapping.class_name
class_eval <<-METHODS, __FILE__, __LINE__ + 1
def masquerade!
return if params["#{Devise.masquerade_param}"].blank?
klass = unless params[:masqueraded_resource_class].blank?
params[:masqueraded_resource_class].constantize
else
if Devise.masqueraded_resource_class
Devise.masqueraded_resource_class
elsif defined?(User)
User
end
end
return unless klass
resource = GlobalID::Locator.locate_signed params[Devise.masquerade_param], for: 'masquerade'
if resource
masquerade_sign_in(resource)
end
end
def masquerade_#{name}!
return if params["#{Devise.masquerade_param}"].blank?
resource = GlobalID::Locator.locate_signed params[Devise.masquerade_param], for: 'masquerade'
if resource
masquerade_sign_in(resource)
end
end
def #{name}_masquerade?
return false if current_#{name}.blank?
return false if session[#{name}_helper_session_key].blank?
::Rails.cache.exist?(#{name}_helper_session_key).present?
end
def #{name}_masquerade_owner
return unless send(:#{name}_masquerade?)
sgid = ::Rails.cache.read(#{name}_helper_session_key)
GlobalID::Locator.locate_signed(sgid, for: 'masquerade')
end
private
def #{name}_helper_session_key
["devise_masquerade_#{name}", current_#{name}.to_param, #{name}_helper_masquerading_resource_guid].join("_")
end
def #{name}_helper_masquerading_resource_guid
session["devise_masquerade_masquerading_resource_guid"].to_s
end
def masquerade_sign_in(resource)
if Devise.masquerade_bypass_warden_callback
if respond_to?(:bypass_sign_in)
bypass_sign_in(resource)
else
sign_in(resource, bypass: true)
end
else
sign_in(resource)
end
end
METHODS
ActiveSupport.on_load(:action_controller) do
if respond_to?(:helper_method)
helper_method "#{name}_masquerade?"
helper_method "#{name}_masquerade_owner"
end
end
end
|