1
0
Fork 0
mirror of https://github.com/heartcombo/devise.git synced 2022-11-09 12:18:31 -05:00

Tidying up encryptors.

This commit is contained in:
José Valim 2009-11-10 18:55:13 -02:00
parent 51f633325e
commit 6d09eb66cf
11 changed files with 55 additions and 26 deletions

View file

@ -1,6 +1,6 @@
* enhancements
* Moved encryption strategy into the Encryptors module to allow several algorithms
* Implemented encryptors for Clearance, Authlogic and Restful-Authentication
* Moved encryption strategy into the Encryptors module to allow several algorithms (by github.com/mhfs)
* Implemented encryptors for Clearance, Authlogic and Restful-Authentication (by github.com/mhfs)
== 0.4.3

View file

@ -27,7 +27,7 @@ All gems are on gemcutter, so you need to add gemcutter to your sources if you h
sudo gem sources -a http://gemcutter.org/
Install warden gem if you don't have it installed (requires 0.5.1 or higher):
Install warden gem if you don't have it installed (requires 0.5.2 or higher):
sudo gem install warden
@ -236,6 +236,12 @@ Devise implements encryption strategies for Clearance, Authlogic and Restful-Aut
Please refer to TODO file.
== Contributors
* José Valim (http://github.com/josevalim)
* Carlos Antônio da Silva (http://github.com/carlosantoniodasilva)
* Marcelo Silveira (http://github.com/mhfs)
== Bugs and Feedback
If you discover any bugs or want to drop a line, feel free to create an issue on

3
TODO
View file

@ -3,6 +3,3 @@
* Use request_ip in session cookies
* Devise::BruteForceProtection
* Devise::MagicColumns
* Improve Generators to pass modules as arguments
* Different cryptography providers
* Devise::Invitable

View file

@ -18,7 +18,7 @@ class ConfirmationsController < ApplicationController
end
end
# GET /resource/confirmation?perishable_token=abcdef
# GET /resource/confirmation?confirmation_token=abcdef
def show
self.resource = resource_class.confirm!(:confirmation_token => params[:confirmation_token])

View file

@ -20,7 +20,7 @@ class PasswordsController < ApplicationController
end
end
# GET /resource/password/edit?perishable_token=abcdef
# GET /resource/password/edit?reset_password_token=abcdef
def edit
self.resource = resource_class.new
resource.reset_password_token = params[:reset_password_token]

View file

@ -1,7 +1,7 @@
class DeviseCreate<%= table_name.camelize %> < ActiveRecord::Migration
def self.up
create_table(:<%= table_name %>) do |t|
t.authenticatable
t.authenticatable :encryptor => :sha1
t.confirmable
t.recoverable
t.rememberable

View file

@ -8,15 +8,12 @@ Devise.setup do |config|
# Configure how many times you want the password is reencrypted. Default is 10.
# config.stretches = 10
# Define what will be the encryption algorithm. Sha1 is the default.
# Supported encryptions:
# ::Devise::Encryptors::Sha1
# ::Devise::Encryptors::Sha512
# ::Devise::Encryptors::ClearanceSha1
# ::Devise::Encryptors::AuthlogicSha512 (Should set stretches to 20 for default behavior)
# ::Devise::Encryptors::RestfulAuthenticationSha1 (Should set stretches to 10 and copy REST_AUTH_SITE_KEY to pepper
# for default behavior)
# config.encryptor = ::Devise::Encryptors::Sha1
# Define which will be the encryption algorithm. Supported algorithms are :sha1
# (default) and :sha512. Devise also supports encryptors from others authentication
# frameworks as :clearance_sha1, :authlogic_sha512 (then you should set stretches
# above to 20 for default behavior) and :restful_authentication_sha1 (then you
# should set stretches to 10, and copy REST_AUTH_SITE_KEY to pepper)
# config.encryptor = :sha1
# The time you want give to your user to confirm his account. During this time
# he will be able to access your application without confirming. Default is nil.

View file

@ -18,14 +18,19 @@ module Devise
:unconfirmed => :failure
}
# Declare encryptors length which are used in migrations.
ENCRYPTORS_LENGTH = {
:sha1 => 40,
:sha512 => 128,
:clearance_sha1 => 40,
:restful_authentication_sha1 => 40,
:authlogic_sha512 => 128
}
# Used to encrypt password. Please generate one with rake secret
mattr_accessor :pepper
@@pepper = nil
# Used to define the password encryption algorithm
mattr_accessor :encryptor
@@encryptor = ::Devise::Encryptors::Sha1
# The number of times to encrypt password.
mattr_accessor :stretches
@@stretches = 10
@ -38,6 +43,17 @@ module Devise
mattr_accessor :confirm_within
@@confirm_within = 0.days
# Used to define the password encryption algorithm.
def self.encryptor=(value)
@@encryptor = if value.is_a?(Symbol)
::Devise::Encryptors.const_get(value.to_s.classify)
else
value
end
end
mattr_reader :encryptor
@@encryptor = ::Devise::Encryptors::Sha1
# Store scopes mappings.
mattr_accessor :mappings
@@mappings = {}

View file

@ -1,4 +1,4 @@
require 'digest/sha1'
require "digest/sha1"
module Devise
# Implements a way of adding different encryptions.

View file

@ -19,11 +19,17 @@ module Devise
# Creates email, encrypted_password and password_salt.
#
# == Options
# * :null when true, allow columns to be null
# * :encryptor The encryptor going to be used, necessary for setting the proper encrypter password length
#
def authenticatable(options={})
null = options[:null] || false
string :email, :limit => 100, :null => null
string :encrypted_password, :limit => 128, :null => null
string :password_salt, :limit => 20, :null => null
encryptor = options[:encryptor] || :sha1
string :email, :null => null, :limit => 100
string :encrypted_password, :null => null, :limit => Devise::ENCRYPTORS_LENGTH[encryptor]
string :password_salt, :null => null, :limit => 20
end
# Creates confirmation_token, confirmed_at and confirmation_sent_at.

View file

@ -18,4 +18,11 @@ class Encryptors < ActiveSupport::TestCase
assert_equal clearance, encryptor
end
Devise::ENCRYPTORS_LENGTH.each do |key, value|
test "should have length #{value} for #{key.inspect}" do
swap Devise, :encryptor => key do
assert_equal value, Devise.encryptor.digest('a', 2, 'b', 'c').size
end
end
end
end