diff --git a/lib/bugsnag.rb b/lib/bugsnag.rb index b50dfdd10..0e0fd1fa6 100644 --- a/lib/bugsnag.rb +++ b/lib/bugsnag.rb @@ -18,6 +18,7 @@ require "bugsnag/middleware/rack_request" require "bugsnag/middleware/warden_user" +require "bugsnag/middleware/clearance_user" require "bugsnag/middleware/callbacks" require "bugsnag/middleware/rails3_request" require "bugsnag/middleware/sidekiq" diff --git a/lib/bugsnag/middleware/clearance_user.rb b/lib/bugsnag/middleware/clearance_user.rb new file mode 100644 index 000000000..bb22d18f0 --- /dev/null +++ b/lib/bugsnag/middleware/clearance_user.rb @@ -0,0 +1,31 @@ +module Bugsnag::Middleware + class ClearanceUser + COMMON_USER_FIELDS = [:email, :name, :first_name, :last_name, :created_at, :id] + + def initialize(bugsnag) + @bugsnag = bugsnag + end + + def call(notification) + if notification.request_data[:rack_env] && + notification.request_data[:rack_env]["clearance"] && + notification.request_data[:rack_env]["clearance"].signed_in? && + notification.request_data[:rack_env]["clearance"].current_user + + # Extract useful user information + user = {} + user_object = notification.request_data[:rack_env]["clearance"].current_user + if user_object + # Build the bugsnag user info from the current user record + COMMON_USER_FIELDS.each do |field| + user[field] = user_object.send(field) if user_object.respond_to?(field) + end + end + + notification.user = user unless user.empty? + end + + @bugsnag.call(notification) + end + end +end diff --git a/lib/bugsnag/rack.rb b/lib/bugsnag/rack.rb index c151eac74..9bbff13fe 100644 --- a/lib/bugsnag/rack.rb +++ b/lib/bugsnag/rack.rb @@ -20,6 +20,7 @@ def initialize(app) # Hook up rack-based notification middlewares config.middleware.insert_before([Bugsnag::Middleware::Rails3Request,Bugsnag::Middleware::Callbacks], Bugsnag::Middleware::RackRequest) if defined?(::Rack) config.middleware.insert_before(Bugsnag::Middleware::Callbacks, Bugsnag::Middleware::WardenUser) if defined?(Warden) + config.middleware.insert_before(Bugsnag::Middleware::Callbacks, Bugsnag::Middleware::ClearanceUser) if defined?(Clearance) Bugsnag.configuration.app_type ||= "rack" end