basica

Basic authentication library.

Description

Include the Basica module in your application, then call it by passing the env hash (should be available in every Rack based application) and a block. If the env hash contains the HTTP_AUTHORIZATION header, then the username and password will be passed to the block.

The result of the method call to basic_auth will be that of the block. If the HTTP_AUTHORIZATION header is not found, a RuntimeError is raised.

Example

First, an example of Basica in the wild:

require "basica"

include Basica

header = "Basic %s" % Base64.encode64("foo:bar")

env = { "HTTP_AUTHORIZATION" => header }

result = basic_auth(env) do |user, pass|
  user == "foo" && pass == "bar"
end

if result
  # The right credentials were provided.
end

Now an example of how to use it with Cuba and Shield:

Cuba.plugin Basica

Cuba.define do
  basic_auth(env) do |user, pass|
    (User, user, pass)
  end

  on authenticated(User) do
    run Users
  end

  on default do
    res.status = 401
    res.headers["WWW-Authenticate"] = 'Basic realm="MyApp"'
    res.write "Unauthorized"
  end
end

Note that the previous example assumes you have already required Cuba, Shield, Basica, and that you have a User model defined.

Installation

Install it using rubygems.

$ gem install basica