Class: OPDO_EPFL_Middleware::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/opdo_epfl_spymiddleware/middleware.rb

Constant Summary collapse

PATHSKIP_RE =
%r{/(rails/|assets|path_to_skip)}

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ Middleware

Returns a new instance of Middleware.



8
9
10
11
12
# File 'lib/opdo_epfl_spymiddleware/middleware.rb', line 8

def initialize(app)
  @app = app
  @file_logger = Logger.new('/tmp/opdo_epfl_spymiddleware.log')
  @file_logger.info("===> OPDo EPFL Spy is starting")
end

Instance Method Details

#call(env) ⇒ Object



14
15
16
17
18
# File 'lib/opdo_epfl_spymiddleware/middleware.rb', line 14

def call(env)
  status, headers, response = @app.call(env)
  spy(env)
  [status, headers, response]
end

#spy(env) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/opdo_epfl_spymiddleware/middleware.rb', line 20

def spy(env)
  req = Rack::Request.new env
  return if req.path =~ PATHSKIP_RE

  route = Rails.application.routes.recognize_path(req.path)
  report = {
    'time' => Time.zone.now.strftime('%Y%m%d-%H%M-%s'),
    'user' => user(req),
    'path' => req.path,
    'params' => req.params,
    'route' => route,
  }
  @file_logger.debug("=== #{report.to_yaml}")
end

#user(req) ⇒ Object



35
36
37
38
# File 'lib/opdo_epfl_spymiddleware/middleware.rb', line 35

def user(req)
  u = req.env['warden'].user(:user)
  u.nil? ? "NO AUTH" : u.slice(:name, :email, :username).to_h
end