Parent

Namespace

Included Modules

Files

Warden::Proxy

Attributes

config[R]

An accessor to the rack env hash, the proxy owner and its config :api: public

env[R]

An accessor to the rack env hash, the proxy owner and its config :api: public

manager[R]

An accessor to the rack env hash, the proxy owner and its config :api: public

winning_strategies[R]

An accessor to the rack env hash, the proxy owner and its config :api: public

winning_strategy[RW]

An accessor to the winning strategy :api: private

Public Instance Methods

asset_request?() click to toggle source

Check to see if this is an asset request :api: public

# File lib/warden/proxy.rb, line 297
def asset_request?
  ::Warden::asset_paths.any? { |r| env['PATH_INFO'].to_s.match(r) }
end
authenticate(*args) click to toggle source

Run the authentiation strategies for the given strategies. If there is already a user logged in for a given scope, the strategies are not run This does not halt the flow of control and is a passive attempt to authenticate only When scope is not specified, the default_scope is assumed.

Parameters:

args - a list of symbols (labels) that name the strategies to attempt
opts - an options hash that contains the :scope of the user to check

Example:

env['warden'].authenticate(:password, :basic, :scope => :sudo)

:api: public

# File lib/warden/proxy.rb, line 102
def authenticate(*args)
  user, opts = _perform_authentication(*args)
  user
end
authenticate!(*args) click to toggle source

The same as authenticate except on failure it will throw an :warden symbol causing the request to be halted and rendered through the failure_app

Example

env['warden'].authenticate!(:password, :scope => :publisher) # throws if it cannot authenticate

:api: public

# File lib/warden/proxy.rb, line 125
def authenticate!(*args)
  user, opts = _perform_authentication(*args)
  throw(:warden, opts) unless user
  user
end
authenticate?(*args) click to toggle source

Same API as authenticated, but returns a boolean instead of a user. The difference between this method (authenticate?) and authenticated? is that the former will run strategies if the user has not yet been authenticated, and the second relies on already performed ones. :api: public

# File lib/warden/proxy.rb, line 112
def authenticate?(*args)
  result = !!authenticate(*args)
  yield if result && block_given?
  result
end
authenticated?(scope = @config.default_scope) click to toggle source

Check to see if there is an authenticated user for the given scope. This brings the user from the session, but does not run strategies before doing so. If you want strategies to be run, please check authenticate?.

Parameters:

scope - the scope to check for authentication. Defaults to default_scope

Example:

env['warden'].authenticated?(:admin)

:api: public

# File lib/warden/proxy.rb, line 142
def authenticated?(scope = @config.default_scope)
  result = !!user(scope)
  yield if block_given? && result
  result
end
clear_strategies_cache!(*args) click to toggle source

Clear the cache of performed strategies so far. Warden runs each strategy just once during the request lifecycle. You can clear the strategies cache if you want to allow a strategy to be run more than once.

This method has the same API as authenticate, allowing you to clear specific strategies for given scope:

Parameters:

args - a list of symbols (labels) that name the strategies to attempt
opts - an options hash that contains the :scope of the user to check

Example:

# Clear all strategies for the configured default_scope
env['warden'].clear_strategies_cache!

# Clear all strategies for the :admin scope
env['warden'].clear_strategies_cache!(:scope => :admin)

# Clear password strategy for the :admin scope
env['warden'].clear_strategies_cache!(:password, :scope => :admin)

:api: public

# File lib/warden/proxy.rb, line 70
def clear_strategies_cache!(*args)
  scope, opts = _retrieve_scope_and_opts(args)

  @winning_strategies.delete(scope)
  @strategies[scope].each do |k, v|
    v.clear! if args.empty? || args.include?(k)
  end
end
custom_failure!() click to toggle source

Provides a way to return a 401 without warden defering to the failure app The result is a direct passthrough of your own response :api: public

# File lib/warden/proxy.rb, line 285
def custom_failure!
  @custom_failure = true
end
custom_failure?() click to toggle source

Check to see if the custom failure flag has been set :api: public

# File lib/warden/proxy.rb, line 291
def custom_failure?
  !!@custom_failure
end
errors() click to toggle source

Lazily initiate errors object in session. :api: public

# File lib/warden/proxy.rb, line 35
def errors
  @env[ENV_WARDEN_ERRORS] ||= Errors.new
end
inspect(*args) click to toggle source
# File lib/warden/proxy.rb, line 301
def inspect(*args)
  "Warden::Proxy:#{object_id} @config=#{@config.inspect}"
end
lock!() click to toggle source

Locks the proxy so new users cannot authenticate during the request lifecycle. This is useful when the request cannot be verified (for example, using a CSRF verification token). Notice that already authenticated users are kept as so.

:api: public

# File lib/warden/proxy.rb, line 85
def lock!
  @locked = true
end
logout(*scopes) click to toggle source

Provides logout functionality. The logout also manages any authenticated data storage and clears it when a user logs out.

Parameters:

scopes - a list of scopes to logout

Example:

# Logout everyone and clear the session
env['warden'].logout

# Logout the default user but leave the rest of the session alone
env['warden'].logout(:default)

# Logout the :publisher and :admin user
env['warden'].logout(:publisher, :admin)

:api: public

# File lib/warden/proxy.rb, line 253
def logout(*scopes)
  if scopes.empty?
    scopes = @users.keys
    reset_session = true
  end

  scopes.each do |scope|
    user = @users.delete(scope)
    manager._run_callbacks(:before_logout, user, self, :scope => scope)

    raw_session.delete("warden.user.#{scope}.session") unless raw_session.nil?
    session_serializer.delete(scope, user)
  end

  reset_session! if reset_session
end
message() click to toggle source

Proxy through to the authentication strategy to find out the message that was generated. :api: public

# File lib/warden/proxy.rb, line 278
def message
  winning_strategy && winning_strategy.message
end
session(scope = @config.default_scope) click to toggle source

Provides a scoped session data for authenticated users. Warden manages clearing out this data when a user logs out

Example

# default scope
env['warden'].session[:foo] = "bar"

# :sudo scope
env['warden'].session(:sudo)[:foo] = "bar"

:api: public

# File lib/warden/proxy.rb, line 231
def session(scope = @config.default_scope)
  raise NotAuthenticated, "#{scope.inspect} user is not logged in" unless authenticated?(scope)
  raw_session["warden.user.#{scope}.session"] ||= {}
end
session_serializer() click to toggle source

Points to a SessionSerializer instance responsible for handling everything related with storing, fetching and removing the user session. :api: public

# File lib/warden/proxy.rb, line 43
def session_serializer
  @session_serializer ||= Warden::SessionSerializer.new(@env)
end
set_user(user, opts = {}) click to toggle source

Manually set the user into the session and auth proxy

Parameters:

user - An object that has been setup to serialize into and out of the session.
opts - An options hash.  Use the :scope option to set the scope of the user, set the :store option to false to skip serializing into the session, set the :run_callbacks to false to skip running the callbacks (the default is true).

:api: public

# File lib/warden/proxy.rb, line 163
def set_user(user, opts = {})
  scope = (opts[:scope] ||= @config.default_scope)

  # Get the default options from the master configuration for the given scope
  opts = (@config[:scope_defaults][scope] || {}).merge(opts)
  opts[:event] ||= :set_user
  @users[scope] = user

  if opts[:store] != false && opts[:event] != :fetch
    options = env[ENV_SESSION_OPTIONS]
    options[:renew] = true if options
    session_serializer.store(user, scope)
  end

  run_callbacks = opts.fetch(:run_callbacks, true)
  manager._run_callbacks(:after_set_user, user, self, opts) if run_callbacks

  @users[scope]
end
to_s(*args) click to toggle source
# File lib/warden/proxy.rb, line 305
def to_s(*args)
  inspect(*args)
end
unauthenticated?(scope = @config.default_scope) click to toggle source

Same API as authenticated?, but returns false when authenticated. :api: public

# File lib/warden/proxy.rb, line 150
def unauthenticated?(scope = @config.default_scope)
  result = !authenticated?(scope)
  yield if block_given? && result
  result
end
user(argument = {}) click to toggle source

Provides acccess to the user object in a given scope for a request. Will be nil if not logged in. Please notice that this method does not perform strategies.

Example:

 # without scope (default user)
 env['warden'].user

 # with scope
 env['warden'].user(:admin)

 # as a Hash
 env['warden'].user(:scope => :admin)

 # with default scope and run_callbacks option
 env['warden'].user(:run_callbacks => false)

# with a scope and run_callbacks option
env['warden'].user(:scope => :admin, :run_callbacks => true)

:api: public

# File lib/warden/proxy.rb, line 204
def user(argument = {})
  opts  = argument.is_a?(Hash) ? argument : { :scope => argument }
  scope = (opts[:scope] ||= @config.default_scope)

  if @users.has_key?(scope)
    @users[scope]
  else
    unless user = session_serializer.fetch(scope)
      run_callbacks = opts.fetch(:run_callbacks, true)
      manager._run_callbacks(:after_failed_fetch, user, self, :scope => scope) if run_callbacks
    end

    @users[scope] = user ? set_user(user, opts.merge(:event => :fetch)) : nil
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.