README.md
# Persona is Shutting Down
Mozilla has announced that Persona will be [shutting down](https://wiki.mozilla.org/Identity/Persona_Shutdown_Guidelines_for_Reliers) November 2016. warden-browserid relies on the Persona service and will stop functioning properly once Persona is shut down. While it is possible to self-host Persona and configure warden-browserid to rely on your own instance, this is difficult and not recommended. See the wiki page linked above for recommended alternatives to Persona for authentication.
# A Rack BrowserID Provider
Become a Mozilla BrowserID Primary Identity Provider.
This is a Rack middleware for providing the BrowserID Primary Identity
service. I have so far tested this only with Ruby on Rails.
[![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/ringe/browserid-provider)
[![Build Status](https://secure.travis-ci.org/ringe/browserid-provider.png)](http://travis-ci.org/ringe/browserid-provider)
## Installation
Add this line to your application's Gemfile:
gem 'browserid-provider'
And then execute:
$ bundle
Or install it yourself as:
$ gem install browserid-provider
## Usage
In you Rails app config/application.rb, add:
```ruby
config.middleware.use BrowserID::Provider, :server_name => "example.org", :delegates => ["example.com"]
```
The default setup relies on Warden to see which user is logged in. This
can easily be customized to fit any middleware function.
The available configuration options are the following:
* authentication_path
Where to redirect users for login
defaults to: "/users/sign_in" (Devise default)
* provision_path
What HTTP path to deliver provisioning from
defaults to: "/browserid/provision"
* certify_path
What HTTP path to deliver certifying from
defaults to: "/browserid/certify"
* whoami_path
What HTTP path to serve user credentials at
defaults to: "/browserid/whoami"
* jquery_path
What HTTP path JQuery is served at
defaults to: "/assets/jquery.js"
* whoami
Name of the middleware to get the current user object from (:user must respond to :email method)
This middleware will be called as follows: env['warden'].user.email
defaults to: "warden"
* private_key_path
Where is the BrowserID OpenSSL private key located
defaults to: "config/browserid_provider.pem"
* The "/.well-known/browserid" path is required from the BrowserID spec and used here.
* browserid_url
Which BrowserID server to use, ca be one of the following:
* login.dev.anosrep.org for development (default)
* login.anosrep.org for beta
* login.persona.org for production
* server_name
The domain name we are providing BrowserID for (default to example.org)
* delegates
An array of strings representing [authority delegates] [1]
[1]: https://wiki.mozilla.org/Identity/BrowserID#BrowserID_Delegated_Support_Document "Mozilla Identity Wiki"
The client side is JavaScript enabled. For Rails use:
```erb
<%= browserid_authentication_tag %>
<!-- Enable BrowserID authentication API on the form #new_user -->
<%= enable_browserid_javascript_tag "new_user" %>
```
In your login form, add a cancel button like this:
```erb
<%= button_to_function "Cancel", "navigator.id.cancelAuthentication()" %>
```
Without Rails view helpers (in any framework), you can do:
```javascript
$('form#new_user').bind('ajax:success', function(data, status, xhr) { navigator.id.completeAuthentication() })
```
## Contributing
1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Added some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request