Class: Otto::Security::AuthenticationMiddleware
- Inherits:
-
Object
- Object
- Otto::Security::AuthenticationMiddleware
- Defined in:
- lib/otto/security/authentication.rb
Overview
Authentication middleware that enforces route-level auth requirements
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, config = {}) ⇒ AuthenticationMiddleware
constructor
A new instance of AuthenticationMiddleware.
Constructor Details
#initialize(app, config = {}) ⇒ AuthenticationMiddleware
Returns a new instance of AuthenticationMiddleware.
204 205 206 207 208 209 210 211 212 |
# File 'lib/otto/security/authentication.rb', line 204 def initialize(app, config = {}) @app = app @config = config @strategies = config[:auth_strategies] || {} @default_strategy = config[:default_auth_strategy] || 'publically' # Add default public strategy if not provided @strategies['publically'] ||= PublicStrategy.new end |
Instance Method Details
#call(env) ⇒ Object
214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 |
# File 'lib/otto/security/authentication.rb', line 214 def call(env) # Check if this route has auth requirements route_definition = env['otto.route_definition'] return @app.call(env) unless route_definition auth_requirement = route_definition.auth_requirement return @app.call(env) unless auth_requirement # Find appropriate strategy strategy = find_strategy(auth_requirement) unless strategy return auth_error_response("Unknown authentication strategy: #{auth_requirement}") end # Perform authentication auth_result = strategy.authenticate(env, auth_requirement) if auth_result.success? # Add user context to environment for handlers to use env['otto.user_context'] = auth_result.user_context env['otto.auth_result'] = auth_result @app.call(env) else auth_error_response(auth_result.failure_reason) end end |