plugins/remote_user/lib/remote_user_plugin.rb
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_action",
method_name: "remote_user_authentication",
options: {},
block: block
}]
end
end