remote_user_plugin.rb
1.91 KB
1
2
3
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
class RemoteUserPlugin < Noosfero::Plugin
def self.plugin_name
"Remote User Plugin"
end
def self.plugin_description
_("A plugin that add remote user support.")
end
def api_custom_login request
RemoteUserPlugin::current_user request, environment
end
def self.current_user request, environment
remote_user = request.env["HTTP_REMOTE_USER"]
user_data = request.env['HTTP_REMOTE_USER_DATA']
remote_user_email = user_data.blank? ? (remote_user + '@remote.user') : JSON.parse(user_data)['email']
remote_user_name = user_data.blank? ? remote_user : JSON.parse(user_data)['name']
user = User.where(environment_id: environment, login: remote_user).first
unless user
user = User.create!(:environment => environment, :login => remote_user, :email => remote_user_email, :name => remote_user_name, :password => ('pw4'+remote_user), :password_confirmation => ('pw4'+remote_user))
user.activate
user.save!
end
user
end
def application_controller_filters
block = proc do
begin
remote_user = request.headers["HTTP_REMOTE_USER"]
if remote_user.blank?
self.current_user = nil
else
if !logged_in?
self.current_user = RemoteUserPlugin::current_user request, environment
else
if remote_user != self.current_user.login
self.current_user.forget_me
reset_session
self.current_user = RemoteUserPlugin::current_user request, environment
end
end
end
rescue ::ActiveRecord::RecordInvalid
session[:notice] = _('Could not create the remote user.')
render_404
rescue
session[:notice] = _("Could not log in.")
render_404
end
end
[{
:type => "before_filter",
:method_name => "remote_user_authentication",
:options => { },
:block => block
}]
end
end