mirror of
https://github.com/heartcombo/devise.git
synced 2026-01-11 08:37:56 -05:00
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7e658a2abf | ||
|
|
0252f0e4a8 | ||
|
|
07e907ec26 | ||
|
|
e9ed3e2cb4 | ||
|
|
2fa6735462 | ||
|
|
b8cddc3cf3 | ||
|
|
1d57169c7b | ||
|
|
812c1de8e8 | ||
|
|
a0f266c584 | ||
|
|
ad99bfe6ef | ||
|
|
89931ed533 | ||
|
|
57fdae1e48 | ||
|
|
30e494580c | ||
|
|
048d05a553 | ||
|
|
8cbdeb54a5 | ||
|
|
14affc8a55 | ||
|
|
eb0f0b662f | ||
|
|
1516a0ae6d | ||
|
|
c92996646a | ||
|
|
ba5dd0a41a | ||
|
|
f63be5039a | ||
|
|
f25562fd4b | ||
|
|
2a2fd806a8 |
24
.travis.yml
24
.travis.yml
@@ -1,22 +1,23 @@
|
||||
language: ruby
|
||||
|
||||
rvm:
|
||||
- 2.3.0
|
||||
- 2.2.4
|
||||
- 2.1.8
|
||||
- 1.9.3
|
||||
- 2.0.0
|
||||
- 2.1
|
||||
- 2.2
|
||||
|
||||
gemfile:
|
||||
- Gemfile
|
||||
- gemfiles/Gemfile.rails-5.0-beta
|
||||
- gemfiles/Gemfile.rails-4.2-stable
|
||||
- gemfiles/Gemfile.rails-4.1-stable
|
||||
- gemfiles/Gemfile.rails-4.0-stable
|
||||
- gemfiles/Gemfile.rails-3.2-stable
|
||||
- Gemfile
|
||||
|
||||
matrix:
|
||||
exclude:
|
||||
- rvm: 2.1.8
|
||||
gemfile: gemfiles/Gemfile.rails-5.0-beta
|
||||
- env: DEVISE_ORM=mongoid
|
||||
gemfile: gemfiles/Gemfile.rails-5.0-beta
|
||||
- rvm: 2.2
|
||||
gemfile: gemfiles/Gemfile.rails-3.2-stable
|
||||
|
||||
services:
|
||||
- mongodb
|
||||
|
||||
@@ -26,19 +27,18 @@ cache: bundler
|
||||
|
||||
env:
|
||||
matrix:
|
||||
- DEVISE_ORM=active_record
|
||||
- DEVISE_ORM=mongoid
|
||||
- DEVISE_ORM=active_record
|
||||
|
||||
before_install: "rm ${BUNDLE_GEMFILE}.lock"
|
||||
|
||||
before_script: "bundle update"
|
||||
|
||||
script: "bin/test"
|
||||
script: "bundle exec rake test"
|
||||
|
||||
notifications:
|
||||
email: false
|
||||
slack:
|
||||
on_pull_requests: false
|
||||
on_success: change
|
||||
on_failure: always
|
||||
secure: Q3M+kmude3FjisibEeeGe0wSMXgvwLH+vL7Zrx9//q4QtkfnrQ/BBMvY9KXxPEsNF+eys4YopYjTkJ8uRmeboUATW/oQ4Jrv3+u3zkIHK2sFn/Q2cQWpK5w+CbgEnHPjKYnUu34b09njXTgDlr/mqtbPqrKeZ1dLlpKXCB/q4GY=
|
||||
|
||||
1263
CHANGELOG.md
1263
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
10
Gemfile
10
Gemfile
@@ -2,17 +2,17 @@ source "https://rubygems.org"
|
||||
|
||||
gemspec
|
||||
|
||||
gem "rails", "~> 4.2.6"
|
||||
gem "omniauth", "~> 1.3"
|
||||
gem "omniauth-oauth2", "~> 1.4"
|
||||
gem "rails", "4.2.2"
|
||||
gem "omniauth", "~> 1.2.0"
|
||||
gem "omniauth-oauth2", "~> 1.1.0"
|
||||
gem "rdoc"
|
||||
gem "mime-types", "~> 2.99"
|
||||
|
||||
group :test do
|
||||
gem "omniauth-facebook"
|
||||
gem "omniauth-openid", "~> 1.0.1"
|
||||
gem "webrat", "0.7.3", require: false
|
||||
gem "mocha", "~> 1.1", require: false
|
||||
gem 'test_after_commit', require: false
|
||||
end
|
||||
|
||||
platforms :jruby do
|
||||
@@ -26,5 +26,5 @@ platforms :ruby do
|
||||
end
|
||||
|
||||
group :mongoid do
|
||||
gem "mongoid", "~> 5.0"
|
||||
gem "mongoid", "~> 4.0"
|
||||
end
|
||||
|
||||
125
Gemfile.lock
125
Gemfile.lock
@@ -1,46 +1,47 @@
|
||||
PATH
|
||||
remote: .
|
||||
specs:
|
||||
devise (4.1.0)
|
||||
devise (3.5.9)
|
||||
bcrypt (~> 3.0)
|
||||
orm_adapter (~> 0.1)
|
||||
railties (>= 4.1.0, < 5.1)
|
||||
railties (>= 3.2.6, < 5)
|
||||
responders
|
||||
thread_safe (~> 0.1)
|
||||
warden (~> 1.2.3)
|
||||
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
actionmailer (4.2.6)
|
||||
actionpack (= 4.2.6)
|
||||
actionview (= 4.2.6)
|
||||
activejob (= 4.2.6)
|
||||
actionmailer (4.2.2)
|
||||
actionpack (= 4.2.2)
|
||||
actionview (= 4.2.2)
|
||||
activejob (= 4.2.2)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
actionpack (4.2.6)
|
||||
actionview (= 4.2.6)
|
||||
activesupport (= 4.2.6)
|
||||
actionpack (4.2.2)
|
||||
actionview (= 4.2.2)
|
||||
activesupport (= 4.2.2)
|
||||
rack (~> 1.6)
|
||||
rack-test (~> 0.6.2)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||
actionview (4.2.6)
|
||||
activesupport (= 4.2.6)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.1)
|
||||
actionview (4.2.2)
|
||||
activesupport (= 4.2.2)
|
||||
builder (~> 3.1)
|
||||
erubis (~> 2.7.0)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||
activejob (4.2.6)
|
||||
activesupport (= 4.2.6)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.1)
|
||||
activejob (4.2.2)
|
||||
activesupport (= 4.2.2)
|
||||
globalid (>= 0.3.0)
|
||||
activemodel (4.2.6)
|
||||
activesupport (= 4.2.6)
|
||||
activemodel (4.2.2)
|
||||
activesupport (= 4.2.2)
|
||||
builder (~> 3.1)
|
||||
activerecord (4.2.6)
|
||||
activemodel (= 4.2.6)
|
||||
activesupport (= 4.2.6)
|
||||
activerecord (4.2.2)
|
||||
activemodel (= 4.2.2)
|
||||
activesupport (= 4.2.2)
|
||||
arel (~> 6.0)
|
||||
activesupport (4.2.6)
|
||||
activesupport (4.2.2)
|
||||
i18n (~> 0.7)
|
||||
json (~> 1.7, >= 1.7.7)
|
||||
minitest (~> 5.1)
|
||||
@@ -48,9 +49,10 @@ GEM
|
||||
tzinfo (~> 1.1)
|
||||
arel (6.0.3)
|
||||
bcrypt (3.1.11)
|
||||
bson (4.0.0)
|
||||
bson (3.2.6)
|
||||
builder (3.2.2)
|
||||
concurrent-ruby (1.0.1)
|
||||
connection_pool (2.2.0)
|
||||
erubis (2.7.0)
|
||||
faraday (0.9.2)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
@@ -59,46 +61,51 @@ GEM
|
||||
hashie (3.4.3)
|
||||
i18n (0.7.0)
|
||||
json (1.8.3)
|
||||
jwt (1.5.1)
|
||||
jwt (1.5.4)
|
||||
loofah (2.0.3)
|
||||
nokogiri (>= 1.5.9)
|
||||
mail (2.6.3)
|
||||
mime-types (>= 1.16, < 3)
|
||||
mail (2.6.4)
|
||||
mime-types (>= 1.16, < 4)
|
||||
metaclass (0.0.4)
|
||||
mime-types (2.99.1)
|
||||
mini_portile2 (2.0.0)
|
||||
minitest (5.8.4)
|
||||
mocha (1.1.0)
|
||||
metaclass (~> 0.0.1)
|
||||
mongo (2.2.0)
|
||||
bson (~> 4.0)
|
||||
mongoid (5.0.1)
|
||||
mongoid (4.0.2)
|
||||
activemodel (~> 4.0)
|
||||
mongo (~> 2.1)
|
||||
moped (~> 2.0.0)
|
||||
origin (~> 2.1)
|
||||
tzinfo (>= 0.3.37)
|
||||
multi_json (1.11.2)
|
||||
moped (2.0.7)
|
||||
bson (~> 3.0)
|
||||
connection_pool (~> 2.0)
|
||||
optionable (~> 0.2.0)
|
||||
multi_json (1.11.3)
|
||||
multi_xml (0.5.5)
|
||||
multipart-post (2.0.0)
|
||||
nokogiri (1.6.7.2)
|
||||
mini_portile2 (~> 2.0.0.rc2)
|
||||
oauth2 (1.1.0)
|
||||
oauth2 (0.9.4)
|
||||
faraday (>= 0.8, < 0.10)
|
||||
jwt (~> 1.0, < 1.5.2)
|
||||
jwt (~> 1.0)
|
||||
multi_json (~> 1.3)
|
||||
multi_xml (~> 0.5)
|
||||
rack (>= 1.2, < 3)
|
||||
omniauth (1.3.1)
|
||||
rack (~> 1.2)
|
||||
omniauth (1.2.2)
|
||||
hashie (>= 1.2, < 4)
|
||||
rack (>= 1.0, < 3)
|
||||
omniauth-facebook (3.0.0)
|
||||
omniauth-oauth2 (~> 1.2)
|
||||
omniauth-oauth2 (1.4.0)
|
||||
oauth2 (~> 1.0)
|
||||
rack (~> 1.0)
|
||||
omniauth-facebook (1.6.0)
|
||||
omniauth-oauth2 (~> 1.1)
|
||||
omniauth-oauth2 (1.1.2)
|
||||
faraday (>= 0.8, < 0.10)
|
||||
multi_json (~> 1.3)
|
||||
oauth2 (~> 0.9.3)
|
||||
omniauth (~> 1.2)
|
||||
omniauth-openid (1.0.1)
|
||||
omniauth (~> 1.0)
|
||||
rack-openid (~> 1.3.1)
|
||||
optionable (0.2.0)
|
||||
origin (2.2.0)
|
||||
orm_adapter (0.5.0)
|
||||
rack (1.6.4)
|
||||
@@ -107,16 +114,16 @@ GEM
|
||||
ruby-openid (>= 2.1.8)
|
||||
rack-test (0.6.3)
|
||||
rack (>= 1.0)
|
||||
rails (4.2.6)
|
||||
actionmailer (= 4.2.6)
|
||||
actionpack (= 4.2.6)
|
||||
actionview (= 4.2.6)
|
||||
activejob (= 4.2.6)
|
||||
activemodel (= 4.2.6)
|
||||
activerecord (= 4.2.6)
|
||||
activesupport (= 4.2.6)
|
||||
rails (4.2.2)
|
||||
actionmailer (= 4.2.2)
|
||||
actionpack (= 4.2.2)
|
||||
actionview (= 4.2.2)
|
||||
activejob (= 4.2.2)
|
||||
activemodel (= 4.2.2)
|
||||
activerecord (= 4.2.2)
|
||||
activesupport (= 4.2.2)
|
||||
bundler (>= 1.3.0, < 2.0)
|
||||
railties (= 4.2.6)
|
||||
railties (= 4.2.2)
|
||||
sprockets-rails
|
||||
rails-deprecated_sanitizer (1.0.3)
|
||||
activesupport (>= 4.2.0.alpha)
|
||||
@@ -126,18 +133,18 @@ GEM
|
||||
rails-deprecated_sanitizer (>= 1.0.1)
|
||||
rails-html-sanitizer (1.0.3)
|
||||
loofah (~> 2.0)
|
||||
railties (4.2.6)
|
||||
actionpack (= 4.2.6)
|
||||
activesupport (= 4.2.6)
|
||||
railties (4.2.2)
|
||||
actionpack (= 4.2.2)
|
||||
activesupport (= 4.2.2)
|
||||
rake (>= 0.8.7)
|
||||
thor (>= 0.18.1, < 2.0)
|
||||
rake (11.0.1)
|
||||
rake (11.1.2)
|
||||
rdoc (4.2.2)
|
||||
json (~> 1.4)
|
||||
responders (2.2.0)
|
||||
railties (>= 4.2.0, < 5.1)
|
||||
ruby-openid (2.7.0)
|
||||
sprockets (3.5.2)
|
||||
sprockets (3.6.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
rack (> 1, < 3)
|
||||
sprockets-rails (3.0.4)
|
||||
@@ -145,8 +152,6 @@ GEM
|
||||
activesupport (>= 4.0)
|
||||
sprockets (>= 3.0.0)
|
||||
sqlite3 (1.3.11)
|
||||
test_after_commit (1.0.0)
|
||||
activerecord (>= 3.2)
|
||||
thor (0.19.1)
|
||||
thread_safe (0.3.5)
|
||||
tzinfo (1.2.2)
|
||||
@@ -166,16 +171,16 @@ DEPENDENCIES
|
||||
activerecord-jdbcsqlite3-adapter
|
||||
devise!
|
||||
jruby-openssl
|
||||
mime-types (~> 2.99)
|
||||
mocha (~> 1.1)
|
||||
mongoid (~> 5.0)
|
||||
omniauth (~> 1.3)
|
||||
mongoid (~> 4.0)
|
||||
omniauth (~> 1.2.0)
|
||||
omniauth-facebook
|
||||
omniauth-oauth2 (~> 1.4)
|
||||
omniauth-oauth2 (~> 1.1.0)
|
||||
omniauth-openid (~> 1.0.1)
|
||||
rails (~> 4.2.6)
|
||||
rails (= 4.2.2)
|
||||
rdoc
|
||||
sqlite3
|
||||
test_after_commit
|
||||
webrat (= 0.7.3)
|
||||
|
||||
BUNDLED WITH
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Copyright 2009-2016 Plataformatec. http://plataformatec.com.br
|
||||
Copyright 2009-2015 Plataformatec. http://plataformatec.com.br
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
|
||||
45
README.md
45
README.md
@@ -4,6 +4,7 @@ By [Plataformatec](http://plataformatec.com.br/).
|
||||
|
||||
[](http://travis-ci.org/plataformatec/devise)
|
||||
[](https://codeclimate.com/github/plataformatec/devise)
|
||||
[](https://hakiri.io/github/plataformatec/devise/master)
|
||||
|
||||
This README is [also available in a friendly navigable format](http://devise.plataformatec.com.br/).
|
||||
|
||||
@@ -16,7 +17,7 @@ Devise is a flexible authentication solution for Rails based on Warden. It:
|
||||
|
||||
It's composed of 10 modules:
|
||||
|
||||
* [Database Authenticatable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/DatabaseAuthenticatable): hashes and stores a password in the database to validate the authenticity of a user while signing in. The authentication can be done both through POST requests or HTTP Basic Authentication.
|
||||
* [Database Authenticatable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/DatabaseAuthenticatable): encrypts and stores a password in the database to validate the authenticity of a user while signing in. The authentication can be done both through POST requests or HTTP Basic Authentication.
|
||||
* [Omniauthable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Omniauthable): adds OmniAuth (https://github.com/intridea/omniauth) support.
|
||||
* [Confirmable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Confirmable): sends emails with confirmation instructions and verifies whether an account is already confirmed during sign in.
|
||||
* [Recoverable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Recoverable): resets the user password and sends reset instructions.
|
||||
@@ -27,6 +28,8 @@ It's composed of 10 modules:
|
||||
* [Validatable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Validatable): provides validations of email and password. It's optional and can be customized, so you're able to define your own validations.
|
||||
* [Lockable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Lockable): locks an account after a specified number of failed sign-in attempts. Can unlock via email or after a specified time period.
|
||||
|
||||
Devise is guaranteed to be thread-safe on YARV. Thread-safety support on JRuby is in progress.
|
||||
|
||||
## Information
|
||||
|
||||
### The Devise wiki
|
||||
@@ -89,7 +92,7 @@ Once you have solidified your understanding of Rails and authentication mechanis
|
||||
|
||||
## Getting started
|
||||
|
||||
Devise 4.0 works with Rails 4.2 onwards. You can add it to your Gemfile with:
|
||||
Devise 3.0 works with Rails 3.2 onwards. You can add it to your Gemfile with:
|
||||
|
||||
```ruby
|
||||
gem 'devise'
|
||||
@@ -109,7 +112,7 @@ The generator will install an initializer which describes ALL of Devise's config
|
||||
rails generate devise MODEL
|
||||
```
|
||||
|
||||
Replace MODEL with the class name used for the application’s users (it’s frequently `User` but could also be `Admin`). This will create a model (if one does not exist) and configure it with the default Devise modules. The generator also configures your `config/routes.rb` file to point to the Devise controller.
|
||||
Replace MODEL with the class name used for the application’s users (it’s frequently `User` but could also be `Admin`). This will create a model (if one does not exist) and configure it with default Devise modules. The generator also configures your `config/routes.rb` file to point to the Devise controller.
|
||||
|
||||
Next, check the MODEL for any additional configuration options you might want to add, such as confirmable or lockable. If you add an option, be sure to inspect the migration file (created by the generator if your ORM supports them) and uncomment the appropriate section. For example, if you add the confirmable option in the model, you'll need to uncomment the Confirmable section in the migration. Then run `rake db:migrate`
|
||||
|
||||
@@ -129,8 +132,6 @@ Devise will create some helpers to use inside your controllers and views. To set
|
||||
before_action :authenticate_user!
|
||||
```
|
||||
|
||||
For Rails 5, note that `protect_from_forgery` is no longer prepended to the `before_action` chain, so if you have set `authenticate_user` before `protect_from_forgery`, your request will result in "Can't verify CSRF token authenticity." To resolve this, either change the order in which you call them, or use `protect_from_forgery prepend: true`.
|
||||
|
||||
If your devise model is something other than User, replace "_user" with "_yourmodel". The same logic applies to the instructions below.
|
||||
|
||||
To verify if a user is signed in, use the following helper:
|
||||
@@ -173,7 +174,7 @@ member_session
|
||||
|
||||
### Configuring Models
|
||||
|
||||
The Devise method in your models also accepts some options to configure its modules. For example, you can choose the cost of the hashing algorithm with:
|
||||
The Devise method in your models also accepts some options to configure its modules. For example, you can choose the cost of the encryption algorithm with:
|
||||
|
||||
```ruby
|
||||
devise :database_authenticatable, :registerable, :confirmable, :recoverable, stretches: 20
|
||||
@@ -183,13 +184,9 @@ Besides `:stretches`, you can define `:pepper`, `:encryptor`, `:confirm_within`,
|
||||
|
||||
### Strong Parameters
|
||||
|
||||

|
||||
|
||||
*For previous Devise versions see https://github.com/plataformatec/devise/tree/3-stable#strong-parameters*
|
||||
|
||||
When you customize your own views, you may end up adding new attributes to forms. Rails 4 moved the parameter sanitization from the model to the controller, causing Devise to handle this concern at the controller as well.
|
||||
|
||||
There are just three actions in Devise that allow any set of parameters to be passed down to the model, therefore requiring sanitization. Their names and default permitted parameters are:
|
||||
There are just three actions in Devise that allow any set of parameters to be passed down to the model, therefore requiring sanitization. Their names and the permitted parameters by default are:
|
||||
|
||||
* `sign_in` (`Devise::SessionsController#create`) - Permits only the authentication keys (like `email`)
|
||||
* `sign_up` (`Devise::RegistrationsController#create`) - Permits authentication keys plus `password` and `password_confirmation`
|
||||
@@ -204,7 +201,7 @@ class ApplicationController < ActionController::Base
|
||||
protected
|
||||
|
||||
def configure_permitted_parameters
|
||||
devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
|
||||
devise_parameter_sanitizer.for(:sign_up) << :username
|
||||
end
|
||||
end
|
||||
```
|
||||
@@ -215,9 +212,7 @@ To permit simple scalar values for username and email, use this
|
||||
|
||||
```ruby
|
||||
def configure_permitted_parameters
|
||||
devise_parameter_sanitizer.permit(:sign_in) do |user_params|
|
||||
user_params.permit(:username, :email)
|
||||
end
|
||||
devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username, :email) }
|
||||
end
|
||||
```
|
||||
|
||||
@@ -225,9 +220,7 @@ If you have some checkboxes that express the roles a user may take on registrati
|
||||
|
||||
```ruby
|
||||
def configure_permitted_parameters
|
||||
devise_parameter_sanitizer.permit(:sign_up) do |user_params|
|
||||
user_params.permit({ roles: [] }, :email, :password, :password_confirmation)
|
||||
end
|
||||
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit({ roles: [] }, :email, :password, :password_confirmation) }
|
||||
end
|
||||
```
|
||||
For the list of permitted scalars, and how to declare permitted keys in nested hashes and arrays, see
|
||||
@@ -238,9 +231,8 @@ If you have multiple Devise models, you may want to set up a different parameter
|
||||
|
||||
```ruby
|
||||
class User::ParameterSanitizer < Devise::ParameterSanitizer
|
||||
def initialize(*)
|
||||
super
|
||||
permit(:sign_up, keys: [:username, :email])
|
||||
def sign_in
|
||||
default_params.permit(:username, :email)
|
||||
end
|
||||
end
|
||||
```
|
||||
@@ -355,7 +347,7 @@ Devise also ships with default routes. If you need to customize them, you should
|
||||
devise_for :users, path: "auth", path_names: { sign_in: 'login', sign_out: 'logout', password: 'secret', confirmation: 'verification', unlock: 'unblock', registration: 'register', sign_up: 'cmon_let_me_in' }
|
||||
```
|
||||
|
||||
Be sure to check `devise_for` [documentation](http://www.rubydoc.info/github/plataformatec/devise/master/ActionDispatch/Routing/Mapper%3Adevise_for) for details.
|
||||
Be sure to check `devise_for` documentation for details.
|
||||
|
||||
If you have the need for more deep customization, for instance to also allow "/sign_in" besides "/users/sign_in", all you need to do is create your routes normally and wrap them in a `devise_scope` block in the router:
|
||||
|
||||
@@ -411,7 +403,7 @@ Caution: Devise Controllers inherit from ApplicationController. If your app uses
|
||||
|
||||
### Test helpers
|
||||
|
||||
Devise includes some test helpers for functional specs. In order to use them, you need to include Devise in your functional tests by adding the following to the bottom of your `test/test_helper.rb` file (make sure you place it out of scope of `ActiveSupport::TestCase` which is the default class inside of `test/test_helper.rb`):
|
||||
Devise includes some test helpers for functional specs. In order to use them, you need to include Devise in your functional tests by adding the following to the bottom of your `test/test_helper.rb` file:
|
||||
|
||||
```ruby
|
||||
class ActionController::TestCase
|
||||
@@ -424,7 +416,6 @@ If you're using RSpec, you can put the following inside a file named `spec/suppo
|
||||
```ruby
|
||||
RSpec.configure do |config|
|
||||
config.include Devise::TestHelpers, type: :controller
|
||||
config.include Devise::TestHelpers, type: :view
|
||||
end
|
||||
```
|
||||
|
||||
@@ -442,7 +433,7 @@ sign_out @user # sign_out(resource)
|
||||
|
||||
There are two things that are important to keep in mind:
|
||||
|
||||
1. These helpers are not going to work for integration tests driven by Capybara or Webrat. They are meant to be used with functional tests only. It is undesirable even to include `Devise::TestHelpers` during integration tests. Instead, fill in the form or explicitly set the user in session;
|
||||
1. These helpers are not going to work for integration tests driven by Capybara or Webrat. They are meant to be used with functional tests only. Instead, fill in the form or explicitly set the user in session;
|
||||
|
||||
2. If you are testing Devise internal controllers or a controller that inherits from Devise's, you need to tell Devise which mapping should be used before a request. This is necessary because Devise gets this information from the router, but since functional tests do not pass through the router, it needs to be stated explicitly. For example, if you are testing the user scope, simply use:
|
||||
|
||||
@@ -486,7 +477,7 @@ devise :database_authenticatable, :timeoutable
|
||||
devise_for :admins
|
||||
|
||||
# Inside your protected controller
|
||||
before_action :authenticate_admin!
|
||||
before_filter :authenticate_admin!
|
||||
|
||||
# Inside your controllers and views
|
||||
admin_signed_in?
|
||||
@@ -554,6 +545,6 @@ https://github.com/plataformatec/devise/graphs/contributors
|
||||
|
||||
## License
|
||||
|
||||
MIT License. Copyright 2009-2016 Plataformatec. http://plataformatec.com.br
|
||||
MIT License. Copyright 2009-2015 Plataformatec. http://plataformatec.com.br
|
||||
|
||||
You are not granted rights or licenses to the trademarks of Plataformatec, including without limitation the Devise name or logo.
|
||||
|
||||
@@ -22,7 +22,7 @@ class Devise::ConfirmationsController < DeviseController
|
||||
yield resource if block_given?
|
||||
|
||||
if resource.errors.empty?
|
||||
set_flash_message!(:notice, :confirmed)
|
||||
set_flash_message(:notice, :confirmed) if is_flashing_format?
|
||||
respond_with_navigational(resource){ redirect_to after_confirmation_path_for(resource_name, resource) }
|
||||
else
|
||||
respond_with_navigational(resource.errors, status: :unprocessable_entity){ render :new }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
class Devise::OmniauthCallbacksController < DeviseController
|
||||
prepend_before_action { request.env["devise.skip_timeout"] = true }
|
||||
prepend_before_filter { request.env["devise.skip_timeout"] = true }
|
||||
|
||||
def passthru
|
||||
render status: 404, text: "Not found. Authentication passthru."
|
||||
@@ -13,14 +13,14 @@ class Devise::OmniauthCallbacksController < DeviseController
|
||||
protected
|
||||
|
||||
def failed_strategy
|
||||
request.respond_to?(:get_header) ? request.get_header("omniauth.error.strategy") : env["omniauth.error.strategy"]
|
||||
env["omniauth.error.strategy"]
|
||||
end
|
||||
|
||||
def failure_message
|
||||
exception = request.respond_to?(:get_header) ? request.get_header("omniauth.error") : env["omniauth.error"]
|
||||
exception = env["omniauth.error"]
|
||||
error = exception.error_reason if exception.respond_to?(:error_reason)
|
||||
error ||= exception.error if exception.respond_to?(:error)
|
||||
error ||= (request.respond_to?(:get_header) ? request.get_header("omniauth.error.type") : env["omniauth.error.type"]).to_s
|
||||
error ||= env["omniauth.error.type"].to_s
|
||||
error.to_s.humanize if error
|
||||
end
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
class Devise::PasswordsController < DeviseController
|
||||
prepend_before_action :require_no_authentication
|
||||
prepend_before_filter :require_no_authentication
|
||||
# Render the #edit only if coming from a reset password email link
|
||||
append_before_action :assert_reset_token_passed, only: :edit
|
||||
append_before_filter :assert_reset_token_passed, only: :edit
|
||||
|
||||
# GET /resource/password/new
|
||||
def new
|
||||
@@ -36,10 +36,10 @@ class Devise::PasswordsController < DeviseController
|
||||
resource.unlock_access! if unlockable?(resource)
|
||||
if Devise.sign_in_after_reset_password
|
||||
flash_message = resource.active_for_authentication? ? :updated : :updated_not_active
|
||||
set_flash_message!(:notice, flash_message)
|
||||
set_flash_message(:notice, flash_message) if is_flashing_format?
|
||||
sign_in(resource_name, resource)
|
||||
else
|
||||
set_flash_message!(:notice, :updated_not_active)
|
||||
set_flash_message(:notice, :updated_not_active) if is_flashing_format?
|
||||
end
|
||||
respond_with resource, location: after_resetting_password_path_for(resource)
|
||||
else
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
class Devise::RegistrationsController < DeviseController
|
||||
prepend_before_action :require_no_authentication, only: [:new, :create, :cancel]
|
||||
prepend_before_action :authenticate_scope!, only: [:edit, :update, :destroy]
|
||||
prepend_before_filter :require_no_authentication, only: [:new, :create, :cancel]
|
||||
prepend_before_filter :authenticate_scope!, only: [:edit, :update, :destroy]
|
||||
|
||||
# GET /resource/sign_up
|
||||
def new
|
||||
@@ -18,11 +18,11 @@ class Devise::RegistrationsController < DeviseController
|
||||
yield resource if block_given?
|
||||
if resource.persisted?
|
||||
if resource.active_for_authentication?
|
||||
set_flash_message! :notice, :signed_up
|
||||
set_flash_message :notice, :signed_up if is_flashing_format?
|
||||
sign_up(resource_name, resource)
|
||||
respond_with resource, location: after_sign_up_path_for(resource)
|
||||
else
|
||||
set_flash_message! :notice, :"signed_up_but_#{resource.inactive_message}"
|
||||
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format?
|
||||
expire_data_after_sign_in!
|
||||
respond_with resource, location: after_inactive_sign_up_path_for(resource)
|
||||
end
|
||||
@@ -65,7 +65,7 @@ class Devise::RegistrationsController < DeviseController
|
||||
def destroy
|
||||
resource.destroy
|
||||
Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
|
||||
set_flash_message! :notice, :destroyed
|
||||
set_flash_message :notice, :destroyed if is_flashing_format?
|
||||
yield resource if block_given?
|
||||
respond_with_navigational(resource){ redirect_to after_sign_out_path_for(resource_name) }
|
||||
end
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
class Devise::SessionsController < DeviseController
|
||||
prepend_before_action :require_no_authentication, only: [:new, :create]
|
||||
prepend_before_action :allow_params_authentication!, only: :create
|
||||
prepend_before_action :verify_signed_out_user, only: :destroy
|
||||
prepend_before_action only: [:create, :destroy] { request.env["devise.skip_timeout"] = true }
|
||||
prepend_before_filter :require_no_authentication, only: [:new, :create]
|
||||
prepend_before_filter :allow_params_authentication!, only: :create
|
||||
prepend_before_filter :verify_signed_out_user, only: :destroy
|
||||
prepend_before_filter only: [:create, :destroy] { request.env["devise.skip_timeout"] = true }
|
||||
|
||||
# GET /resource/sign_in
|
||||
def new
|
||||
@@ -15,7 +15,7 @@ class Devise::SessionsController < DeviseController
|
||||
# POST /resource/sign_in
|
||||
def create
|
||||
self.resource = warden.authenticate!(auth_options)
|
||||
set_flash_message!(:notice, :signed_in)
|
||||
set_flash_message(:notice, :signed_in) if is_flashing_format?
|
||||
sign_in(resource_name, resource)
|
||||
yield resource if block_given?
|
||||
respond_with resource, location: after_sign_in_path_for(resource)
|
||||
@@ -24,7 +24,7 @@ class Devise::SessionsController < DeviseController
|
||||
# DELETE /resource/sign_out
|
||||
def destroy
|
||||
signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
|
||||
set_flash_message! :notice, :signed_out if signed_out
|
||||
set_flash_message :notice, :signed_out if signed_out && is_flashing_format?
|
||||
yield if block_given?
|
||||
respond_to_on_destroy
|
||||
end
|
||||
@@ -58,7 +58,7 @@ class Devise::SessionsController < DeviseController
|
||||
# to the after_sign_out path.
|
||||
def verify_signed_out_user
|
||||
if all_signed_out?
|
||||
set_flash_message! :notice, :already_signed_out
|
||||
set_flash_message :notice, :already_signed_out if is_flashing_format?
|
||||
|
||||
respond_to_on_destroy
|
||||
end
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
class Devise::UnlocksController < DeviseController
|
||||
prepend_before_action :require_no_authentication
|
||||
prepend_before_filter :require_no_authentication
|
||||
|
||||
# GET /resource/unlock/new
|
||||
def new
|
||||
@@ -24,7 +24,7 @@ class Devise::UnlocksController < DeviseController
|
||||
yield resource if block_given?
|
||||
|
||||
if resource.errors.empty?
|
||||
set_flash_message! :notice, :unlocked
|
||||
set_flash_message :notice, :unlocked if is_flashing_format?
|
||||
respond_with_navigational(resource){ redirect_to after_unlock_path_for(resource) }
|
||||
else
|
||||
respond_with_navigational(resource.errors, status: :unprocessable_entity){ render :new }
|
||||
|
||||
@@ -2,17 +2,13 @@
|
||||
class DeviseController < Devise.parent_controller.constantize
|
||||
include Devise::Controllers::ScopedViews
|
||||
|
||||
if respond_to?(:helper)
|
||||
helper DeviseHelper
|
||||
end
|
||||
helper DeviseHelper
|
||||
|
||||
if respond_to?(:helper_method)
|
||||
helpers = %w(resource scope_name resource_name signed_in_resource
|
||||
resource_class resource_params devise_mapping)
|
||||
helper_method(*helpers)
|
||||
end
|
||||
helpers = %w(resource scope_name resource_name signed_in_resource
|
||||
resource_class resource_params devise_mapping)
|
||||
helper_method(*helpers)
|
||||
|
||||
prepend_before_action :assert_is_devise_resource!
|
||||
prepend_before_filter :assert_is_devise_resource!
|
||||
respond_to :html if mimes_for_respond_to.empty?
|
||||
|
||||
# Override prefixes to consider the scoped view.
|
||||
@@ -93,10 +89,10 @@ MESSAGE
|
||||
instance_variable_set(:"@#{resource_name}", new_resource)
|
||||
end
|
||||
|
||||
# Helper for use in before_actions where no authentication is required.
|
||||
# Helper for use in before_filters where no authentication is required.
|
||||
#
|
||||
# Example:
|
||||
# before_action :require_no_authentication, only: :new
|
||||
# before_filter :require_no_authentication, only: :new
|
||||
def require_no_authentication
|
||||
assert_is_devise_resource!
|
||||
return unless is_navigational_format?
|
||||
@@ -127,13 +123,13 @@ MESSAGE
|
||||
end
|
||||
|
||||
if notice
|
||||
set_flash_message! :notice, notice
|
||||
set_flash_message :notice, notice if is_flashing_format?
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
# Sets the flash message with :key, using I18n. By default you are able
|
||||
# to set up your messages using specific resource scope, and if no message is
|
||||
# to setup your messages using specific resource scope, and if no message is
|
||||
# found we look to the default scope. Set the "now" options key to a true
|
||||
# value to populate the flash.now hash in lieu of the default flash hash (so
|
||||
# the flash message will be available to the current action instead of the
|
||||
@@ -158,13 +154,6 @@ MESSAGE
|
||||
end
|
||||
end
|
||||
|
||||
# Sets flash message if is_flashing_format? equals true
|
||||
def set_flash_message!(key, kind, options = {})
|
||||
if is_flashing_format?
|
||||
set_flash_message(key, kind, options)
|
||||
end
|
||||
end
|
||||
|
||||
# Sets minimum password length to show to user
|
||||
def set_minimum_password_length
|
||||
if devise_mapping.validatable?
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
<div class="field">
|
||||
<%= f.label :email %><br />
|
||||
<%= f.email_field :email, autofocus: true, value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email) %>
|
||||
<%= f.email_field :email, autofocus: true, value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email) %>
|
||||
</div>
|
||||
|
||||
<div class="actions">
|
||||
|
||||
13
bin/test
13
bin/test
@@ -1,13 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
$: << File.expand_path(File.expand_path('../../test', __FILE__))
|
||||
|
||||
require 'bundler/setup'
|
||||
begin
|
||||
require 'rails/test_unit/minitest_plugin'
|
||||
rescue LoadError
|
||||
exec 'rake'
|
||||
end
|
||||
|
||||
Rails::TestUnitReporter.executable = 'bin/test'
|
||||
|
||||
exit Minitest.run(ARGV)
|
||||
@@ -16,11 +16,12 @@ Gem::Specification.new do |s|
|
||||
s.files = `git ls-files`.split("\n")
|
||||
s.test_files = `git ls-files -- test/*`.split("\n")
|
||||
s.require_paths = ["lib"]
|
||||
s.required_ruby_version = '>= 2.1.0'
|
||||
s.required_ruby_version = '>= 1.9.3'
|
||||
|
||||
s.add_dependency("warden", "~> 1.2.3")
|
||||
s.add_dependency("orm_adapter", "~> 0.1")
|
||||
s.add_dependency("bcrypt", "~> 3.0")
|
||||
s.add_dependency("railties", ">= 4.1.0", "< 5.1")
|
||||
s.add_dependency("thread_safe", "~> 0.1")
|
||||
s.add_dependency("railties", ">= 3.2.6", "< 5")
|
||||
s.add_dependency("responders")
|
||||
end
|
||||
|
||||
@@ -1,19 +1,12 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gemspec path: ".."
|
||||
gemspec path: '..'
|
||||
|
||||
gem "rails", "5.0.0.beta3"
|
||||
gem "omniauth", " ~>1.3"
|
||||
gem "oauth2"
|
||||
gem "omniauth-oauth2", ">= 1.2.0", "< 1.5.0"
|
||||
gem "rails", github: 'rails/rails', branch: '3-2-stable'
|
||||
gem "omniauth", "~> 1.2.0"
|
||||
gem "omniauth-oauth2", "~> 1.1.0"
|
||||
gem "rdoc"
|
||||
|
||||
gem "activemodel-serializers-xml", github: "rails/activemodel-serializers-xml"
|
||||
|
||||
gem "rails-controller-testing"
|
||||
|
||||
gem "responders", "~> 2.1.1"
|
||||
|
||||
group :test do
|
||||
gem "omniauth-facebook"
|
||||
gem "omniauth-openid", "~> 1.0.1"
|
||||
@@ -31,7 +24,6 @@ platforms :ruby do
|
||||
gem "sqlite3"
|
||||
end
|
||||
|
||||
# TODO:
|
||||
# group :mongoid do
|
||||
# gem "mongoid", "~> 4.0.0"
|
||||
# end
|
||||
group :mongoid do
|
||||
gem "mongoid", "~> 3.0"
|
||||
end
|
||||
172
gemfiles/Gemfile.rails-3.2-stable.lock
Normal file
172
gemfiles/Gemfile.rails-3.2-stable.lock
Normal file
@@ -0,0 +1,172 @@
|
||||
GIT
|
||||
remote: git://github.com/rails/rails.git
|
||||
revision: f85bbed4cdc1bdfd1e0dbd97bce9db81e44cbd11
|
||||
branch: 3-2-stable
|
||||
specs:
|
||||
actionmailer (3.2.22.2)
|
||||
actionpack (= 3.2.22.2)
|
||||
mail (~> 2.5.4)
|
||||
actionpack (3.2.22.2)
|
||||
activemodel (= 3.2.22.2)
|
||||
activesupport (= 3.2.22.2)
|
||||
builder (~> 3.0.0)
|
||||
erubis (~> 2.7.0)
|
||||
journey (~> 1.0.4)
|
||||
rack (~> 1.4.5)
|
||||
rack-cache (~> 1.2)
|
||||
rack-test (~> 0.6.1)
|
||||
sprockets (~> 2.2.1)
|
||||
activemodel (3.2.22.2)
|
||||
activesupport (= 3.2.22.2)
|
||||
builder (~> 3.0.0)
|
||||
activerecord (3.2.22.2)
|
||||
activemodel (= 3.2.22.2)
|
||||
activesupport (= 3.2.22.2)
|
||||
arel (~> 3.0.2)
|
||||
tzinfo (~> 0.3.29)
|
||||
activeresource (3.2.22.2)
|
||||
activemodel (= 3.2.22.2)
|
||||
activesupport (= 3.2.22.2)
|
||||
activesupport (3.2.22.2)
|
||||
i18n (~> 0.6, >= 0.6.4)
|
||||
multi_json (~> 1.0)
|
||||
rails (3.2.22.2)
|
||||
actionmailer (= 3.2.22.2)
|
||||
actionpack (= 3.2.22.2)
|
||||
activerecord (= 3.2.22.2)
|
||||
activeresource (= 3.2.22.2)
|
||||
activesupport (= 3.2.22.2)
|
||||
bundler (~> 1.0)
|
||||
railties (= 3.2.22.2)
|
||||
railties (3.2.22.2)
|
||||
actionpack (= 3.2.22.2)
|
||||
activesupport (= 3.2.22.2)
|
||||
rack-ssl (~> 1.3.2)
|
||||
rake (>= 0.8.7)
|
||||
rdoc (~> 3.4)
|
||||
thor (>= 0.14.6, < 2.0)
|
||||
|
||||
PATH
|
||||
remote: ..
|
||||
specs:
|
||||
devise (3.5.8)
|
||||
bcrypt (~> 3.0)
|
||||
orm_adapter (~> 0.1)
|
||||
railties (>= 3.2.6, < 5)
|
||||
responders
|
||||
thread_safe (~> 0.1)
|
||||
warden (~> 1.2.3)
|
||||
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
arel (3.0.3)
|
||||
bcrypt (3.1.11)
|
||||
builder (3.0.4)
|
||||
erubis (2.7.0)
|
||||
faraday (0.9.2)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
hashie (3.4.3)
|
||||
hike (1.2.3)
|
||||
i18n (0.7.0)
|
||||
journey (1.0.4)
|
||||
json (1.8.3)
|
||||
jwt (1.5.4)
|
||||
mail (2.5.4)
|
||||
mime-types (~> 1.16)
|
||||
treetop (~> 1.4.8)
|
||||
metaclass (0.0.4)
|
||||
mime-types (1.25.1)
|
||||
mini_portile2 (2.0.0)
|
||||
mocha (1.1.0)
|
||||
metaclass (~> 0.0.1)
|
||||
mongoid (3.1.7)
|
||||
activemodel (~> 3.2)
|
||||
moped (~> 1.4)
|
||||
origin (~> 1.0)
|
||||
tzinfo (~> 0.3.29)
|
||||
moped (1.5.3)
|
||||
multi_json (1.11.3)
|
||||
multi_xml (0.5.5)
|
||||
multipart-post (2.0.0)
|
||||
nokogiri (1.6.7.2)
|
||||
mini_portile2 (~> 2.0.0.rc2)
|
||||
oauth2 (0.9.4)
|
||||
faraday (>= 0.8, < 0.10)
|
||||
jwt (~> 1.0)
|
||||
multi_json (~> 1.3)
|
||||
multi_xml (~> 0.5)
|
||||
rack (~> 1.2)
|
||||
omniauth (1.2.2)
|
||||
hashie (>= 1.2, < 4)
|
||||
rack (~> 1.0)
|
||||
omniauth-facebook (1.6.0)
|
||||
omniauth-oauth2 (~> 1.1)
|
||||
omniauth-oauth2 (1.1.2)
|
||||
faraday (>= 0.8, < 0.10)
|
||||
multi_json (~> 1.3)
|
||||
oauth2 (~> 0.9.3)
|
||||
omniauth (~> 1.2)
|
||||
omniauth-openid (1.0.1)
|
||||
omniauth (~> 1.0)
|
||||
rack-openid (~> 1.3.1)
|
||||
origin (1.1.0)
|
||||
orm_adapter (0.5.0)
|
||||
polyglot (0.3.5)
|
||||
rack (1.4.7)
|
||||
rack-cache (1.6.1)
|
||||
rack (>= 0.4)
|
||||
rack-openid (1.3.1)
|
||||
rack (>= 1.1.0)
|
||||
ruby-openid (>= 2.1.8)
|
||||
rack-ssl (1.3.4)
|
||||
rack
|
||||
rack-test (0.6.3)
|
||||
rack (>= 1.0)
|
||||
rake (11.1.2)
|
||||
rdoc (3.12.2)
|
||||
json (~> 1.4)
|
||||
responders (1.1.2)
|
||||
railties (>= 3.2, < 4.2)
|
||||
ruby-openid (2.7.0)
|
||||
sprockets (2.2.3)
|
||||
hike (~> 1.2)
|
||||
multi_json (~> 1.0)
|
||||
rack (~> 1.0)
|
||||
tilt (~> 1.1, != 1.3.0)
|
||||
sqlite3 (1.3.11)
|
||||
thor (0.19.1)
|
||||
thread_safe (0.3.5)
|
||||
tilt (1.4.1)
|
||||
treetop (1.4.15)
|
||||
polyglot
|
||||
polyglot (>= 0.3.1)
|
||||
tzinfo (0.3.49)
|
||||
warden (1.2.6)
|
||||
rack (>= 1.0)
|
||||
webrat (0.7.3)
|
||||
nokogiri (>= 1.2.0)
|
||||
rack (>= 1.0)
|
||||
rack-test (>= 0.5.3)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
activerecord-jdbc-adapter
|
||||
activerecord-jdbcsqlite3-adapter
|
||||
devise!
|
||||
jruby-openssl
|
||||
mocha (~> 1.1)
|
||||
mongoid (~> 3.0)
|
||||
omniauth (~> 1.2.0)
|
||||
omniauth-facebook
|
||||
omniauth-oauth2 (~> 1.1.0)
|
||||
omniauth-openid (~> 1.0.1)
|
||||
rails!
|
||||
rdoc
|
||||
sqlite3
|
||||
webrat (= 0.7.3)
|
||||
|
||||
BUNDLED WITH
|
||||
1.11.2
|
||||
30
gemfiles/Gemfile.rails-4.0-stable
Normal file
30
gemfiles/Gemfile.rails-4.0-stable
Normal file
@@ -0,0 +1,30 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gemspec path: '..'
|
||||
|
||||
gem "rails", github: 'rails/rails', branch: '4-0-stable'
|
||||
gem "omniauth", "~> 1.2.0"
|
||||
gem "omniauth-oauth2", "~> 1.1.0"
|
||||
gem "rdoc"
|
||||
gem "mime-types", "~> 2.99"
|
||||
|
||||
group :test do
|
||||
gem "omniauth-facebook"
|
||||
gem "omniauth-openid", "~> 1.0.1"
|
||||
gem "webrat", "0.7.3", require: false
|
||||
gem "mocha", "~> 1.1", require: false
|
||||
end
|
||||
|
||||
platforms :jruby do
|
||||
gem "activerecord-jdbc-adapter"
|
||||
gem "activerecord-jdbcsqlite3-adapter"
|
||||
gem "jruby-openssl"
|
||||
end
|
||||
|
||||
platforms :ruby do
|
||||
gem "sqlite3"
|
||||
end
|
||||
|
||||
group :mongoid do
|
||||
gem "mongoid", "~> 4.0.0"
|
||||
end
|
||||
166
gemfiles/Gemfile.rails-4.0-stable.lock
Normal file
166
gemfiles/Gemfile.rails-4.0-stable.lock
Normal file
@@ -0,0 +1,166 @@
|
||||
GIT
|
||||
remote: git://github.com/rails/rails.git
|
||||
revision: 9be9597e510d185ca7964d0a05b4ea2a7f2d50d1
|
||||
branch: 4-0-stable
|
||||
specs:
|
||||
actionmailer (4.0.13)
|
||||
actionpack (= 4.0.13)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
actionpack (4.0.13)
|
||||
activesupport (= 4.0.13)
|
||||
builder (~> 3.1.0)
|
||||
erubis (~> 2.7.0)
|
||||
rack (~> 1.5.2)
|
||||
rack-test (~> 0.6.2)
|
||||
activemodel (4.0.13)
|
||||
activesupport (= 4.0.13)
|
||||
builder (~> 3.1.0)
|
||||
activerecord (4.0.13)
|
||||
activemodel (= 4.0.13)
|
||||
activerecord-deprecated_finders (~> 1.0.2)
|
||||
activesupport (= 4.0.13)
|
||||
arel (~> 4.0.0)
|
||||
activesupport (4.0.13)
|
||||
i18n (~> 0.6, >= 0.6.9)
|
||||
minitest (~> 4.2)
|
||||
multi_json (~> 1.3)
|
||||
thread_safe (~> 0.1)
|
||||
tzinfo (~> 0.3.37)
|
||||
rails (4.0.13)
|
||||
actionmailer (= 4.0.13)
|
||||
actionpack (= 4.0.13)
|
||||
activerecord (= 4.0.13)
|
||||
activesupport (= 4.0.13)
|
||||
bundler (>= 1.3.0, < 2.0)
|
||||
railties (= 4.0.13)
|
||||
sprockets-rails (~> 2.0)
|
||||
railties (4.0.13)
|
||||
actionpack (= 4.0.13)
|
||||
activesupport (= 4.0.13)
|
||||
rake (>= 0.8.7)
|
||||
thor (>= 0.18.1, < 2.0)
|
||||
|
||||
PATH
|
||||
remote: ..
|
||||
specs:
|
||||
devise (3.5.8)
|
||||
bcrypt (~> 3.0)
|
||||
orm_adapter (~> 0.1)
|
||||
railties (>= 3.2.6, < 5)
|
||||
responders
|
||||
thread_safe (~> 0.1)
|
||||
warden (~> 1.2.3)
|
||||
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activerecord-deprecated_finders (1.0.4)
|
||||
arel (4.0.2)
|
||||
bcrypt (3.1.11)
|
||||
bson (3.2.6)
|
||||
builder (3.1.4)
|
||||
concurrent-ruby (1.0.1)
|
||||
connection_pool (2.2.0)
|
||||
erubis (2.7.0)
|
||||
faraday (0.9.2)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
hashie (3.4.3)
|
||||
i18n (0.7.0)
|
||||
json (1.8.3)
|
||||
jwt (1.5.4)
|
||||
mail (2.6.4)
|
||||
mime-types (>= 1.16, < 4)
|
||||
metaclass (0.0.4)
|
||||
mime-types (2.99.1)
|
||||
mini_portile2 (2.0.0)
|
||||
minitest (4.7.5)
|
||||
mocha (1.1.0)
|
||||
metaclass (~> 0.0.1)
|
||||
mongoid (4.0.2)
|
||||
activemodel (~> 4.0)
|
||||
moped (~> 2.0.0)
|
||||
origin (~> 2.1)
|
||||
tzinfo (>= 0.3.37)
|
||||
moped (2.0.7)
|
||||
bson (~> 3.0)
|
||||
connection_pool (~> 2.0)
|
||||
optionable (~> 0.2.0)
|
||||
multi_json (1.11.3)
|
||||
multi_xml (0.5.5)
|
||||
multipart-post (2.0.0)
|
||||
nokogiri (1.6.7.2)
|
||||
mini_portile2 (~> 2.0.0.rc2)
|
||||
oauth2 (0.9.4)
|
||||
faraday (>= 0.8, < 0.10)
|
||||
jwt (~> 1.0)
|
||||
multi_json (~> 1.3)
|
||||
multi_xml (~> 0.5)
|
||||
rack (~> 1.2)
|
||||
omniauth (1.2.2)
|
||||
hashie (>= 1.2, < 4)
|
||||
rack (~> 1.0)
|
||||
omniauth-facebook (1.6.0)
|
||||
omniauth-oauth2 (~> 1.1)
|
||||
omniauth-oauth2 (1.1.2)
|
||||
faraday (>= 0.8, < 0.10)
|
||||
multi_json (~> 1.3)
|
||||
oauth2 (~> 0.9.3)
|
||||
omniauth (~> 1.2)
|
||||
omniauth-openid (1.0.1)
|
||||
omniauth (~> 1.0)
|
||||
rack-openid (~> 1.3.1)
|
||||
optionable (0.2.0)
|
||||
origin (2.2.0)
|
||||
orm_adapter (0.5.0)
|
||||
rack (1.5.5)
|
||||
rack-openid (1.3.1)
|
||||
rack (>= 1.1.0)
|
||||
ruby-openid (>= 2.1.8)
|
||||
rack-test (0.6.3)
|
||||
rack (>= 1.0)
|
||||
rake (11.1.2)
|
||||
rdoc (4.2.2)
|
||||
json (~> 1.4)
|
||||
responders (1.1.2)
|
||||
railties (>= 3.2, < 4.2)
|
||||
ruby-openid (2.7.0)
|
||||
sprockets (3.6.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
rack (> 1, < 3)
|
||||
sprockets-rails (2.3.3)
|
||||
actionpack (>= 3.0)
|
||||
activesupport (>= 3.0)
|
||||
sprockets (>= 2.8, < 4.0)
|
||||
sqlite3 (1.3.11)
|
||||
thor (0.19.1)
|
||||
thread_safe (0.3.5)
|
||||
tzinfo (0.3.49)
|
||||
warden (1.2.6)
|
||||
rack (>= 1.0)
|
||||
webrat (0.7.3)
|
||||
nokogiri (>= 1.2.0)
|
||||
rack (>= 1.0)
|
||||
rack-test (>= 0.5.3)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
activerecord-jdbc-adapter
|
||||
activerecord-jdbcsqlite3-adapter
|
||||
devise!
|
||||
jruby-openssl
|
||||
mime-types (~> 2.99)
|
||||
mocha (~> 1.1)
|
||||
mongoid (~> 4.0.0)
|
||||
omniauth (~> 1.2.0)
|
||||
omniauth-facebook
|
||||
omniauth-oauth2 (~> 1.1.0)
|
||||
omniauth-openid (~> 1.0.1)
|
||||
rails!
|
||||
rdoc
|
||||
sqlite3
|
||||
webrat (= 0.7.3)
|
||||
|
||||
BUNDLED WITH
|
||||
1.11.2
|
||||
@@ -1,18 +1,18 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gemspec path: ".."
|
||||
gemspec path: '..'
|
||||
|
||||
gem "rails", github: "rails/rails", branch: "4-1-stable"
|
||||
gem "omniauth", "~> 1.3"
|
||||
gem "omniauth-oauth2", "~> 1.4"
|
||||
gem "rails", github: 'rails/rails', branch: '4-1-stable'
|
||||
gem "omniauth", "~> 1.2.0"
|
||||
gem "omniauth-oauth2", "~> 1.1.0"
|
||||
gem "rdoc"
|
||||
gem "mime-types", "~> 2.99"
|
||||
|
||||
group :test do
|
||||
gem "omniauth-facebook"
|
||||
gem "omniauth-openid", "~> 1.0.1"
|
||||
gem "webrat", "0.7.3", require: false
|
||||
gem "mocha", "~> 1.1", require: false
|
||||
gem 'test_after_commit', require: false
|
||||
end
|
||||
|
||||
platforms :jruby do
|
||||
|
||||
@@ -48,11 +48,12 @@ GIT
|
||||
PATH
|
||||
remote: ..
|
||||
specs:
|
||||
devise (4.0.1)
|
||||
devise (3.5.8)
|
||||
bcrypt (~> 3.0)
|
||||
orm_adapter (~> 0.1)
|
||||
railties (>= 4.1.0, < 5.1)
|
||||
railties (>= 3.2.6, < 5)
|
||||
responders
|
||||
thread_safe (~> 0.1)
|
||||
warden (~> 1.2.3)
|
||||
|
||||
GEM
|
||||
@@ -70,9 +71,9 @@ GEM
|
||||
hashie (3.4.3)
|
||||
i18n (0.7.0)
|
||||
json (1.8.3)
|
||||
jwt (1.5.1)
|
||||
mail (2.6.3)
|
||||
mime-types (>= 1.16, < 3)
|
||||
jwt (1.5.4)
|
||||
mail (2.6.4)
|
||||
mime-types (>= 1.16, < 4)
|
||||
metaclass (0.0.4)
|
||||
mime-types (2.99.1)
|
||||
mini_portile2 (2.0.0)
|
||||
@@ -88,24 +89,26 @@ GEM
|
||||
bson (~> 3.0)
|
||||
connection_pool (~> 2.0)
|
||||
optionable (~> 0.2.0)
|
||||
multi_json (1.11.2)
|
||||
multi_json (1.11.3)
|
||||
multi_xml (0.5.5)
|
||||
multipart-post (2.0.0)
|
||||
nokogiri (1.6.7.2)
|
||||
mini_portile2 (~> 2.0.0.rc2)
|
||||
oauth2 (1.1.0)
|
||||
oauth2 (0.9.4)
|
||||
faraday (>= 0.8, < 0.10)
|
||||
jwt (~> 1.0, < 1.5.2)
|
||||
jwt (~> 1.0)
|
||||
multi_json (~> 1.3)
|
||||
multi_xml (~> 0.5)
|
||||
rack (>= 1.2, < 3)
|
||||
omniauth (1.3.1)
|
||||
rack (~> 1.2)
|
||||
omniauth (1.2.2)
|
||||
hashie (>= 1.2, < 4)
|
||||
rack (>= 1.0, < 3)
|
||||
omniauth-facebook (3.0.0)
|
||||
omniauth-oauth2 (~> 1.2)
|
||||
omniauth-oauth2 (1.4.0)
|
||||
oauth2 (~> 1.0)
|
||||
rack (~> 1.0)
|
||||
omniauth-facebook (1.6.0)
|
||||
omniauth-oauth2 (~> 1.1)
|
||||
omniauth-oauth2 (1.1.2)
|
||||
faraday (>= 0.8, < 0.10)
|
||||
multi_json (~> 1.3)
|
||||
oauth2 (~> 0.9.3)
|
||||
omniauth (~> 1.2)
|
||||
omniauth-openid (1.0.1)
|
||||
omniauth (~> 1.0)
|
||||
@@ -119,13 +122,13 @@ GEM
|
||||
ruby-openid (>= 2.1.8)
|
||||
rack-test (0.6.3)
|
||||
rack (>= 1.0)
|
||||
rake (11.0.1)
|
||||
rake (11.1.2)
|
||||
rdoc (4.2.2)
|
||||
json (~> 1.4)
|
||||
responders (1.1.2)
|
||||
railties (>= 3.2, < 4.2)
|
||||
ruby-openid (2.7.0)
|
||||
sprockets (3.5.2)
|
||||
sprockets (3.6.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
rack (> 1, < 3)
|
||||
sprockets-rails (2.3.3)
|
||||
@@ -133,8 +136,6 @@ GEM
|
||||
activesupport (>= 3.0)
|
||||
sprockets (>= 2.8, < 4.0)
|
||||
sqlite3 (1.3.11)
|
||||
test_after_commit (1.0.0)
|
||||
activerecord (>= 3.2)
|
||||
thor (0.19.1)
|
||||
thread_safe (0.3.5)
|
||||
tzinfo (1.2.2)
|
||||
@@ -154,16 +155,16 @@ DEPENDENCIES
|
||||
activerecord-jdbcsqlite3-adapter
|
||||
devise!
|
||||
jruby-openssl
|
||||
mime-types (~> 2.99)
|
||||
mocha (~> 1.1)
|
||||
mongoid (~> 4.0.0)
|
||||
omniauth (~> 1.3)
|
||||
omniauth (~> 1.2.0)
|
||||
omniauth-facebook
|
||||
omniauth-oauth2 (~> 1.4)
|
||||
omniauth-oauth2 (~> 1.1.0)
|
||||
omniauth-openid (~> 1.0.1)
|
||||
rails!
|
||||
rdoc
|
||||
sqlite3
|
||||
test_after_commit
|
||||
webrat (= 0.7.3)
|
||||
|
||||
BUNDLED WITH
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gemspec path: ".."
|
||||
gemspec path: '..'
|
||||
|
||||
gem "rails", github: "rails/rails", branch: "4-2-stable"
|
||||
gem "omniauth", "~> 1.3"
|
||||
gem "omniauth-oauth2", "~> 1.4"
|
||||
gem "rails", github: 'rails/rails', branch: '4-2-stable'
|
||||
gem "omniauth", "~> 1.2.2"
|
||||
gem "omniauth-oauth2", "~> 1.2.0"
|
||||
gem "rdoc"
|
||||
gem "mime-types", "~> 2.99"
|
||||
|
||||
group :test do
|
||||
gem "omniauth-facebook"
|
||||
gem "omniauth-openid", "~> 1.0.1"
|
||||
gem "webrat", "0.7.3", require: false
|
||||
gem "mocha", "~> 1.1", require: false
|
||||
gem 'test_after_commit', require: false
|
||||
end
|
||||
|
||||
platforms :jruby do
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
GIT
|
||||
remote: git://github.com/rails/rails.git
|
||||
revision: 2aa27582c202148296bb169159b0bf9a47a7bd80
|
||||
revision: 2a1b655bb7db42ed0dbadab5bb129a8515e86a40
|
||||
branch: 4-2-stable
|
||||
specs:
|
||||
actionmailer (4.2.6)
|
||||
@@ -58,11 +58,12 @@ GIT
|
||||
PATH
|
||||
remote: ..
|
||||
specs:
|
||||
devise (4.0.1)
|
||||
devise (3.5.8)
|
||||
bcrypt (~> 3.0)
|
||||
orm_adapter (~> 0.1)
|
||||
railties (>= 4.1.0, < 5.1)
|
||||
railties (>= 3.2.6, < 5)
|
||||
responders
|
||||
thread_safe (~> 0.1)
|
||||
warden (~> 1.2.3)
|
||||
|
||||
GEM
|
||||
@@ -85,8 +86,8 @@ GEM
|
||||
jwt (1.5.1)
|
||||
loofah (2.0.3)
|
||||
nokogiri (>= 1.5.9)
|
||||
mail (2.6.3)
|
||||
mime-types (>= 1.16, < 3)
|
||||
mail (2.6.4)
|
||||
mime-types (>= 1.16, < 4)
|
||||
metaclass (0.0.4)
|
||||
mime-types (2.99.1)
|
||||
mini_portile2 (2.0.0)
|
||||
@@ -102,7 +103,7 @@ GEM
|
||||
bson (~> 3.0)
|
||||
connection_pool (~> 2.0)
|
||||
optionable (~> 0.2.0)
|
||||
multi_json (1.11.2)
|
||||
multi_json (1.11.3)
|
||||
multi_xml (0.5.5)
|
||||
multipart-post (2.0.0)
|
||||
nokogiri (1.6.7.2)
|
||||
@@ -113,12 +114,14 @@ GEM
|
||||
multi_json (~> 1.3)
|
||||
multi_xml (~> 0.5)
|
||||
rack (>= 1.2, < 3)
|
||||
omniauth (1.3.1)
|
||||
omniauth (1.2.2)
|
||||
hashie (>= 1.2, < 4)
|
||||
rack (>= 1.0, < 3)
|
||||
rack (~> 1.0)
|
||||
omniauth-facebook (3.0.0)
|
||||
omniauth-oauth2 (~> 1.2)
|
||||
omniauth-oauth2 (1.4.0)
|
||||
omniauth-oauth2 (1.2.0)
|
||||
faraday (>= 0.8, < 0.10)
|
||||
multi_json (~> 1.3)
|
||||
oauth2 (~> 1.0)
|
||||
omniauth (~> 1.2)
|
||||
omniauth-openid (1.0.1)
|
||||
@@ -141,13 +144,13 @@ GEM
|
||||
rails-deprecated_sanitizer (>= 1.0.1)
|
||||
rails-html-sanitizer (1.0.3)
|
||||
loofah (~> 2.0)
|
||||
rake (11.0.1)
|
||||
rake (11.1.2)
|
||||
rdoc (4.2.2)
|
||||
json (~> 1.4)
|
||||
responders (2.1.2)
|
||||
railties (>= 4.2.0, < 5.1)
|
||||
ruby-openid (2.7.0)
|
||||
sprockets (3.5.2)
|
||||
sprockets (3.6.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
rack (> 1, < 3)
|
||||
sprockets-rails (3.0.4)
|
||||
@@ -155,8 +158,6 @@ GEM
|
||||
activesupport (>= 4.0)
|
||||
sprockets (>= 3.0.0)
|
||||
sqlite3 (1.3.11)
|
||||
test_after_commit (1.0.0)
|
||||
activerecord (>= 3.2)
|
||||
thor (0.19.1)
|
||||
thread_safe (0.3.5)
|
||||
tzinfo (1.2.2)
|
||||
@@ -176,16 +177,16 @@ DEPENDENCIES
|
||||
activerecord-jdbcsqlite3-adapter
|
||||
devise!
|
||||
jruby-openssl
|
||||
mime-types (~> 2.99)
|
||||
mocha (~> 1.1)
|
||||
mongoid (~> 4.0.0)
|
||||
omniauth (~> 1.3)
|
||||
omniauth (~> 1.2.2)
|
||||
omniauth-facebook
|
||||
omniauth-oauth2 (~> 1.4)
|
||||
omniauth-oauth2 (~> 1.2.0)
|
||||
omniauth-openid (~> 1.0.1)
|
||||
rails!
|
||||
rdoc
|
||||
sqlite3
|
||||
test_after_commit
|
||||
webrat (= 0.7.3)
|
||||
|
||||
BUNDLED WITH
|
||||
|
||||
@@ -1,199 +0,0 @@
|
||||
GIT
|
||||
remote: git://github.com/rails/activemodel-serializers-xml.git
|
||||
revision: f380ea5ddefcb9a37f4fbc47606ed6fbecdb2b2a
|
||||
specs:
|
||||
activemodel-serializers-xml (1.0.0)
|
||||
activemodel (> 5.x)
|
||||
activerecord (> 5.x)
|
||||
activesupport (> 5.x)
|
||||
builder (~> 3.1)
|
||||
|
||||
PATH
|
||||
remote: ..
|
||||
specs:
|
||||
devise (4.0.0.rc2)
|
||||
bcrypt (~> 3.0)
|
||||
orm_adapter (~> 0.1)
|
||||
railties (>= 4.1.0, < 5.1)
|
||||
responders
|
||||
warden (~> 1.2.3)
|
||||
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
actioncable (5.0.0.beta3)
|
||||
actionpack (= 5.0.0.beta3)
|
||||
nio4r (~> 1.2)
|
||||
websocket-driver (~> 0.6.1)
|
||||
actionmailer (5.0.0.beta3)
|
||||
actionpack (= 5.0.0.beta3)
|
||||
actionview (= 5.0.0.beta3)
|
||||
activejob (= 5.0.0.beta3)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
actionpack (5.0.0.beta3)
|
||||
actionview (= 5.0.0.beta3)
|
||||
activesupport (= 5.0.0.beta3)
|
||||
rack (~> 2.x)
|
||||
rack-test (~> 0.6.3)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||
actionview (5.0.0.beta3)
|
||||
activesupport (= 5.0.0.beta3)
|
||||
builder (~> 3.1)
|
||||
erubis (~> 2.7.0)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||
activejob (5.0.0.beta3)
|
||||
activesupport (= 5.0.0.beta3)
|
||||
globalid (>= 0.3.6)
|
||||
activemodel (5.0.0.beta3)
|
||||
activesupport (= 5.0.0.beta3)
|
||||
activerecord (5.0.0.beta3)
|
||||
activemodel (= 5.0.0.beta3)
|
||||
activesupport (= 5.0.0.beta3)
|
||||
arel (~> 7.0)
|
||||
activesupport (5.0.0.beta3)
|
||||
concurrent-ruby (~> 1.0)
|
||||
i18n (~> 0.7)
|
||||
minitest (~> 5.1)
|
||||
tzinfo (~> 1.1)
|
||||
arel (7.0.0)
|
||||
bcrypt (3.1.11)
|
||||
builder (3.2.2)
|
||||
concurrent-ruby (1.0.1)
|
||||
erubis (2.7.0)
|
||||
faraday (0.9.2)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
globalid (0.3.6)
|
||||
activesupport (>= 4.1.0)
|
||||
hashie (3.4.3)
|
||||
i18n (0.7.0)
|
||||
json (1.8.3)
|
||||
jwt (1.5.1)
|
||||
loofah (2.0.3)
|
||||
nokogiri (>= 1.5.9)
|
||||
mail (2.6.4)
|
||||
mime-types (>= 1.16, < 4)
|
||||
metaclass (0.0.4)
|
||||
method_source (0.8.2)
|
||||
mime-types (3.0)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2016.0221)
|
||||
mini_portile2 (2.0.0)
|
||||
minitest (5.8.4)
|
||||
mocha (1.1.0)
|
||||
metaclass (~> 0.0.1)
|
||||
multi_json (1.11.2)
|
||||
multi_xml (0.5.5)
|
||||
multipart-post (2.0.0)
|
||||
nio4r (1.2.1)
|
||||
nokogiri (1.6.7.2)
|
||||
mini_portile2 (~> 2.0.0.rc2)
|
||||
oauth2 (1.1.0)
|
||||
faraday (>= 0.8, < 0.10)
|
||||
jwt (~> 1.0, < 1.5.2)
|
||||
multi_json (~> 1.3)
|
||||
multi_xml (~> 0.5)
|
||||
rack (>= 1.2, < 3)
|
||||
omniauth (1.3.1)
|
||||
hashie (>= 1.2, < 4)
|
||||
rack (>= 1.0, < 3)
|
||||
omniauth-facebook (3.0.0)
|
||||
omniauth-oauth2 (~> 1.2)
|
||||
omniauth-oauth2 (1.4.0)
|
||||
oauth2 (~> 1.0)
|
||||
omniauth (~> 1.2)
|
||||
omniauth-openid (1.0.1)
|
||||
omniauth (~> 1.0)
|
||||
rack-openid (~> 1.3.1)
|
||||
orm_adapter (0.5.0)
|
||||
rack (2.0.0.alpha)
|
||||
json
|
||||
rack-openid (1.3.1)
|
||||
rack (>= 1.1.0)
|
||||
ruby-openid (>= 2.1.8)
|
||||
rack-test (0.6.3)
|
||||
rack (>= 1.0)
|
||||
rails (5.0.0.beta3)
|
||||
actioncable (= 5.0.0.beta3)
|
||||
actionmailer (= 5.0.0.beta3)
|
||||
actionpack (= 5.0.0.beta3)
|
||||
actionview (= 5.0.0.beta3)
|
||||
activejob (= 5.0.0.beta3)
|
||||
activemodel (= 5.0.0.beta3)
|
||||
activerecord (= 5.0.0.beta3)
|
||||
activesupport (= 5.0.0.beta3)
|
||||
bundler (>= 1.3.0, < 2.0)
|
||||
railties (= 5.0.0.beta3)
|
||||
sprockets-rails (>= 2.0.0)
|
||||
rails-controller-testing (0.1.1)
|
||||
actionpack (~> 5.x)
|
||||
actionview (~> 5.x)
|
||||
activesupport (~> 5.x)
|
||||
rails-deprecated_sanitizer (1.0.3)
|
||||
activesupport (>= 4.2.0.alpha)
|
||||
rails-dom-testing (1.0.7)
|
||||
activesupport (>= 4.2.0.beta, < 5.0)
|
||||
nokogiri (~> 1.6.0)
|
||||
rails-deprecated_sanitizer (>= 1.0.1)
|
||||
rails-html-sanitizer (1.0.3)
|
||||
loofah (~> 2.0)
|
||||
railties (5.0.0.beta3)
|
||||
actionpack (= 5.0.0.beta3)
|
||||
activesupport (= 5.0.0.beta3)
|
||||
method_source
|
||||
rake (>= 0.8.7)
|
||||
thor (>= 0.18.1, < 2.0)
|
||||
rake (11.1.2)
|
||||
rdoc (4.2.2)
|
||||
json (~> 1.4)
|
||||
responders (2.1.2)
|
||||
railties (>= 4.2.0, < 5.1)
|
||||
ruby-openid (2.7.0)
|
||||
sprockets (3.6.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
rack (> 1, < 3)
|
||||
sprockets-rails (3.0.4)
|
||||
actionpack (>= 4.0)
|
||||
activesupport (>= 4.0)
|
||||
sprockets (>= 3.0.0)
|
||||
sqlite3 (1.3.11)
|
||||
thor (0.19.1)
|
||||
thread_safe (0.3.5)
|
||||
tzinfo (1.2.2)
|
||||
thread_safe (~> 0.1)
|
||||
warden (1.2.6)
|
||||
rack (>= 1.0)
|
||||
webrat (0.7.3)
|
||||
nokogiri (>= 1.2.0)
|
||||
rack (>= 1.0)
|
||||
rack-test (>= 0.5.3)
|
||||
websocket-driver (0.6.3)
|
||||
websocket-extensions (>= 0.1.0)
|
||||
websocket-extensions (0.1.2)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
activemodel-serializers-xml!
|
||||
activerecord-jdbc-adapter
|
||||
activerecord-jdbcsqlite3-adapter
|
||||
devise!
|
||||
jruby-openssl
|
||||
mocha (~> 1.1)
|
||||
oauth2
|
||||
omniauth (~> 1.3)
|
||||
omniauth-facebook
|
||||
omniauth-oauth2 (>= 1.2.0, < 1.5.0)
|
||||
omniauth-openid (~> 1.0.1)
|
||||
rails (= 5.0.0.beta3)
|
||||
rails-controller-testing
|
||||
rdoc
|
||||
responders (~> 2.1.1)
|
||||
sqlite3
|
||||
webrat (= 0.7.3)
|
||||
|
||||
BUNDLED WITH
|
||||
1.11.2
|
||||
45
lib/devise.rb
Executable file → Normal file
45
lib/devise.rb
Executable file → Normal file
@@ -12,18 +12,19 @@ module Devise
|
||||
autoload :FailureApp, 'devise/failure_app'
|
||||
autoload :OmniAuth, 'devise/omniauth'
|
||||
autoload :ParameterFilter, 'devise/parameter_filter'
|
||||
autoload :BaseSanitizer, 'devise/parameter_sanitizer'
|
||||
autoload :ParameterSanitizer, 'devise/parameter_sanitizer'
|
||||
autoload :TestHelpers, 'devise/test_helpers'
|
||||
autoload :TimeInflector, 'devise/time_inflector'
|
||||
autoload :TokenGenerator, 'devise/token_generator'
|
||||
|
||||
module Controllers
|
||||
autoload :Helpers, 'devise/controllers/helpers'
|
||||
autoload :Rememberable, 'devise/controllers/rememberable'
|
||||
autoload :ScopedViews, 'devise/controllers/scoped_views'
|
||||
autoload :SignInOut, 'devise/controllers/sign_in_out'
|
||||
autoload :StoreLocation, 'devise/controllers/store_location'
|
||||
autoload :UrlHelpers, 'devise/controllers/url_helpers'
|
||||
autoload :Helpers, 'devise/controllers/helpers'
|
||||
autoload :Rememberable, 'devise/controllers/rememberable'
|
||||
autoload :ScopedViews, 'devise/controllers/scoped_views'
|
||||
autoload :SignInOut, 'devise/controllers/sign_in_out'
|
||||
autoload :StoreLocation, 'devise/controllers/store_location'
|
||||
autoload :UrlHelpers, 'devise/controllers/url_helpers'
|
||||
end
|
||||
|
||||
module Hooks
|
||||
@@ -35,7 +36,7 @@ module Devise
|
||||
end
|
||||
|
||||
module Strategies
|
||||
autoload :Base, 'devise/strategies/base'
|
||||
autoload :Base, 'devise/strategies/base'
|
||||
autoload :Authenticatable, 'devise/strategies/authenticatable'
|
||||
end
|
||||
|
||||
@@ -61,9 +62,9 @@ module Devise
|
||||
mattr_accessor :rememberable_options
|
||||
@@rememberable_options = {}
|
||||
|
||||
# The number of times to hash the password.
|
||||
# The number of times to encrypt password.
|
||||
mattr_accessor :stretches
|
||||
@@stretches = 11
|
||||
@@stretches = 10
|
||||
|
||||
# The default key used when authenticating over http auth.
|
||||
mattr_accessor :http_authentication_key
|
||||
@@ -83,7 +84,7 @@ module Devise
|
||||
|
||||
# Keys that should have whitespace stripped.
|
||||
mattr_accessor :strip_whitespace_keys
|
||||
@@strip_whitespace_keys = [:email]
|
||||
@@strip_whitespace_keys = []
|
||||
|
||||
# If http authentication is enabled by default.
|
||||
mattr_accessor :http_authenticatable
|
||||
@@ -101,11 +102,11 @@ module Devise
|
||||
mattr_accessor :http_authentication_realm
|
||||
@@http_authentication_realm = "Application"
|
||||
|
||||
# Email regex used to validate email formats. It asserts that there are no
|
||||
# @ symbols or whitespaces in either the localpart or the domain, and that
|
||||
# there is a single @ symbol separating the localpart and the domain.
|
||||
# Email regex used to validate email formats. It simply asserts that
|
||||
# an one (and only one) @ exists in the given string. This is mainly
|
||||
# to give user feedback and not to assert the e-mail validity.
|
||||
mattr_accessor :email_regexp
|
||||
@@email_regexp = /\A[^@\s]+@[^@\s]+\z/
|
||||
@@email_regexp = /\A[^@\s]+@([^@\s]+\.)+[^@\W]+\z/
|
||||
|
||||
# Range validation for password length
|
||||
mattr_accessor :password_length
|
||||
@@ -137,14 +138,15 @@ module Devise
|
||||
@@confirmation_keys = [:email]
|
||||
|
||||
# Defines if email should be reconfirmable.
|
||||
# False by default for backwards compatibility.
|
||||
mattr_accessor :reconfirmable
|
||||
@@reconfirmable = true
|
||||
@@reconfirmable = false
|
||||
|
||||
# Time interval to timeout the user session without activity.
|
||||
mattr_accessor :timeout_in
|
||||
@@timeout_in = 30.minutes
|
||||
|
||||
# Used to hash the password. Please generate one with rake secret.
|
||||
# Used to encrypt password. Please generate one with rake secret.
|
||||
mattr_accessor :pepper
|
||||
@@pepper = nil
|
||||
|
||||
@@ -201,7 +203,7 @@ module Devise
|
||||
|
||||
# Skip session storage for the following strategies
|
||||
mattr_accessor :skip_session_storage
|
||||
@@skip_session_storage = [:http_auth]
|
||||
@@skip_session_storage = []
|
||||
|
||||
# Which formats should be treated as navigational.
|
||||
mattr_accessor :navigational_formats
|
||||
@@ -213,7 +215,7 @@ module Devise
|
||||
|
||||
# The default method used while signing out
|
||||
mattr_accessor :sign_out_via
|
||||
@@sign_out_via = :delete
|
||||
@@sign_out_via = :get
|
||||
|
||||
# The parent controller all Devise controllers inherits from.
|
||||
# Defaults to ApplicationController. This should be set early
|
||||
@@ -274,7 +276,7 @@ module Devise
|
||||
mattr_accessor :token_generator
|
||||
@@token_generator = nil
|
||||
|
||||
# Default way to set up Devise. Run rails generate devise_install to create
|
||||
# Default way to setup Devise. Run rails generate devise_install to create
|
||||
# a fresh initializer with all configuration values.
|
||||
def self.setup
|
||||
yield self
|
||||
@@ -455,7 +457,10 @@ module Devise
|
||||
mapping.to.serialize_into_session(record)
|
||||
end
|
||||
|
||||
warden_config.serialize_from_session(mapping.name) do |args|
|
||||
warden_config.serialize_from_session(mapping.name) do |key|
|
||||
# Previous versions contained an additional entry at the beginning of
|
||||
# key with the record's class name.
|
||||
args = key[-2, 2]
|
||||
mapping.to.serialize_from_session(*args)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -30,8 +30,8 @@ module Devise
|
||||
# current_bloggers # Currently signed in user and admin
|
||||
#
|
||||
# Use:
|
||||
# before_action :authenticate_blogger! # Redirects unless either a user or an admin are authenticated
|
||||
# before_action ->{ authenticate_blogger! :admin } # Redirects to the admin login page
|
||||
# before_filter :authenticate_blogger! # Redirects unless either a user or an admin are authenticated
|
||||
# before_filter ->{ authenticate_blogger! :admin } # Redirects to the admin login page
|
||||
# current_blogger :user # Preferably returns a User if one is signed in
|
||||
#
|
||||
def devise_group(group_name, opts={})
|
||||
@@ -84,7 +84,7 @@ module Devise
|
||||
end
|
||||
|
||||
# Define authentication filters and accessor helpers based on mappings.
|
||||
# These filters should be used inside the controllers as before_actions,
|
||||
# These filters should be used inside the controllers as before_filters,
|
||||
# so you can control the scope of the user who should be signed in to
|
||||
# access that specific controller/action.
|
||||
# Example:
|
||||
@@ -104,8 +104,8 @@ module Devise
|
||||
# admin_session # Session data available only to the admin scope
|
||||
#
|
||||
# Use:
|
||||
# before_action :authenticate_user! # Tell devise to use :user map
|
||||
# before_action :authenticate_admin! # Tell devise to use :admin map
|
||||
# before_filter :authenticate_user! # Tell devise to use :user map
|
||||
# before_filter :authenticate_admin! # Tell devise to use :admin map
|
||||
#
|
||||
def self.define_helpers(mapping) #:nodoc:
|
||||
mapping = mapping.name
|
||||
@@ -145,16 +145,20 @@ module Devise
|
||||
# the controllers defined inside devise. Useful if you want to apply a before
|
||||
# filter to all controllers, except the ones in devise:
|
||||
#
|
||||
# before_action :my_filter, unless: :devise_controller?
|
||||
# before_filter :my_filter, unless: :devise_controller?
|
||||
def devise_controller?
|
||||
is_a?(::DeviseController)
|
||||
end
|
||||
|
||||
# Set up a param sanitizer to filter parameters using strong_parameters. See
|
||||
# Setup a param sanitizer to filter parameters using strong_parameters. See
|
||||
# lib/devise/parameter_sanitizer.rb for more info. Override this
|
||||
# method in your application controller to use your own parameter sanitizer.
|
||||
def devise_parameter_sanitizer
|
||||
@devise_parameter_sanitizer ||= Devise::ParameterSanitizer.new(resource_class, resource_name, params)
|
||||
@devise_parameter_sanitizer ||= if defined?(ActionController::StrongParameters)
|
||||
Devise::ParameterSanitizer.new(resource_class, resource_name, params)
|
||||
else
|
||||
Devise::BaseSanitizer.new(resource_class, resource_name, params)
|
||||
end
|
||||
end
|
||||
|
||||
# Tell warden that params authentication is allowed for that specific page.
|
||||
@@ -271,6 +275,12 @@ module Devise
|
||||
|
||||
private
|
||||
|
||||
def expire_session_data_after_sign_in!
|
||||
ActiveSupport::Deprecation.warn "expire_session_data_after_sign_in! is deprecated " \
|
||||
"in favor of expire_data_after_sign_in!"
|
||||
expire_data_after_sign_in!
|
||||
end
|
||||
|
||||
def expire_data_after_sign_out!
|
||||
Devise.mappings.each { |_,m| instance_variable_set("@current_#{m.name}", nil) }
|
||||
super
|
||||
|
||||
@@ -9,14 +9,14 @@ module Devise
|
||||
::BCrypt::Password.create(password, cost: klass.stretches).to_s
|
||||
end
|
||||
|
||||
def self.compare(klass, hashed_password, password)
|
||||
return false if hashed_password.blank?
|
||||
bcrypt = ::BCrypt::Password.new(hashed_password)
|
||||
def self.compare(klass, encrypted_password, password)
|
||||
return false if encrypted_password.blank?
|
||||
bcrypt = ::BCrypt::Password.new(encrypted_password)
|
||||
if klass.pepper.present?
|
||||
password = "#{password}#{klass.pepper}"
|
||||
end
|
||||
password = ::BCrypt::Engine.hash_secret(password, bcrypt.salt)
|
||||
Devise.secure_compare(password, hashed_password)
|
||||
Devise.secure_compare(password, encrypted_password)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -6,6 +6,7 @@ module Devise
|
||||
# page based on current scope and mapping. If no scope is given, redirect
|
||||
# to the default_url.
|
||||
class FailureApp < ActionController::Metal
|
||||
include ActionController::RackDelegation
|
||||
include ActionController::UrlFor
|
||||
include ActionController::Redirecting
|
||||
|
||||
@@ -21,7 +22,7 @@ module Devise
|
||||
@respond.call(env)
|
||||
end
|
||||
|
||||
# Try retrieving the URL options from the parent controller (usually
|
||||
# Try retrieving the URL options from the parent controller (usually
|
||||
# ApplicationController). Instance methods are not supported at the moment,
|
||||
# so only the class-level attribute is used.
|
||||
def self.default_url_options(*args)
|
||||
@@ -52,27 +53,18 @@ module Devise
|
||||
def recall
|
||||
config = Rails.application.config
|
||||
|
||||
header_info = if config.try(:relative_url_root)
|
||||
if config.try(:relative_url_root)
|
||||
base_path = Pathname.new(config.relative_url_root)
|
||||
full_path = Pathname.new(attempted_path)
|
||||
|
||||
{ "SCRIPT_NAME" => config.relative_url_root,
|
||||
"PATH_INFO" => '/' + full_path.relative_path_from(base_path).to_s }
|
||||
env["SCRIPT_NAME"] = config.relative_url_root
|
||||
env["PATH_INFO"] = '/' + full_path.relative_path_from(base_path).to_s
|
||||
else
|
||||
{ "PATH_INFO" => attempted_path }
|
||||
end
|
||||
|
||||
header_info.each do | var, value|
|
||||
if request.respond_to?(:set_header)
|
||||
request.set_header(var, value)
|
||||
else
|
||||
env[var] = value
|
||||
end
|
||||
env["PATH_INFO"] = attempted_path
|
||||
end
|
||||
|
||||
flash.now[:alert] = i18n_message(:invalid) if is_flashing_format?
|
||||
# self.response = recall_app(warden_options[:recall]).call(env)
|
||||
self.response = recall_app(warden_options[:recall]).call(request.env)
|
||||
self.response = recall_app(warden_options[:recall]).call(env)
|
||||
end
|
||||
|
||||
def redirect
|
||||
@@ -103,7 +95,7 @@ module Devise
|
||||
options[:scope] = "devise.failure"
|
||||
options[:default] = [message]
|
||||
auth_keys = scope_class.authentication_keys
|
||||
keys = (auth_keys.respond_to?(:keys) ? auth_keys.keys : auth_keys).map { |key| scope_class.human_attribute_name(key) }
|
||||
keys = auth_keys.respond_to?(:keys) ? auth_keys.keys : auth_keys
|
||||
options[:authentication_keys] = keys.join(I18n.translate(:"support.array.words_connector"))
|
||||
options = i18n_options(options)
|
||||
|
||||
@@ -140,10 +132,11 @@ module Devise
|
||||
|
||||
config = Rails.application.config
|
||||
|
||||
if config.respond_to?(:relative_url_root)
|
||||
# Rails 4.2 goes into an infinite loop if opts[:script_name] is unset
|
||||
rails_4_2 = (Rails::VERSION::MAJOR >= 4) && (Rails::VERSION::MINOR >= 2)
|
||||
if config.relative_url_root.present? || rails_4_2
|
||||
# Rails 4.2 goes into an infinite loop if opts[:script_name] is unset
|
||||
if (Rails::VERSION::MAJOR >= 4) && (Rails::VERSION::MINOR >= 2)
|
||||
opts[:script_name] = (config.relative_url_root if config.respond_to?(:relative_url_root))
|
||||
else
|
||||
if config.respond_to?(:relative_url_root) && config.relative_url_root.present?
|
||||
opts[:script_name] = config.relative_url_root
|
||||
end
|
||||
end
|
||||
@@ -206,11 +199,11 @@ module Devise
|
||||
end
|
||||
|
||||
def warden
|
||||
request.respond_to?(:get_header) ? request.get_header("warden") : env["warden"]
|
||||
env['warden']
|
||||
end
|
||||
|
||||
def warden_options
|
||||
request.respond_to?(:get_header) ? request.get_header("warden.options") : env["warden.options"]
|
||||
env['warden.options']
|
||||
end
|
||||
|
||||
def warden_message
|
||||
|
||||
@@ -64,7 +64,7 @@ module Devise
|
||||
template_path
|
||||
end
|
||||
|
||||
# Set up a subject doing an I18n lookup. At first, it attempts to set a subject
|
||||
# Setup a subject doing an I18n lookup. At first, it attempts to set a subject
|
||||
# based on the current mapping:
|
||||
#
|
||||
# en:
|
||||
|
||||
@@ -253,11 +253,7 @@ module Devise
|
||||
|
||||
# Find or initialize a record with group of attributes based on a list of required attributes.
|
||||
def find_or_initialize_with_errors(required_attributes, attributes, error=:invalid) #:nodoc:
|
||||
attributes = if attributes.respond_to? :permit!
|
||||
attributes.slice(*required_attributes).permit!.to_h.with_indifferent_access
|
||||
else
|
||||
attributes.with_indifferent_access.slice(*required_attributes)
|
||||
end
|
||||
attributes = attributes.slice(*required_attributes).with_indifferent_access
|
||||
attributes.delete_if { |key, value| value.blank? }
|
||||
|
||||
if attributes.size == required_attributes.size
|
||||
|
||||
@@ -24,7 +24,7 @@ module Devise
|
||||
# By default allow_unconfirmed_access_for is zero, it means users always have to confirm to sign in.
|
||||
# * +reconfirmable+: requires any email changes to be confirmed (exactly the same way as
|
||||
# initial account confirmation) to be applied. Requires additional unconfirmed_email
|
||||
# db field to be set up (t.reconfirmable in migrations). Until confirmed, new email is
|
||||
# db field to be setup (t.reconfirmable in migrations). Until confirmed, new email is
|
||||
# stored in unconfirmed email column, and copied to email column on successful
|
||||
# confirmation.
|
||||
# * +confirm_within+: the time before a sent confirmation token becomes invalid.
|
||||
@@ -40,18 +40,13 @@ module Devise
|
||||
#
|
||||
module Confirmable
|
||||
extend ActiveSupport::Concern
|
||||
include ActionView::Helpers::DateHelper
|
||||
|
||||
included do
|
||||
before_create :generate_confirmation_token, if: :confirmation_required?
|
||||
after_create :skip_reconfirmation!, if: :send_confirmation_notification?
|
||||
if respond_to?(:after_commit) # ActiveRecord
|
||||
after_commit :send_on_create_confirmation_instructions, on: :create, if: :send_confirmation_notification?
|
||||
after_commit :send_reconfirmation_instructions, on: :update, if: :reconfirmation_required?
|
||||
else # Mongoid
|
||||
after_create :send_on_create_confirmation_instructions, if: :send_confirmation_notification?
|
||||
after_update :send_reconfirmation_instructions, if: :reconfirmation_required?
|
||||
end
|
||||
after_create :send_on_create_confirmation_instructions, if: :send_confirmation_notification?
|
||||
before_update :postpone_email_change_until_confirmation_and_regenerate_confirmation_token, if: :postpone_email_change?
|
||||
after_update :send_reconfirmation_instructions, if: :reconfirmation_required?
|
||||
end
|
||||
|
||||
def initialize(*args, &block)
|
||||
@@ -81,7 +76,7 @@ module Devise
|
||||
|
||||
self.confirmed_at = Time.now.utc
|
||||
|
||||
saved = if pending_reconfirmation?
|
||||
saved = if self.class.reconfirmable && unconfirmed_email.present?
|
||||
skip_reconfirmation!
|
||||
self.email = unconfirmed_email
|
||||
self.unconfirmed_email = nil
|
||||
@@ -175,6 +170,7 @@ module Devise
|
||||
# in models to map to a nice sign up e-mail.
|
||||
def send_on_create_confirmation_instructions
|
||||
send_confirmation_instructions
|
||||
skip_reconfirmation!
|
||||
end
|
||||
|
||||
# Callback to overwrite if confirmation is required or not.
|
||||
@@ -185,7 +181,7 @@ module Devise
|
||||
# Checks if the confirmation for the user is within the limit time.
|
||||
# We do this by calculating if the difference between today and the
|
||||
# confirmation sent date does not exceed the confirm in time configured.
|
||||
# allow_unconfirmed_access_for is a model configuration, must always be an integer value.
|
||||
# Confirm_within is a model configuration, must always be an integer value.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
@@ -240,7 +236,8 @@ module Devise
|
||||
if self.confirmation_token && !confirmation_period_expired?
|
||||
@raw_confirmation_token = self.confirmation_token
|
||||
else
|
||||
self.confirmation_token = @raw_confirmation_token = Devise.friendly_token
|
||||
raw, _ = Devise.token_generator.generate(self.class, :confirmation_token)
|
||||
self.confirmation_token = @raw_confirmation_token = raw
|
||||
self.confirmation_sent_at = Time.now.utc
|
||||
end
|
||||
end
|
||||
@@ -319,7 +316,6 @@ module Devise
|
||||
|
||||
# Find a record for confirmation by unconfirmed email field
|
||||
def find_by_unconfirmed_email_with_errors(attributes = {})
|
||||
attributes = attributes.slice(*confirmation_keys).permit!.to_h if attributes.respond_to? :permit
|
||||
unconfirmed_required_attributes = confirmation_keys.map { |k| k == :email ? :unconfirmed_email : k }
|
||||
unconfirmed_attributes = attributes.symbolize_keys
|
||||
unconfirmed_attributes[:unconfirmed_email] = unconfirmed_attributes.delete(:email)
|
||||
|
||||
@@ -7,8 +7,8 @@ module Devise
|
||||
end
|
||||
|
||||
module Models
|
||||
# Authenticatable Module, responsible for hashing the password and
|
||||
# validating the authenticity of a user while signing in.
|
||||
# Authenticatable Module, responsible for encrypting password and validating
|
||||
# authenticity of a user while signing in.
|
||||
#
|
||||
# == Options
|
||||
#
|
||||
@@ -37,9 +37,7 @@ module Devise
|
||||
[:encrypted_password] + klass.authentication_keys
|
||||
end
|
||||
|
||||
# Generates a hashed password based on the given value.
|
||||
# For legacy reasons, we use `encrypted_password` to store
|
||||
# the hashed password.
|
||||
# Generates password encryption based on the given value.
|
||||
def password=(new_password)
|
||||
@password = new_password
|
||||
self.encrypted_password = password_digest(@password) if @password.present?
|
||||
@@ -143,11 +141,11 @@ module Devise
|
||||
|
||||
protected
|
||||
|
||||
# Hashes the password using bcrypt. Custom hash functions should override
|
||||
# Digests the password using bcrypt. Custom encryption should override
|
||||
# this method to apply their own algorithm.
|
||||
#
|
||||
# See https://github.com/plataformatec/devise-encryptable for examples
|
||||
# of other hashing engines.
|
||||
# of other encryption engines.
|
||||
def password_digest(password)
|
||||
Devise::Encryptor.digest(self.class, password)
|
||||
end
|
||||
|
||||
@@ -7,7 +7,7 @@ module Devise
|
||||
# blocked: email and time. The former will send an email to the user when
|
||||
# the lock happens, containing a link to unlock its account. The second
|
||||
# will unlock the user automatically after some configured time (ie 2.hours).
|
||||
# It's also possible to set up lockable to use both email and time strategies.
|
||||
# It's also possible to setup lockable to use both email and time strategies.
|
||||
#
|
||||
# == Options
|
||||
#
|
||||
@@ -64,7 +64,7 @@ module Devise
|
||||
def send_unlock_instructions
|
||||
raw, enc = Devise.token_generator.generate(self.class, :unlock_token)
|
||||
self.unlock_token = enc
|
||||
save(validate: false)
|
||||
self.save(validate: false)
|
||||
send_devise_notification(:unlock_instructions, raw, {})
|
||||
raw
|
||||
end
|
||||
|
||||
@@ -99,7 +99,7 @@ module Devise
|
||||
|
||||
self.reset_password_token = enc
|
||||
self.reset_password_sent_at = Time.now.utc
|
||||
save(validate: false)
|
||||
self.save(validate: false)
|
||||
raw
|
||||
end
|
||||
|
||||
|
||||
@@ -45,7 +45,9 @@ module Devise
|
||||
[:remember_created_at]
|
||||
end
|
||||
|
||||
def remember_me!
|
||||
# TODO: We were used to receive a extend period argument but we no longer do.
|
||||
# Remove this for Devise 4.0.
|
||||
def remember_me!(*)
|
||||
self.remember_token = self.class.remember_token if respond_to?(:remember_token)
|
||||
self.remember_created_at ||= Time.now.utc
|
||||
save(validate: false) if self.changed?
|
||||
@@ -60,6 +62,11 @@ module Devise
|
||||
save(validate: false)
|
||||
end
|
||||
|
||||
# Remember token should be expired if expiration time not overpass now.
|
||||
def remember_expired?
|
||||
remember_created_at.nil?
|
||||
end
|
||||
|
||||
def remember_expires_at
|
||||
self.class.remember_for.from_now
|
||||
end
|
||||
|
||||
@@ -2,74 +2,16 @@ module Devise
|
||||
module OmniAuth
|
||||
module UrlHelpers
|
||||
def self.define_helpers(mapping)
|
||||
return unless mapping.omniauthable?
|
||||
|
||||
mapping = mapping.name
|
||||
|
||||
class_eval do
|
||||
define_method("#{mapping}_omniauth_authorize_path") do |provider, *args|
|
||||
ActiveSupport::Deprecation.warn(<<-DEPRECATION.strip_heredoc)
|
||||
[Devise] #{mapping}_omniauth_authorize_path(#{provider.inspect}) is deprecated and it will be removed from Devise 4.2.
|
||||
|
||||
Please use #{mapping}_#{provider}_omniauth_authorize_path instead.
|
||||
DEPRECATION
|
||||
send("#{mapping}_#{provider}_omniauth_authorize_path", *args)
|
||||
end
|
||||
|
||||
define_method("#{mapping}_omniauth_authorize_url") do |provider, *args|
|
||||
ActiveSupport::Deprecation.warn(<<-DEPRECATION.strip_heredoc)
|
||||
[Devise] #{mapping}_omniauth_authorize_url(#{provider.inspect}) is deprecated and it will be removed from Devise 4.2.
|
||||
|
||||
Please use #{mapping}_#{provider}_omniauth_authorize_url instead.
|
||||
DEPRECATION
|
||||
send("#{mapping}_#{provider}_omniauth_authorize_url", *args)
|
||||
end
|
||||
|
||||
define_method("#{mapping}_omniauth_callback_path") do |provider, *args|
|
||||
ActiveSupport::Deprecation.warn(<<-DEPRECATION.strip_heredoc)
|
||||
[Devise] #{mapping}_omniauth_callback_path(#{provider.inspect}) is deprecated and it will be removed from Devise 4.2.
|
||||
|
||||
Please use #{mapping}_#{provider}_omniauth_callback_path instead.
|
||||
DEPRECATION
|
||||
send("#{mapping}_#{provider}_omniauth_callback_path", *args)
|
||||
end
|
||||
|
||||
define_method("#{mapping}_omniauth_callback_url") do |provider, *args|
|
||||
ActiveSupport::Deprecation.warn(<<-DEPRECATION.strip_heredoc)
|
||||
[Devise] #{mapping}_omniauth_callback_url(#{provider.inspect}) is deprecated and it will be removed from Devise 4.2.
|
||||
|
||||
Please use #{mapping}_#{provider}_omniauth_callback_url instead.
|
||||
DEPRECATION
|
||||
send("#{mapping}_#{provider}_omniauth_callback_url", *args)
|
||||
end
|
||||
end
|
||||
|
||||
ActiveSupport.on_load(:action_controller) do
|
||||
if respond_to?(:helper_method)
|
||||
helper_method "#{mapping}_omniauth_authorize_path", "#{mapping}_omniauth_authorize_url"
|
||||
helper_method "#{mapping}_omniauth_callback_path", "#{mapping}_omniauth_callback_url"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def omniauth_authorize_path(resource_or_scope, provider, *args)
|
||||
def omniauth_authorize_path(resource_or_scope, *args)
|
||||
scope = Devise::Mapping.find_scope!(resource_or_scope)
|
||||
_devise_route_context.send("#{scope}_#{provider}_omniauth_authorize_path", *args)
|
||||
_devise_route_context.send("#{scope}_omniauth_authorize_path", *args)
|
||||
end
|
||||
|
||||
def omniauth_authorize_url(resource_or_scope, provider, *args)
|
||||
def omniauth_callback_path(resource_or_scope, *args)
|
||||
scope = Devise::Mapping.find_scope!(resource_or_scope)
|
||||
_devise_route_context.send("#{scope}_#{provider}_omniauth_authorize_url", *args)
|
||||
end
|
||||
|
||||
def omniauth_callback_path(resource_or_scope, provider, *args)
|
||||
scope = Devise::Mapping.find_scope!(resource_or_scope)
|
||||
_devise_route_context.send("#{scope}_#{provider}_omniauth_callback_path", *args)
|
||||
end
|
||||
|
||||
def omniauth_callback_url(resource_or_scope, provider, *args)
|
||||
scope = Devise::Mapping.find_scope!(resource_or_scope)
|
||||
_devise_route_context.send("#{scope}_#{provider}_omniauth_callback_url", *args)
|
||||
_devise_route_context.send("#{scope}_omniauth_callback_path", *args)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,214 +1,99 @@
|
||||
module Devise
|
||||
# The +ParameterSanitizer+ deals with permitting specific parameters values
|
||||
# for each +Devise+ scope in the application.
|
||||
#
|
||||
# The sanitizer knows about Devise default parameters (like +password+ and
|
||||
# +password_confirmation+ for the `RegistrationsController`), and you can
|
||||
# extend or change the permitted parameters list on your controllers.
|
||||
#
|
||||
# === Permitting new parameters
|
||||
#
|
||||
# You can add new parameters to the permitted list using the +permit+ method
|
||||
# in a +before_action+ method, for instance.
|
||||
#
|
||||
# class ApplicationController < ActionController::Base
|
||||
# before_action :configure_permitted_parameters, if: :devise_controller?
|
||||
#
|
||||
# protected
|
||||
#
|
||||
# def configure_permitted_parameters
|
||||
# # Permit the `subscribe_newsletter` parameter along with the other
|
||||
# # sign up parameters.
|
||||
# devise_parameter_sanitizer.permit(:sign_up, keys: [:subscribe_newsletter])
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# Using a block yields an +ActionController::Parameters+ object so you can
|
||||
# permit nested parameters and have more control over how the parameters are
|
||||
# permitted in your controller.
|
||||
#
|
||||
# def configure_permitted_parameters
|
||||
# devise_parameter_sanitizer.permit(:sign_up) do |user|
|
||||
# user.permit(newsletter_preferences: [])
|
||||
# end
|
||||
# end
|
||||
class ParameterSanitizer
|
||||
DEFAULT_PERMITTED_ATTRIBUTES = {
|
||||
sign_in: [:password, :remember_me],
|
||||
sign_up: [:password, :password_confirmation],
|
||||
account_update: [:password, :password_confirmation, :current_password]
|
||||
}
|
||||
class BaseSanitizer
|
||||
attr_reader :params, :resource_name, :resource_class
|
||||
|
||||
def initialize(resource_class, resource_name, params)
|
||||
@auth_keys = extract_auth_keys(resource_class)
|
||||
@params = params
|
||||
@resource_class = resource_class
|
||||
@resource_name = resource_name
|
||||
@permitted = {}
|
||||
|
||||
DEFAULT_PERMITTED_ATTRIBUTES.each_pair do |action, keys|
|
||||
permit(action, keys: keys)
|
||||
end
|
||||
@params = params
|
||||
@blocks = Hash.new
|
||||
end
|
||||
|
||||
# Sanitize the parameters for a specific +action+.
|
||||
#
|
||||
# === Arguments
|
||||
#
|
||||
# * +action+ - A +Symbol+ with the action that the controller is
|
||||
# performing, like +sign_up+, +sign_in+, etc.
|
||||
#
|
||||
# === Examples
|
||||
#
|
||||
# # Inside the `RegistrationsController#create` action.
|
||||
# resource = build_resource(devise_parameter_sanitizer.sanitize(:sign_up))
|
||||
# resource.save
|
||||
#
|
||||
# Returns an +ActiveSupport::HashWithIndifferentAccess+ with the permitted
|
||||
# attributes.
|
||||
def sanitize(action)
|
||||
permissions = @permitted[action]
|
||||
|
||||
# DEPRECATED: Remove this branch on Devise 4.2.
|
||||
if respond_to?(action, true)
|
||||
deprecate_instance_method_sanitization(action)
|
||||
return cast_to_hash send(action)
|
||||
end
|
||||
|
||||
if permissions.respond_to?(:call)
|
||||
cast_to_hash permissions.call(default_params)
|
||||
elsif permissions.present?
|
||||
cast_to_hash permit_keys(default_params, permissions)
|
||||
else
|
||||
unknown_action!(action)
|
||||
end
|
||||
end
|
||||
|
||||
# Add or remove new parameters to the permitted list of an +action+.
|
||||
#
|
||||
# === Arguments
|
||||
#
|
||||
# * +action+ - A +Symbol+ with the action that the controller is
|
||||
# performing, like +sign_up+, +sign_in+, etc.
|
||||
# * +keys:+ - An +Array+ of keys that also should be permitted.
|
||||
# * +except:+ - An +Array+ of keys that shouldn't be permitted.
|
||||
# * +block+ - A block that should be used to permit the action
|
||||
# parameters instead of the +Array+ based approach. The block will be
|
||||
# called with an +ActionController::Parameters+ instance.
|
||||
#
|
||||
# === Examples
|
||||
#
|
||||
# # Adding new parameters to be permitted in the `sign_up` action.
|
||||
# devise_parameter_sanitizer.permit(:sign_up, keys: [:subscribe_newsletter])
|
||||
#
|
||||
# # Removing the `password` parameter from the `account_update` action.
|
||||
# devise_parameter_sanitizer.permit(:account_update, except: [:password])
|
||||
#
|
||||
# # Using the block form to completely override how we permit the
|
||||
# # parameters for the `sign_up` action.
|
||||
# devise_parameter_sanitizer.permit(:sign_up) do |user|
|
||||
# user.permit(:email, :password, :password_confirmation)
|
||||
# end
|
||||
#
|
||||
#
|
||||
# Returns nothing.
|
||||
def permit(action, keys: nil, except: nil, &block)
|
||||
def for(kind, &block)
|
||||
if block_given?
|
||||
@permitted[action] = block
|
||||
end
|
||||
|
||||
if keys.present?
|
||||
@permitted[action] ||= @auth_keys.dup
|
||||
@permitted[action].concat(keys)
|
||||
end
|
||||
|
||||
if except.present?
|
||||
@permitted[action] ||= @auth_keys.dup
|
||||
@permitted[action] = @permitted[action] - except
|
||||
@blocks[kind] = block
|
||||
else
|
||||
default_for(kind)
|
||||
end
|
||||
end
|
||||
|
||||
# DEPRECATED: Remove this method on Devise 4.2.
|
||||
def for(action, &block) # :nodoc:
|
||||
if block_given?
|
||||
deprecate_for_with_block(action)
|
||||
permit(action, &block)
|
||||
def sanitize(kind)
|
||||
if block = @blocks[kind]
|
||||
block.call(default_params)
|
||||
else
|
||||
deprecate_for_without_block(action)
|
||||
@permitted[action] or unknown_action!(action)
|
||||
default_sanitize(kind)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Cast a sanitized +ActionController::Parameters+ to a +HashWithIndifferentAccess+
|
||||
# that can be used elsewhere.
|
||||
#
|
||||
# Returns an +ActiveSupport::HashWithIndifferentAccess+.
|
||||
def cast_to_hash(params)
|
||||
# TODO: Remove the `with_indifferent_access` method call when we only support Rails 5+.
|
||||
params && params.to_h.with_indifferent_access
|
||||
def default_for(kind)
|
||||
raise ArgumentError, "a block is expected in Devise base sanitizer"
|
||||
end
|
||||
|
||||
def default_sanitize(kind)
|
||||
default_params
|
||||
end
|
||||
|
||||
def default_params
|
||||
@params.fetch(@resource_name, {})
|
||||
params.fetch(resource_name, {})
|
||||
end
|
||||
end
|
||||
|
||||
class ParameterSanitizer < BaseSanitizer
|
||||
def initialize(*)
|
||||
super
|
||||
@permitted = Hash.new { |h,k| h[k] = attributes_for(k) }
|
||||
end
|
||||
|
||||
def permit_keys(parameters, keys)
|
||||
parameters.permit(*keys)
|
||||
def sign_in
|
||||
permit self.for(:sign_in)
|
||||
end
|
||||
|
||||
def extract_auth_keys(klass)
|
||||
auth_keys = klass.authentication_keys
|
||||
|
||||
auth_keys.respond_to?(:keys) ? auth_keys.keys : auth_keys
|
||||
def sign_up
|
||||
permit self.for(:sign_up)
|
||||
end
|
||||
|
||||
def unknown_action!(action)
|
||||
raise NotImplementedError, <<-MESSAGE.strip_heredoc
|
||||
"Devise doesn't know how to sanitize parameters for '#{action}'".
|
||||
If you want to define a new set of parameters to be sanitized use the
|
||||
`permit` method first:
|
||||
|
||||
devise_parameter_sanitizer.permit(:#{action}, keys: [:param1, :param2, :param3])
|
||||
MESSAGE
|
||||
def account_update
|
||||
permit self.for(:account_update)
|
||||
end
|
||||
|
||||
def deprecate_for_with_block(action)
|
||||
ActiveSupport::Deprecation.warn(<<-MESSAGE.strip_heredoc)
|
||||
[Devise] Changing the sanitized parameters through "#{self.class.name}#for(#{action}) is deprecated and it will be removed from Devise 4.2.
|
||||
Please use the `permit` method:
|
||||
private
|
||||
|
||||
devise_parameter_sanitizer.permit(:#{action}) do |user|
|
||||
# Your block here.
|
||||
end
|
||||
MESSAGE
|
||||
# TODO: We do need to flatten so it works with strong_parameters
|
||||
# gem. We should drop it once we move to Rails 4 only support.
|
||||
def permit(keys)
|
||||
default_params.permit(*Array(keys))
|
||||
end
|
||||
|
||||
def deprecate_for_without_block(action)
|
||||
ActiveSupport::Deprecation.warn(<<-MESSAGE.strip_heredoc)
|
||||
[Devise] Changing the sanitized parameters through "#{self.class.name}#for(#{action}) is deprecated and it will be removed from Devise 4.2.
|
||||
Please use the `permit` method to add or remove any key:
|
||||
|
||||
To add any new key, use the `keys` keyword argument:
|
||||
devise_parameter_sanitizer.permit(:#{action}, keys: [:param1, :param2, :param3])
|
||||
|
||||
To remove any existing key, use the `except` keyword argument:
|
||||
devise_parameter_sanitizer.permit(:#{action}, except: [:email])
|
||||
MESSAGE
|
||||
# Change for(kind) to return the values in the @permitted
|
||||
# hash, allowing the developer to customize at runtime.
|
||||
def default_for(kind)
|
||||
@permitted[kind] || raise("No sanitizer provided for #{kind}")
|
||||
end
|
||||
|
||||
def deprecate_instance_method_sanitization(action)
|
||||
ActiveSupport::Deprecation.warn(<<-MESSAGE.strip_heredoc)
|
||||
[Devise] Parameter sanitization through a "#{self.class.name}##{action}" method is deprecated and it will be removed from Devise 4.2.
|
||||
Please use the `permit` method on your sanitizer `initialize` method.
|
||||
def default_sanitize(kind)
|
||||
if respond_to?(kind, true)
|
||||
send(kind)
|
||||
else
|
||||
raise NotImplementedError, "Devise doesn't know how to sanitize parameters for #{kind}"
|
||||
end
|
||||
end
|
||||
|
||||
class #{self.class.name} < Devise::ParameterSanitizer
|
||||
def initialize(*)
|
||||
super
|
||||
permit(:#{action}, keys: [:param1, :param2, :param3])
|
||||
end
|
||||
end
|
||||
MESSAGE
|
||||
def attributes_for(kind)
|
||||
case kind
|
||||
when :sign_in
|
||||
auth_keys + [:password, :remember_me]
|
||||
when :sign_up
|
||||
auth_keys + [:password, :password_confirmation]
|
||||
when :account_update
|
||||
auth_keys + [:password, :password_confirmation, :current_password]
|
||||
end
|
||||
end
|
||||
|
||||
def auth_keys
|
||||
@auth_keys ||= @resource_class.authentication_keys.respond_to?(:keys) ?
|
||||
@resource_class.authentication_keys.keys : @resource_class.authentication_keys
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -39,9 +39,18 @@ module Devise
|
||||
Devise.token_generator ||=
|
||||
if secret_key = Devise.secret_key
|
||||
Devise::TokenGenerator.new(
|
||||
ActiveSupport::CachingKeyGenerator.new(ActiveSupport::KeyGenerator.new(secret_key))
|
||||
Devise::CachingKeyGenerator.new(Devise::KeyGenerator.new(secret_key))
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
initializer "devise.fix_routes_proxy_missing_respond_to_bug" do
|
||||
# Deprecate: Remove once we move to Rails 4 only.
|
||||
ActionDispatch::Routing::RoutesProxy.class_eval do
|
||||
def respond_to?(method, include_private = false)
|
||||
super || routes.url_helpers.respond_to?(method)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
require "active_support/core_ext/object/try"
|
||||
require "active_support/core_ext/hash/slice"
|
||||
|
||||
module Devise
|
||||
module RouteSet
|
||||
def finalize!
|
||||
result = super
|
||||
module ActionDispatch::Routing
|
||||
class RouteSet #:nodoc:
|
||||
# Ensure Devise modules are included only after loading routes, because we
|
||||
# need devise_for mappings already declared to create filters and helpers.
|
||||
def finalize_with_devise!
|
||||
result = finalize_without_devise!
|
||||
|
||||
@devise_finalized ||= begin
|
||||
if Devise.router_name.nil? && defined?(@devise_finalized) && self != Rails.application.try(:routes)
|
||||
warn "[DEVISE] We have detected that you are using devise_for inside engine routes. " \
|
||||
@@ -18,16 +21,10 @@ module Devise
|
||||
Devise.regenerate_helpers!
|
||||
true
|
||||
end
|
||||
|
||||
result
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module ActionDispatch::Routing
|
||||
class RouteSet #:nodoc:
|
||||
# Ensure Devise modules are included only after loading routes, because we
|
||||
# need devise_for mappings already declared to create filters and helpers.
|
||||
prepend Devise::RouteSet
|
||||
alias_method_chain :finalize!, :devise
|
||||
end
|
||||
|
||||
class Mapper
|
||||
@@ -87,17 +84,17 @@ module ActionDispatch::Routing
|
||||
#
|
||||
# You can configure your routes with some options:
|
||||
#
|
||||
# * class_name: set up a different class to be looked up by devise, if it cannot be
|
||||
# * class_name: setup a different class to be looked up by devise, if it cannot be
|
||||
# properly found by the route name.
|
||||
#
|
||||
# devise_for :users, class_name: 'Account'
|
||||
#
|
||||
# * path: allows you to set up path name that will be used, as rails routes does.
|
||||
# The following route configuration would set up your route as /accounts instead of /users:
|
||||
# * path: allows you to setup path name that will be used, as rails routes does.
|
||||
# The following route configuration would setup your route as /accounts instead of /users:
|
||||
#
|
||||
# devise_for :users, path: 'accounts'
|
||||
#
|
||||
# * singular: set up the singular name for the given resource. This is used as the helper methods
|
||||
# * singular: setup the singular name for the given resource. This is used as the helper methods
|
||||
# names in controller ("authenticate_#{singular}!", "#{singular}_signed_in?", "current_#{singular}"
|
||||
# and "#{singular}_session"), as the scope name in routes and as the scope given to warden.
|
||||
#
|
||||
@@ -108,7 +105,7 @@ module ActionDispatch::Routing
|
||||
# end
|
||||
#
|
||||
# class ManagerController < ApplicationController
|
||||
# before_action authenticate_manager!
|
||||
# before_filter authenticate_manager!
|
||||
#
|
||||
# def show
|
||||
# @manager = current_manager
|
||||
@@ -431,29 +428,27 @@ options to another `devise_for` call outside the scope. Here is an example:
|
||||
end
|
||||
ERROR
|
||||
end
|
||||
current_scope = @scope.dup
|
||||
if @scope.respond_to? :new
|
||||
@scope = @scope.new path: nil
|
||||
else
|
||||
@scope[:path] = nil
|
||||
end
|
||||
|
||||
path, @scope[:path] = @scope[:path], nil
|
||||
path_prefix = Devise.omniauth_path_prefix || "/#{mapping.fullpath}/auth".squeeze("/")
|
||||
|
||||
set_omniauth_path_prefix!(path_prefix)
|
||||
|
||||
mapping.to.omniauth_providers.each do |provider|
|
||||
match "#{path_prefix}/#{provider}",
|
||||
to: "#{controllers[:omniauth_callbacks]}#passthru",
|
||||
as: "#{provider}_omniauth_authorize",
|
||||
via: [:get, :post]
|
||||
providers = Regexp.union(mapping.to.omniauth_providers.map(&:to_s))
|
||||
|
||||
match "#{path_prefix}/#{provider}/callback",
|
||||
to: "#{controllers[:omniauth_callbacks]}##{provider}",
|
||||
as: "#{provider}_omniauth_callback",
|
||||
via: [:get, :post]
|
||||
end
|
||||
match "#{path_prefix}/:provider",
|
||||
constraints: { provider: providers },
|
||||
to: "#{controllers[:omniauth_callbacks]}#passthru",
|
||||
as: :omniauth_authorize,
|
||||
via: [:get, :post]
|
||||
|
||||
match "#{path_prefix}/:action/callback",
|
||||
constraints: { action: providers },
|
||||
to: "#{controllers[:omniauth_callbacks]}#:action",
|
||||
as: :omniauth_callback,
|
||||
via: [:get, :post]
|
||||
ensure
|
||||
@scope = current_scope
|
||||
@scope[:path] = path
|
||||
end
|
||||
|
||||
def with_devise_exclusive_scope(new_path, new_as, options) #:nodoc:
|
||||
@@ -462,11 +457,7 @@ ERROR
|
||||
exclusive = { as: new_as, path: new_path, module: nil }
|
||||
exclusive.merge!(options.slice(:constraints, :defaults, :options))
|
||||
|
||||
if @scope.respond_to? :new
|
||||
@scope = @scope.new exclusive
|
||||
else
|
||||
exclusive.each_pair { |key, value| @scope[key] = value }
|
||||
end
|
||||
exclusive.each_pair { |key, value| @scope[key] = value }
|
||||
yield
|
||||
ensure
|
||||
@scope = current_scope
|
||||
|
||||
@@ -3,8 +3,17 @@ module Warden::Mixins::Common
|
||||
@request ||= ActionDispatch::Request.new(env)
|
||||
end
|
||||
|
||||
# Deprecate: Remove this check once we move to Rails 4 only.
|
||||
NULL_STORE =
|
||||
defined?(ActionController::RequestForgeryProtection::ProtectionMethods::NullSession::NullSessionHash) ?
|
||||
ActionController::RequestForgeryProtection::ProtectionMethods::NullSession::NullSessionHash : nil
|
||||
|
||||
def reset_session!
|
||||
request.reset_session
|
||||
# Calling reset_session on NULL_STORE causes it fail.
|
||||
# This is a bug that needs to be fixed in Rails.
|
||||
unless NULL_STORE && request.session.is_a?(NULL_STORE)
|
||||
request.reset_session
|
||||
end
|
||||
end
|
||||
|
||||
def cookies
|
||||
|
||||
@@ -6,15 +6,15 @@ module Devise
|
||||
class DatabaseAuthenticatable < Authenticatable
|
||||
def authenticate!
|
||||
resource = password.present? && mapping.to.find_for_database_authentication(authentication_hash)
|
||||
hashed = false
|
||||
encrypted = false
|
||||
|
||||
if validate(resource){ hashed = true; resource.valid_password?(password) }
|
||||
if validate(resource){ encrypted = true; resource.valid_password?(password) }
|
||||
remember_me(resource)
|
||||
resource.after_database_authentication
|
||||
success!(resource)
|
||||
end
|
||||
|
||||
mapping.to.new.password = password if !hashed && Devise.paranoid
|
||||
mapping.to.new.password = password if !encrypted && Devise.paranoid
|
||||
fail(:not_found_in_database) unless resource
|
||||
end
|
||||
end
|
||||
|
||||
@@ -16,13 +16,10 @@ module Devise
|
||||
# Override process to consider warden.
|
||||
def process(*)
|
||||
# Make sure we always return @response, a la ActionController::TestCase::Behaviour#process, even if warden interrupts
|
||||
_catch_warden { super } # || @response # _catch_warden will setup the @response object
|
||||
|
||||
# process needs to return the ActionDispath::TestResponse object
|
||||
@response
|
||||
_catch_warden { super } || @response
|
||||
end
|
||||
|
||||
# We need to set up the environment variables and the response in the controller.
|
||||
# We need to setup the environment variables and the response in the controller.
|
||||
def setup_controller_for_warden #:nodoc:
|
||||
@request.env['action_controller.instance'] = @controller
|
||||
end
|
||||
@@ -112,9 +109,8 @@ module Devise
|
||||
|
||||
status, headers, response = Devise.warden_config[:failure_app].call(env).to_a
|
||||
@controller.response.headers.merge!(headers)
|
||||
r_opts = { status: status, content_type: headers["Content-Type"], location: headers["Location"] }
|
||||
r_opts[Rails.version.start_with?('5') ? :body : :text] = response.body
|
||||
@controller.send :render, r_opts
|
||||
@controller.send :render, status: status, text: response.body,
|
||||
content_type: headers["Content-Type"], location: headers["Location"]
|
||||
nil # causes process return @response
|
||||
end
|
||||
|
||||
@@ -126,8 +122,7 @@ module Devise
|
||||
# ensure the controller response is set to our response.
|
||||
@controller.response ||= @response
|
||||
@response.status = ret.first
|
||||
@response.headers.clear
|
||||
ret.second.each { |k,v| @response[k] = v }
|
||||
@response.headers = ret.second
|
||||
@response.body = ret.third
|
||||
end
|
||||
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
# Deprecate: Copied verbatim from Rails source, remove once we move to Rails 4 only.
|
||||
require 'thread_safe'
|
||||
require 'openssl'
|
||||
require 'securerandom'
|
||||
|
||||
module Devise
|
||||
class TokenGenerator
|
||||
def initialize(key_generator, digest = "SHA256")
|
||||
def initialize(key_generator, digest="SHA256")
|
||||
@key_generator = key_generator
|
||||
@digest = digest
|
||||
end
|
||||
@@ -27,4 +30,41 @@ module Devise
|
||||
@key_generator.generate_key("Devise #{column}")
|
||||
end
|
||||
end
|
||||
|
||||
# KeyGenerator is a simple wrapper around OpenSSL's implementation of PBKDF2
|
||||
# It can be used to derive a number of keys for various purposes from a given secret.
|
||||
# This lets Rails applications have a single secure secret, but avoid reusing that
|
||||
# key in multiple incompatible contexts.
|
||||
class KeyGenerator
|
||||
def initialize(secret, options = {})
|
||||
@secret = secret
|
||||
# The default iterations are higher than required for our key derivation uses
|
||||
# on the off chance someone uses this for password storage
|
||||
@iterations = options[:iterations] || 2**16
|
||||
end
|
||||
|
||||
# Returns a derived key suitable for use. The default key_size is chosen
|
||||
# to be compatible with the default settings of ActiveSupport::MessageVerifier.
|
||||
# i.e. OpenSSL::Digest::SHA1#block_length
|
||||
def generate_key(salt, key_size=64)
|
||||
OpenSSL::PKCS5.pbkdf2_hmac_sha1(@secret, salt, @iterations, key_size)
|
||||
end
|
||||
end
|
||||
|
||||
# CachingKeyGenerator is a wrapper around KeyGenerator which allows users to avoid
|
||||
# re-executing the key generation process when it's called using the same salt and
|
||||
# key_size
|
||||
class CachingKeyGenerator
|
||||
def initialize(key_generator)
|
||||
@key_generator = key_generator
|
||||
@cache_keys = ThreadSafe::Cache.new
|
||||
end
|
||||
|
||||
# Returns a derived key suitable for use. The default key_size is chosen
|
||||
# to be compatible with the default settings of ActiveSupport::MessageVerifier.
|
||||
# i.e. OpenSSL::Digest::SHA1#block_length
|
||||
def generate_key(salt, key_size=64)
|
||||
@cache_keys["#{salt}#{key_size}"] ||= @key_generator.generate_key(salt, key_size)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
module Devise
|
||||
VERSION = "4.1.0".freeze
|
||||
VERSION = "3.5.9".freeze
|
||||
end
|
||||
|
||||
@@ -11,9 +11,9 @@ module ActiveRecord
|
||||
|
||||
def copy_devise_migration
|
||||
if (behavior == :invoke && model_exists?) || (behavior == :revoke && migration_exists?(table_name))
|
||||
migration_template "migration_existing.rb", "db/migrate/add_devise_to_#{table_name}.rb", migration_version: migration_version
|
||||
migration_template "migration_existing.rb", "db/migrate/add_devise_to_#{table_name}.rb"
|
||||
else
|
||||
migration_template "migration.rb", "db/migrate/devise_create_#{table_name}.rb", migration_version: migration_version
|
||||
migration_template "migration.rb", "db/migrate/devise_create_#{table_name}.rb"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -75,23 +75,17 @@ RUBY
|
||||
end
|
||||
|
||||
def inet?
|
||||
postgresql?
|
||||
rails4? && postgresql?
|
||||
end
|
||||
|
||||
def rails5?
|
||||
Rails.version.start_with? '5'
|
||||
def rails4?
|
||||
Rails.version.start_with? '4'
|
||||
end
|
||||
|
||||
def postgresql?
|
||||
config = ActiveRecord::Base.configurations[Rails.env]
|
||||
config && config['adapter'] == 'postgresql'
|
||||
end
|
||||
|
||||
def migration_version
|
||||
if rails5?
|
||||
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
class DeviseCreate<%= table_name.camelize %> < ActiveRecord::Migration<%= migration_version %>
|
||||
class DeviseCreate<%= table_name.camelize %> < ActiveRecord::Migration
|
||||
def change
|
||||
create_table :<%= table_name %> do |t|
|
||||
create_table(:<%= table_name %>) do |t|
|
||||
<%= migration_data -%>
|
||||
|
||||
<% attributes.each do |attribute| -%>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
class AddDeviseTo<%= table_name.camelize %> < ActiveRecord::Migration<%= migration_version %>
|
||||
class AddDeviseTo<%= table_name.camelize %> < ActiveRecord::Migration
|
||||
def self.up
|
||||
change_table :<%= table_name %> do |t|
|
||||
change_table(:<%= table_name %>) do |t|
|
||||
<%= migration_data -%>
|
||||
|
||||
<% attributes.each do |attribute| -%>
|
||||
|
||||
@@ -3,8 +3,6 @@ require 'securerandom'
|
||||
|
||||
module Devise
|
||||
module Generators
|
||||
MissingORMError = Class.new(Thor::Error)
|
||||
|
||||
class InstallGenerator < Rails::Generators::Base
|
||||
source_root File.expand_path("../../templates", __FILE__)
|
||||
|
||||
@@ -12,19 +10,6 @@ module Devise
|
||||
class_option :orm
|
||||
|
||||
def copy_initializer
|
||||
unless options[:orm]
|
||||
raise MissingORMError, <<-ERROR.strip_heredoc
|
||||
An ORM must be set to install Devise in your application.
|
||||
|
||||
Be sure to have an ORM like Active Record or Mongoid loaded in your
|
||||
app or configure your own at `config/application.rb`.
|
||||
|
||||
config.generators do |g|
|
||||
g.orm :your_orm_gem
|
||||
end
|
||||
ERROR
|
||||
end
|
||||
|
||||
template "devise.rb", "config/initializers/devise.rb"
|
||||
end
|
||||
|
||||
|
||||
@@ -8,14 +8,31 @@ module Devise
|
||||
devise :database_authenticatable, :registerable,
|
||||
:recoverable, :rememberable, :trackable, :validatable
|
||||
|
||||
CONTENT
|
||||
buffer += <<-CONTENT if needs_attr_accessible?
|
||||
# Setup accessible (or protected) attributes for your model
|
||||
attr_accessible :email, :password, :password_confirmation, :remember_me
|
||||
|
||||
CONTENT
|
||||
buffer
|
||||
end
|
||||
|
||||
def needs_attr_accessible?
|
||||
rails_3? && !strong_parameters_enabled?
|
||||
end
|
||||
|
||||
def rails_3?
|
||||
Rails::VERSION::MAJOR == 3
|
||||
end
|
||||
|
||||
def strong_parameters_enabled?
|
||||
defined?(ActionController::StrongParameters)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def model_exists?
|
||||
File.exist?(File.join(destination_root, model_path))
|
||||
File.exists?(File.join(destination_root, model_path))
|
||||
end
|
||||
|
||||
def migration_exists?(table_name)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
class <%= @scope_prefix %>RegistrationsController < Devise::RegistrationsController
|
||||
# before_action :configure_sign_up_params, only: [:create]
|
||||
# before_action :configure_account_update_params, only: [:update]
|
||||
# before_filter :configure_sign_up_params, only: [:create]
|
||||
# before_filter :configure_account_update_params, only: [:update]
|
||||
|
||||
# GET /resource/sign_up
|
||||
# def new
|
||||
@@ -40,12 +40,12 @@ class <%= @scope_prefix %>RegistrationsController < Devise::RegistrationsControl
|
||||
|
||||
# If you have extra params to permit, append them to the sanitizer.
|
||||
# def configure_sign_up_params
|
||||
# devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute])
|
||||
# devise_parameter_sanitizer.for(:sign_up) << :attribute
|
||||
# end
|
||||
|
||||
# If you have extra params to permit, append them to the sanitizer.
|
||||
# def configure_account_update_params
|
||||
# devise_parameter_sanitizer.permit(:account_update, keys: [:attribute])
|
||||
# devise_parameter_sanitizer.for(:account_update) << :attribute
|
||||
# end
|
||||
|
||||
# The path used after sign up.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
class <%= @scope_prefix %>SessionsController < Devise::SessionsController
|
||||
# before_action :configure_sign_in_params, only: [:create]
|
||||
# before_filter :configure_sign_in_params, only: [:create]
|
||||
|
||||
# GET /resource/sign_in
|
||||
# def new
|
||||
@@ -20,6 +20,6 @@ class <%= @scope_prefix %>SessionsController < Devise::SessionsController
|
||||
|
||||
# If you have extra params to permit, append them to the sanitizer.
|
||||
# def configure_sign_in_params
|
||||
# devise_parameter_sanitizer.permit(:sign_in, keys: [:attribute])
|
||||
# devise_parameter_sanitizer.for(:sign_in) << :attribute
|
||||
# end
|
||||
end
|
||||
|
||||
33
lib/generators/templates/devise.rb
Executable file → Normal file
33
lib/generators/templates/devise.rb
Executable file → Normal file
@@ -4,9 +4,13 @@ Devise.setup do |config|
|
||||
# The secret key used by Devise. Devise uses this key to generate
|
||||
# random tokens. Changing this key will render invalid all existing
|
||||
# confirmation, reset password and unlock tokens in the database.
|
||||
# Devise will use the `secret_key_base` as its `secret_key`
|
||||
# Devise will use the `secret_key_base` on Rails 4+ applications as its `secret_key`
|
||||
# by default. You can change it below and use your own secret key.
|
||||
<% if rails_4? -%>
|
||||
# config.secret_key = '<%= SecureRandom.hex(64) %>'
|
||||
<% else -%>
|
||||
config.secret_key = '<%= SecureRandom.hex(64) %>'
|
||||
<% end -%>
|
||||
|
||||
# ==> Mailer Configuration
|
||||
# Configure the e-mail address which will be shown in Devise::Mailer,
|
||||
@@ -17,9 +21,6 @@ Devise.setup do |config|
|
||||
# Configure the class responsible to send e-mails.
|
||||
# config.mailer = 'Devise::Mailer'
|
||||
|
||||
# Configure the parent class responsible to send e-mails.
|
||||
# config.parent_mailer = 'ActionMailer::Base'
|
||||
|
||||
# ==> ORM configuration
|
||||
# Load and configure the ORM. Supports :active_record (default) and
|
||||
# :mongoid (bson_ext recommended) by default. Other ORMs may be
|
||||
@@ -91,17 +92,17 @@ Devise.setup do |config|
|
||||
# config.clean_up_csrf_token_on_authentication = true
|
||||
|
||||
# ==> Configuration for :database_authenticatable
|
||||
# For bcrypt, this is the cost for hashing the password and defaults to 11. If
|
||||
# using other algorithms, it sets how many times you want the password to be hashed.
|
||||
# For bcrypt, this is the cost for hashing the password and defaults to 10. If
|
||||
# using other encryptors, it sets how many times you want the password re-encrypted.
|
||||
#
|
||||
# Limiting the stretches to just one in testing will increase the performance of
|
||||
# your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use
|
||||
# a value less than 10 in other environments. Note that, for bcrypt (the default
|
||||
# algorithm), the cost increases exponentially with the number of stretches (e.g.
|
||||
# encryptor), the cost increases exponentially with the number of stretches (e.g.
|
||||
# a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation).
|
||||
config.stretches = Rails.env.test? ? 1 : 11
|
||||
config.stretches = Rails.env.test? ? 1 : 10
|
||||
|
||||
# Set up a pepper to generate the hashed password.
|
||||
# Setup a pepper to generate the encrypted password.
|
||||
# config.pepper = '<%= SecureRandom.hex(64) %>'
|
||||
|
||||
# Send a notification email when the user's password is changed
|
||||
@@ -148,12 +149,12 @@ Devise.setup do |config|
|
||||
|
||||
# ==> Configuration for :validatable
|
||||
# Range for password length.
|
||||
config.password_length = 6..128
|
||||
config.password_length = 8..72
|
||||
|
||||
# Email regex used to validate email formats. It simply asserts that
|
||||
# one (and only one) @ exists in the given string. This is mainly
|
||||
# to give user feedback and not to assert the e-mail validity.
|
||||
config.email_regexp = /\A[^@\s]+@[^@\s]+\z/
|
||||
# config.email_regexp = /\A[^@]+@[^@]+\z/
|
||||
|
||||
# ==> Configuration for :timeoutable
|
||||
# The time you want to timeout the user session without activity. After this
|
||||
@@ -201,11 +202,11 @@ Devise.setup do |config|
|
||||
# config.sign_in_after_reset_password = true
|
||||
|
||||
# ==> Configuration for :encryptable
|
||||
# Allow you to use another hashing or encryption algorithm besides bcrypt (default).
|
||||
# You can use :sha1, :sha512 or algorithms from others authentication tools 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).
|
||||
# Allow you to use another encryption algorithm besides bcrypt (default). You can use
|
||||
# :sha1, :sha512 or encryptors from others authentication tools 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).
|
||||
#
|
||||
# Require the `devise-encryptable` gem when using anything other than bcrypt
|
||||
# config.encryptor = :sha512
|
||||
|
||||
49
script/cached-bundle
Executable file
49
script/cached-bundle
Executable file
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env bash
|
||||
# Usage: cached-bundle install --deployment
|
||||
#
|
||||
# After running `bundle`, caches the `vendor/bundle` directory to S3.
|
||||
# On the next run, restores the cached directory before running `bundle`.
|
||||
# When `Gemfile.lock` changes, the cache gets rebuilt.
|
||||
#
|
||||
# Requirements:
|
||||
# - Gemfile.lock
|
||||
# - TRAVIS_REPO_SLUG
|
||||
# - TRAVIS_RUBY_VERSION
|
||||
# - AMAZON_S3_BUCKET
|
||||
# - script/s3-put
|
||||
# - bundle
|
||||
# - curl
|
||||
#
|
||||
# Author: Mislav Marohnić
|
||||
|
||||
set -e
|
||||
|
||||
compute_md5() {
|
||||
local output="$(openssl md5)"
|
||||
echo "${output##* }"
|
||||
}
|
||||
|
||||
download() {
|
||||
curl --tcp-nodelay -qsfL "$1" -o "$2"
|
||||
}
|
||||
|
||||
|
||||
gemfile="${BUNDLE_GEMFILE:-Gemfile}"
|
||||
bundle_fullpath="$(dirname $gemfile)/vendor/bundle"
|
||||
bundle_path=${bundle_fullpath#$PWD/}
|
||||
gemfile_hash="$(compute_md5 <"${gemfile}.lock")"
|
||||
cache_name="${TRAVIS_RUBY_VERSION}-${gemfile_hash}.tgz"
|
||||
fetch_url="http://${AMAZON_S3_BUCKET}.s3.amazonaws.com/${TRAVIS_REPO_SLUG}/${cache_name}"
|
||||
|
||||
if download "$fetch_url" "$cache_name"; then
|
||||
echo "Reusing cached bundle ${cache_name}"
|
||||
tar xzf "$cache_name"
|
||||
fi
|
||||
|
||||
bundle "$@"
|
||||
|
||||
if [ ! -f "$cache_name" ] && [ -n "$AMAZON_SECRET_ACCESS_KEY" ]; then
|
||||
echo "Caching \`${bundle_path}' to S3"
|
||||
tar czf "$cache_name" "$bundle_path"
|
||||
script/s3-put "$cache_name" "${AMAZON_S3_BUCKET}:${TRAVIS_REPO_SLUG}/${cache_name}"
|
||||
fi
|
||||
71
script/s3-put
Executable file
71
script/s3-put
Executable file
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env bash
|
||||
# Usage: s3-put <FILE> <S3_BUCKET>[:<PATH>] [<CONTENT_TYPE>]
|
||||
#
|
||||
# Uploads a file to the Amazon S3 service.
|
||||
# Outputs the URL for the newly uploaded file.
|
||||
#
|
||||
# Requirements:
|
||||
# - AMAZON_ACCESS_KEY_ID
|
||||
# - AMAZON_SECRET_ACCESS_KEY
|
||||
# - openssl
|
||||
# - curl
|
||||
#
|
||||
# Author: Mislav Marohnić
|
||||
|
||||
set -e
|
||||
|
||||
authorization() {
|
||||
local signature="$(string_to_sign | hmac_sha1 | base64)"
|
||||
echo "AWS ${AMAZON_ACCESS_KEY_ID?}:${signature}"
|
||||
}
|
||||
|
||||
hmac_sha1() {
|
||||
openssl dgst -binary -sha1 -hmac "${AMAZON_SECRET_ACCESS_KEY?}"
|
||||
}
|
||||
|
||||
base64() {
|
||||
openssl enc -base64
|
||||
}
|
||||
|
||||
bin_md5() {
|
||||
openssl dgst -binary -md5
|
||||
}
|
||||
|
||||
string_to_sign() {
|
||||
echo "$http_method"
|
||||
echo "$content_md5"
|
||||
echo "$content_type"
|
||||
echo "$date"
|
||||
echo "x-amz-acl:$acl"
|
||||
printf "/$bucket/$remote_path"
|
||||
}
|
||||
|
||||
date_string() {
|
||||
LC_TIME=C date "+%a, %d %h %Y %T %z"
|
||||
}
|
||||
|
||||
file="$1"
|
||||
bucket="${2%%:*}"
|
||||
remote_path="${2#*:}"
|
||||
content_type="$3"
|
||||
|
||||
if [ -z "$remote_path" ] || [ "$remote_path" = "$bucket" ]; then
|
||||
remote_path="${file##*/}"
|
||||
fi
|
||||
|
||||
http_method=PUT
|
||||
acl="public-read"
|
||||
content_md5="$(bin_md5 < "$file" | base64)"
|
||||
date="$(date_string)"
|
||||
|
||||
url="https://$bucket.s3.amazonaws.com/$remote_path"
|
||||
|
||||
curl -qsSf -T "$file" \
|
||||
-H "Authorization: $(authorization)" \
|
||||
-H "x-amz-acl: $acl" \
|
||||
-H "Date: $date" \
|
||||
-H "Content-MD5: $content_md5" \
|
||||
-H "Content-Type: $content_type" \
|
||||
"$url"
|
||||
|
||||
echo "$url"
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'test_helper'
|
||||
|
||||
class CustomRegistrationsControllerTest < Devise::ControllerTestCase
|
||||
class CustomRegistrationsControllerTest < ActionController::TestCase
|
||||
tests Custom::RegistrationsController
|
||||
|
||||
include Devise::TestHelpers
|
||||
@@ -12,24 +12,24 @@ class CustomRegistrationsControllerTest < Devise::ControllerTestCase
|
||||
end
|
||||
|
||||
test "yield resource to block on create success" do
|
||||
post :create, params: { user: { email: "user@example.org", password: "password", password_confirmation: "password" } }
|
||||
post :create, { user: { email: "user@example.org", password: "password", password_confirmation: "password" } }
|
||||
assert @controller.create_block_called?, "create failed to yield resource to provided block"
|
||||
end
|
||||
|
||||
test "yield resource to block on create failure" do
|
||||
post :create, params: { user: { } }
|
||||
post :create, { user: { } }
|
||||
assert @controller.create_block_called?, "create failed to yield resource to provided block"
|
||||
end
|
||||
|
||||
test "yield resource to block on update success" do
|
||||
sign_in @user
|
||||
put :update, params: { user: { current_password: @password } }
|
||||
put :update, { user: { current_password: @password } }
|
||||
assert @controller.update_block_called?, "update failed to yield resource to provided block"
|
||||
end
|
||||
|
||||
test "yield resource to block on update failure" do
|
||||
sign_in @user
|
||||
put :update, params: { user: { } }
|
||||
put :update, { user: { } }
|
||||
assert @controller.update_block_called?, "update failed to yield resource to provided block"
|
||||
end
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ class CustomStrategy < Warden::Strategies::Base
|
||||
end
|
||||
end
|
||||
|
||||
class CustomStrategyTest < Devise::ControllerTestCase
|
||||
class CustomStrategyTest < ActionController::TestCase
|
||||
tests CustomStrategyController
|
||||
|
||||
include Devise::TestHelpers
|
||||
@@ -41,9 +41,8 @@ class CustomStrategyTest < Devise::ControllerTestCase
|
||||
ret = get :new
|
||||
|
||||
# check the returned rack array
|
||||
# assert ret.is_a?(Array)
|
||||
# assert_equal 400, ret.first
|
||||
assert ret.is_a?(ActionDispatch::TestResponse)
|
||||
assert ret.is_a?(Array)
|
||||
assert_equal 400, ret.first
|
||||
|
||||
# check the saved response as well. This is purely so that the response is available to the testing framework
|
||||
# for verification. In production, the above array would be delivered directly to Rack.
|
||||
@@ -54,9 +53,8 @@ class CustomStrategyTest < Devise::ControllerTestCase
|
||||
ret = get :new
|
||||
|
||||
# check the returned rack array
|
||||
# assert ret.is_a?(Array)
|
||||
# assert_equal ret.third['X-FOO'], 'BAR'
|
||||
assert ret.is_a?(ActionDispatch::TestResponse)
|
||||
assert ret.is_a?(Array)
|
||||
assert_equal ret.third['X-FOO'], 'BAR'
|
||||
|
||||
# check the saved response headers as well.
|
||||
assert_equal response.headers['X-FOO'], 'BAR'
|
||||
|
||||
@@ -4,15 +4,14 @@ class ApiController < ActionController::Metal
|
||||
include Devise::Controllers::Helpers
|
||||
end
|
||||
|
||||
class HelperMethodsTest < Devise::ControllerTestCase
|
||||
class HelperMethodsTest < ActionController::TestCase
|
||||
tests ApiController
|
||||
|
||||
test 'includes Devise::Controllers::Helpers' do
|
||||
assert_includes @controller.class.ancestors, Devise::Controllers::Helpers
|
||||
end
|
||||
|
||||
test 'does not respond_to helper or helper_method' do
|
||||
refute_respond_to @controller.class, :helper
|
||||
test 'does not respond_to helper_method' do
|
||||
refute_respond_to @controller.class, :helper_method
|
||||
end
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
require 'test_helper'
|
||||
require 'ostruct'
|
||||
|
||||
class ControllerAuthenticatableTest < Devise::ControllerTestCase
|
||||
class ControllerAuthenticatableTest < ActionController::TestCase
|
||||
tests ApplicationController
|
||||
|
||||
def setup
|
||||
|
||||
@@ -14,7 +14,7 @@ class AnotherInheritedController < SessionsInheritedController
|
||||
end
|
||||
end
|
||||
|
||||
class InheritedControllerTest < Devise::ControllerTestCase
|
||||
class InheritedControllerTest < ActionController::TestCase
|
||||
tests SessionsInheritedController
|
||||
|
||||
def setup
|
||||
@@ -32,7 +32,7 @@ class InheritedControllerTest < Devise::ControllerTestCase
|
||||
end
|
||||
end
|
||||
|
||||
class AnotherInheritedControllerTest < Devise::ControllerTestCase
|
||||
class AnotherInheritedControllerTest < ActionController::TestCase
|
||||
tests AnotherInheritedController
|
||||
|
||||
def setup
|
||||
|
||||
@@ -3,7 +3,7 @@ require 'test_helper'
|
||||
class MyController < DeviseController
|
||||
end
|
||||
|
||||
class HelpersTest < Devise::ControllerTestCase
|
||||
class HelpersTest < ActionController::TestCase
|
||||
tests MyController
|
||||
|
||||
def setup
|
||||
@@ -36,16 +36,18 @@ class HelpersTest < Devise::ControllerTestCase
|
||||
test 'get resource params from request params using resource name as key' do
|
||||
user_params = {'email' => 'shirley@templar.com'}
|
||||
|
||||
# Stub controller name so strong parameters can filter properly.
|
||||
# DeviseController does not allow any parameters by default.
|
||||
@controller.stubs(:controller_name).returns(:sessions_controller)
|
||||
|
||||
params = ActionController::Parameters.new({'user' => user_params})
|
||||
params = if Devise.rails4?
|
||||
# Stub controller name so strong parameters can filter properly.
|
||||
# DeviseController does not allow any parameters by default.
|
||||
@controller.stubs(:controller_name).returns(:sessions_controller)
|
||||
|
||||
ActionController::Parameters.new({'user' => user_params})
|
||||
else
|
||||
HashWithIndifferentAccess.new({'user' => user_params})
|
||||
end
|
||||
@controller.stubs(:params).returns(params)
|
||||
|
||||
res_params = @controller.send(:resource_params).permit!.to_h
|
||||
assert_equal user_params, res_params
|
||||
assert_equal user_params, @controller.send(:resource_params)
|
||||
end
|
||||
|
||||
test 'resources methods are not controller actions' do
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'test_helper'
|
||||
|
||||
class LoadHooksControllerTest < Devise::ControllerTestCase
|
||||
class LoadHooksControllerTest < ActionController::TestCase
|
||||
setup do
|
||||
ActiveSupport.on_load(:devise_controller) do
|
||||
define_method :defined_by_load_hook do
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'test_helper'
|
||||
|
||||
class PasswordsControllerTest < Devise::ControllerTestCase
|
||||
class PasswordsControllerTest < ActionController::TestCase
|
||||
tests Devise::PasswordsController
|
||||
include Devise::TestHelpers
|
||||
|
||||
@@ -11,9 +11,8 @@ class PasswordsControllerTest < Devise::ControllerTestCase
|
||||
end
|
||||
|
||||
def put_update_with_params
|
||||
put :update, params: { "user" => {
|
||||
"reset_password_token" => @raw, "password" => "1234567", "password_confirmation" => "1234567"
|
||||
}
|
||||
put :update, "user" => {
|
||||
"reset_password_token" => @raw, "password" => "1234567", "password_confirmation" => "1234567"
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
@@ -1,21 +1,20 @@
|
||||
require 'test_helper'
|
||||
|
||||
class SessionsControllerTest < Devise::ControllerTestCase
|
||||
class SessionsControllerTest < ActionController::TestCase
|
||||
tests Devise::SessionsController
|
||||
include Devise::TestHelpers
|
||||
|
||||
test "#create doesn't raise unpermitted params when sign in fails" do
|
||||
begin
|
||||
subscriber = ActiveSupport::Notifications.subscribe %r{unpermitted_parameters} do |name, start, finish, id, payload|
|
||||
subscriber = ActiveSupport::Notifications.subscribe /unpermitted_parameters/ do |name, start, finish, id, payload|
|
||||
flunk "Unpermitted params: #{payload}"
|
||||
end
|
||||
request.env["devise.mapping"] = Devise.mappings[:user]
|
||||
request.session["user_return_to"] = 'foo.bar'
|
||||
create_user
|
||||
post :create, params: { user: {
|
||||
email: "wrong@email.com",
|
||||
password: "wrongpassword"
|
||||
}
|
||||
post :create, user: {
|
||||
email: "wrong@email.com",
|
||||
password: "wrongpassword"
|
||||
}
|
||||
assert_equal 200, @response.status
|
||||
ensure
|
||||
@@ -38,11 +37,11 @@ class SessionsControllerTest < Devise::ControllerTestCase
|
||||
|
||||
user = create_user
|
||||
user.confirm
|
||||
post :create, params: { user: {
|
||||
email: user.email,
|
||||
password: user.password
|
||||
}
|
||||
post :create, user: {
|
||||
email: user.email,
|
||||
password: user.password
|
||||
}
|
||||
|
||||
assert_nil request.session["user_return_to"]
|
||||
end
|
||||
|
||||
@@ -52,10 +51,9 @@ class SessionsControllerTest < Devise::ControllerTestCase
|
||||
|
||||
user = create_user
|
||||
user.confirm
|
||||
post :create, params: { format: 'json', user: {
|
||||
email: user.email,
|
||||
password: user.password
|
||||
}
|
||||
post :create, format: 'json', user: {
|
||||
email: user.email,
|
||||
password: user.password
|
||||
}
|
||||
|
||||
assert_equal 'foo.bar', request.session["user_return_to"]
|
||||
@@ -63,10 +61,9 @@ class SessionsControllerTest < Devise::ControllerTestCase
|
||||
|
||||
test "#create doesn't raise exception after Warden authentication fails when TestHelpers included" do
|
||||
request.env["devise.mapping"] = Devise.mappings[:user]
|
||||
post :create, params: { user: {
|
||||
email: "nosuchuser@example.com",
|
||||
password: "wevdude"
|
||||
}
|
||||
post :create, user: {
|
||||
email: "nosuchuser@example.com",
|
||||
password: "wevdude"
|
||||
}
|
||||
assert_equal 200, @response.status
|
||||
assert_template "devise/sessions/new"
|
||||
@@ -76,11 +73,11 @@ class SessionsControllerTest < Devise::ControllerTestCase
|
||||
request.env["devise.mapping"] = Devise.mappings[:user]
|
||||
user = create_user
|
||||
user.confirm
|
||||
post :create, params: { format: 'json', user: {
|
||||
email: user.email,
|
||||
password: user.password
|
||||
}
|
||||
post :create, format: 'json', user: {
|
||||
email: user.email,
|
||||
password: user.password
|
||||
}
|
||||
|
||||
delete :destroy, format: 'json'
|
||||
assert flash[:notice].blank?, "flash[:notice] should be blank, not #{flash[:notice].inspect}"
|
||||
assert_equal 204, @response.status
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'test_helper'
|
||||
|
||||
class RoutesTest < Devise::ControllerTestCase
|
||||
class RoutesTest < ActionController::TestCase
|
||||
tests ApplicationController
|
||||
|
||||
def assert_path_and_url(name, prepend_path=nil)
|
||||
|
||||
4
test/devise_test.rb
Executable file → Normal file
4
test/devise_test.rb
Executable file → Normal file
@@ -94,8 +94,8 @@ class DeviseTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
test 'Devise.email_regexp should match valid email addresses' do
|
||||
valid_emails = ["test@example.com", "jo@jo.co", "f4$_m@you.com", "testing.example@example.com.ua", "test@tt", "test@valid---domain.com"]
|
||||
non_valid_emails = ["rex", "test user@example.com", "test_user@example server.com"]
|
||||
valid_emails = ["test@example.com", "jo@jo.co", "f4$_m@you.com", "testing.example@example.com.ua"]
|
||||
non_valid_emails = ["rex", "test@go,com", "test user@example.com", "test_user@example server.com", "test_user@example.com."]
|
||||
|
||||
valid_emails.each do |email|
|
||||
assert_match Devise.email_regexp, email
|
||||
|
||||
@@ -53,16 +53,11 @@ class FailureTest < ActiveSupport::TestCase
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'warden.options' => { scope: :user },
|
||||
'rack.session' => {},
|
||||
'action_dispatch.request.formats' => Array(env_params.delete('formats') || Mime[:html]),
|
||||
'action_dispatch.request.formats' => Array(env_params.delete('formats') || Mime::HTML),
|
||||
'rack.input' => "",
|
||||
'warden' => OpenStruct.new(message: nil)
|
||||
}.merge!(env_params)
|
||||
|
||||
# Passing nil for action_dispatch.request.formats prevents the default from being used in Rails 5, need to remove it
|
||||
if env.has_key?('action_dispatch.request.formats') && env['action_dispatch.request.formats'].nil?
|
||||
env.delete 'action_dispatch.request.formats' unless env['action_dispatch.request.formats']
|
||||
end
|
||||
|
||||
@response = (env.delete(:app) || Devise::FailureApp).call(env).to_a
|
||||
@request = ActionDispatch::Request.new(env)
|
||||
end
|
||||
@@ -133,14 +128,14 @@ class FailureTest < ActiveSupport::TestCase
|
||||
|
||||
test 'uses the proxy failure message as symbol' do
|
||||
call_failure('warden' => OpenStruct.new(message: :invalid))
|
||||
assert_equal 'Invalid Email or password.', @request.flash[:alert]
|
||||
assert_equal 'Invalid email or password.', @request.flash[:alert]
|
||||
assert_equal 'http://test.host/users/sign_in', @response.second["Location"]
|
||||
end
|
||||
|
||||
test 'supports authentication_keys as a Hash for the flash message' do
|
||||
swap Devise, authentication_keys: { email: true, login: true } do
|
||||
call_failure('warden' => OpenStruct.new(message: :invalid))
|
||||
assert_equal 'Invalid Email, Login or password.', @request.flash[:alert]
|
||||
assert_equal 'Invalid email, login or password.', @request.flash[:alert]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -160,7 +155,7 @@ class FailureTest < ActiveSupport::TestCase
|
||||
assert_equal 'text/html; charset=utf-8', @response.second['Content-Type']
|
||||
end
|
||||
|
||||
test 'set up a default message' do
|
||||
test 'setup a default message' do
|
||||
call_failure
|
||||
assert_match(/You are being/, @response.last.body)
|
||||
assert_match(/redirected/, @response.last.body)
|
||||
@@ -169,14 +164,14 @@ class FailureTest < ActiveSupport::TestCase
|
||||
|
||||
test 'works for any navigational format' do
|
||||
swap Devise, navigational_formats: [:xml] do
|
||||
call_failure('formats' => Mime[:xml])
|
||||
call_failure('formats' => Mime::XML)
|
||||
assert_equal 302, @response.first
|
||||
end
|
||||
end
|
||||
|
||||
test 'redirects the correct format if it is a non-html format request' do
|
||||
swap Devise, navigational_formats: [:js] do
|
||||
call_failure('formats' => Mime[:js])
|
||||
call_failure('formats' => Mime::JS)
|
||||
assert_equal 'http://test.host/users/sign_in.js', @response.second["Location"]
|
||||
end
|
||||
end
|
||||
@@ -184,18 +179,18 @@ class FailureTest < ActiveSupport::TestCase
|
||||
|
||||
context 'For HTTP request' do
|
||||
test 'return 401 status' do
|
||||
call_failure('formats' => Mime[:xml])
|
||||
call_failure('formats' => Mime::XML)
|
||||
assert_equal 401, @response.first
|
||||
end
|
||||
|
||||
test 'return appropriate body for xml' do
|
||||
call_failure('formats' => Mime[:xml])
|
||||
call_failure('formats' => Mime::XML)
|
||||
result = %(<?xml version="1.0" encoding="UTF-8"?>\n<errors>\n <error>You need to sign in or sign up before continuing.</error>\n</errors>\n)
|
||||
assert_equal result, @response.last.body
|
||||
end
|
||||
|
||||
test 'return appropriate body for json' do
|
||||
call_failure('formats' => Mime[:json])
|
||||
call_failure('formats' => Mime::JSON)
|
||||
result = %({"error":"You need to sign in or sign up before continuing."})
|
||||
assert_equal result, @response.last.body
|
||||
end
|
||||
@@ -206,34 +201,34 @@ class FailureTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
test 'return WWW-authenticate headers if model allows' do
|
||||
call_failure('formats' => Mime[:xml])
|
||||
call_failure('formats' => Mime::XML)
|
||||
assert_equal 'Basic realm="Application"', @response.second["WWW-Authenticate"]
|
||||
end
|
||||
|
||||
test 'does not return WWW-authenticate headers if model does not allow' do
|
||||
swap Devise, http_authenticatable: false do
|
||||
call_failure('formats' => Mime[:xml])
|
||||
call_failure('formats' => Mime::XML)
|
||||
assert_nil @response.second["WWW-Authenticate"]
|
||||
end
|
||||
end
|
||||
|
||||
test 'works for any non navigational format' do
|
||||
swap Devise, navigational_formats: [] do
|
||||
call_failure('formats' => Mime[:html])
|
||||
call_failure('formats' => Mime::HTML)
|
||||
assert_equal 401, @response.first
|
||||
end
|
||||
end
|
||||
|
||||
test 'uses the failure message as response body' do
|
||||
call_failure('formats' => Mime[:xml], 'warden' => OpenStruct.new(message: :invalid))
|
||||
assert_match '<error>Invalid Email or password.</error>', @response.third.body
|
||||
call_failure('formats' => Mime::XML, 'warden' => OpenStruct.new(message: :invalid))
|
||||
assert_match '<error>Invalid email or password.</error>', @response.third.body
|
||||
end
|
||||
|
||||
context 'on ajax call' do
|
||||
context 'when http_authenticatable_on_xhr is false' do
|
||||
test 'dont return 401 with navigational formats' do
|
||||
swap Devise, http_authenticatable_on_xhr: false do
|
||||
call_failure('formats' => Mime[:html], 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest')
|
||||
call_failure('formats' => Mime::HTML, 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest')
|
||||
assert_equal 302, @response.first
|
||||
assert_equal 'http://test.host/users/sign_in', @response.second["Location"]
|
||||
end
|
||||
@@ -241,7 +236,7 @@ class FailureTest < ActiveSupport::TestCase
|
||||
|
||||
test 'dont return 401 with non navigational formats' do
|
||||
swap Devise, http_authenticatable_on_xhr: false do
|
||||
call_failure('formats' => Mime[:json], 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest')
|
||||
call_failure('formats' => Mime::JSON, 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest')
|
||||
assert_equal 302, @response.first
|
||||
assert_equal 'http://test.host/users/sign_in.json', @response.second["Location"]
|
||||
end
|
||||
@@ -251,14 +246,14 @@ class FailureTest < ActiveSupport::TestCase
|
||||
context 'when http_authenticatable_on_xhr is true' do
|
||||
test 'return 401' do
|
||||
swap Devise, http_authenticatable_on_xhr: true do
|
||||
call_failure('formats' => Mime[:html], 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest')
|
||||
call_failure('formats' => Mime::HTML, 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest')
|
||||
assert_equal 401, @response.first
|
||||
end
|
||||
end
|
||||
|
||||
test 'skip WWW-Authenticate header' do
|
||||
swap Devise, http_authenticatable_on_xhr: true do
|
||||
call_failure('formats' => Mime[:html], 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest')
|
||||
call_failure('formats' => Mime::HTML, 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest')
|
||||
assert_nil @response.second['WWW-Authenticate']
|
||||
end
|
||||
end
|
||||
@@ -275,7 +270,7 @@ class FailureTest < ActiveSupport::TestCase
|
||||
}
|
||||
call_failure(env)
|
||||
assert @response.third.body.include?('<h2>Log in</h2>')
|
||||
assert @response.third.body.include?('Invalid Email or password.')
|
||||
assert @response.third.body.include?('Invalid email or password.')
|
||||
end
|
||||
|
||||
test 'calls the original controller if not confirmed email' do
|
||||
@@ -310,7 +305,7 @@ class FailureTest < ActiveSupport::TestCase
|
||||
}
|
||||
call_failure(env)
|
||||
assert @response.third.body.include?('<h2>Log in</h2>')
|
||||
assert @response.third.body.include?('Invalid Email or password.')
|
||||
assert @response.third.body.include?('Invalid email or password.')
|
||||
assert_equal @request.env["SCRIPT_NAME"], '/sample'
|
||||
assert_equal @request.env["PATH_INFO"], '/users/sign_in'
|
||||
end
|
||||
|
||||
@@ -69,15 +69,41 @@ if DEVISE_ORM == :active_record
|
||||
setup :prepare_destination
|
||||
|
||||
test "all files are properly created in rails 4.0" do
|
||||
ActiveRecord::Generators::DeviseGenerator.any_instance.stubs(:rails_3?).returns(false)
|
||||
simulate_inside_engine(RailsEngine::Engine, RailsEngine) do
|
||||
run_generator ["monster"]
|
||||
|
||||
assert_file "app/models/rails_engine/monster.rb", /devise/
|
||||
assert_file "app/models/rails_engine/monster.rb" do |content|
|
||||
assert_no_match %r{attr_accessible :email}, content
|
||||
assert_no_match /attr_accessible :email/, content
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
test "all files are properly created in rails 3.2 when strong_parameters gem is not installed" do
|
||||
ActiveRecord::Generators::DeviseGenerator.any_instance.stubs(:rails_3?).returns(true)
|
||||
ActiveRecord::Generators::DeviseGenerator.any_instance.stubs(:strong_parameters_enabled?).returns(false)
|
||||
simulate_inside_engine(RailsEngine::Engine, RailsEngine) do
|
||||
run_generator ["monster"]
|
||||
|
||||
assert_file "app/models/rails_engine/monster.rb", /devise/
|
||||
assert_file "app/models/rails_engine/monster.rb" do |content|
|
||||
assert_match /attr_accessible :email/, content
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
test "all files are properly created in rails 3.2 when strong_parameters gem is installed" do
|
||||
ActiveRecord::Generators::DeviseGenerator.any_instance.stubs(:rails_3?).returns(true)
|
||||
ActiveRecord::Generators::DeviseGenerator.any_instance.stubs(:strong_parameters_enabled?).returns(true)
|
||||
simulate_inside_engine(RailsEngine::Engine, RailsEngine) do
|
||||
run_generator ["monster"]
|
||||
|
||||
assert_file "app/models/rails_engine/monster.rb", /devise/
|
||||
assert_file "app/models/rails_engine/monster.rb" do |content|
|
||||
assert_no_match /attr_accessible :email/, content
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,20 +5,9 @@ class InstallGeneratorTest < Rails::Generators::TestCase
|
||||
destination File.expand_path("../../tmp", __FILE__)
|
||||
setup :prepare_destination
|
||||
|
||||
test "assert all files are properly created" do
|
||||
run_generator(["--orm=active_record"])
|
||||
assert_file "config/initializers/devise.rb", /devise\/orm\/active_record/
|
||||
test "Assert all files are properly created" do
|
||||
run_generator
|
||||
assert_file "config/initializers/devise.rb"
|
||||
assert_file "config/locales/devise.en.yml"
|
||||
end
|
||||
|
||||
test "fails if no ORM is specified" do
|
||||
stderr = capture(:stderr) do
|
||||
run_generator
|
||||
end
|
||||
|
||||
assert_match %r{An ORM must be set to install Devise}, stderr
|
||||
|
||||
assert_no_file "config/initializers/devise.rb"
|
||||
assert_no_file "config/locales/devise.en.yml"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'test_helper'
|
||||
|
||||
class DeviseHelperTest < Devise::IntegrationTest
|
||||
class DeviseHelperTest < ActionDispatch::IntegrationTest
|
||||
setup do
|
||||
model_labels = { models: { user: "the user" } }
|
||||
translations = {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'test_helper'
|
||||
|
||||
class AuthenticationSanityTest < Devise::IntegrationTest
|
||||
class AuthenticationSanityTest < ActionDispatch::IntegrationTest
|
||||
test 'home should be accessible without sign in' do
|
||||
visit '/'
|
||||
assert_response :success
|
||||
@@ -30,7 +30,7 @@ class AuthenticationSanityTest < Devise::IntegrationTest
|
||||
swap Devise, sign_out_all_scopes: false do
|
||||
sign_in_as_user
|
||||
sign_in_as_admin
|
||||
delete destroy_user_session_path
|
||||
get destroy_user_session_path
|
||||
assert_not warden.authenticated?(:user)
|
||||
assert warden.authenticated?(:admin)
|
||||
end
|
||||
@@ -41,7 +41,7 @@ class AuthenticationSanityTest < Devise::IntegrationTest
|
||||
sign_in_as_user
|
||||
sign_in_as_admin
|
||||
|
||||
delete destroy_admin_session_path
|
||||
get destroy_admin_session_path
|
||||
assert_not warden.authenticated?(:admin)
|
||||
assert warden.authenticated?(:user)
|
||||
end
|
||||
@@ -52,7 +52,7 @@ class AuthenticationSanityTest < Devise::IntegrationTest
|
||||
sign_in_as_user
|
||||
sign_in_as_admin
|
||||
|
||||
delete destroy_user_session_path
|
||||
get destroy_user_session_path
|
||||
assert_not warden.authenticated?(:user)
|
||||
assert_not warden.authenticated?(:admin)
|
||||
end
|
||||
@@ -63,7 +63,7 @@ class AuthenticationSanityTest < Devise::IntegrationTest
|
||||
sign_in_as_user
|
||||
sign_in_as_admin
|
||||
|
||||
delete destroy_admin_session_path
|
||||
get destroy_admin_session_path
|
||||
assert_not warden.authenticated?(:admin)
|
||||
assert_not warden.authenticated?(:user)
|
||||
end
|
||||
@@ -109,7 +109,7 @@ class AuthenticationSanityTest < Devise::IntegrationTest
|
||||
sign_in_as_admin
|
||||
assert warden.authenticated?(:admin)
|
||||
|
||||
delete destroy_admin_session_path
|
||||
get destroy_admin_session_path
|
||||
assert_response :redirect
|
||||
assert_redirected_to root_path
|
||||
|
||||
@@ -119,7 +119,7 @@ class AuthenticationSanityTest < Devise::IntegrationTest
|
||||
end
|
||||
|
||||
test 'unauthenticated admin set message on sign out' do
|
||||
delete destroy_admin_session_path
|
||||
get destroy_admin_session_path
|
||||
assert_response :redirect
|
||||
assert_redirected_to root_path
|
||||
|
||||
@@ -134,7 +134,7 @@ class AuthenticationSanityTest < Devise::IntegrationTest
|
||||
end
|
||||
end
|
||||
|
||||
class AuthenticationRoutesRestrictions < Devise::IntegrationTest
|
||||
class AuthenticationRoutesRestrictions < ActionDispatch::IntegrationTest
|
||||
test 'not signed in should not be able to access private route (authenticate denied)' do
|
||||
get private_path
|
||||
assert_redirected_to new_admin_session_path
|
||||
@@ -254,7 +254,7 @@ class AuthenticationRoutesRestrictions < Devise::IntegrationTest
|
||||
end
|
||||
end
|
||||
|
||||
class AuthenticationRedirectTest < Devise::IntegrationTest
|
||||
class AuthenticationRedirectTest < ActionDispatch::IntegrationTest
|
||||
test 'redirect from warden shows sign in or sign up message' do
|
||||
get admins_path
|
||||
|
||||
@@ -300,7 +300,7 @@ class AuthenticationRedirectTest < Devise::IntegrationTest
|
||||
end
|
||||
|
||||
test 'xml http requests does not store urls for redirect' do
|
||||
get users_path, headers: { 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest' }
|
||||
get users_path, {}, 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'
|
||||
assert_equal 401, response.status
|
||||
assert_nil session[:"user_return_to"]
|
||||
end
|
||||
@@ -317,7 +317,7 @@ class AuthenticationRedirectTest < Devise::IntegrationTest
|
||||
end
|
||||
end
|
||||
|
||||
class AuthenticationSessionTest < Devise::IntegrationTest
|
||||
class AuthenticationSessionTest < ActionDispatch::IntegrationTest
|
||||
test 'destroyed account is signed out' do
|
||||
sign_in_as_user
|
||||
get '/users'
|
||||
@@ -347,6 +347,37 @@ class AuthenticationSessionTest < Devise::IntegrationTest
|
||||
assert_equal "Cart", @controller.user_session[:cart]
|
||||
end
|
||||
|
||||
test 'does not explode when class name is still stored in session' do
|
||||
# In order to test that old sessions do not break with the new scoped
|
||||
# deserialization, we need to serialize the session the old way. This is
|
||||
# done by removing the newly used scoped serialization method
|
||||
# (#user_serialize) and bringing back the old uncsoped #serialize method
|
||||
# that includes the record's class name in the serialization.
|
||||
begin
|
||||
Warden::SessionSerializer.class_eval do
|
||||
alias_method :original_serialize, :serialize
|
||||
alias_method :original_user_serialize, :user_serialize
|
||||
remove_method :user_serialize
|
||||
|
||||
def serialize(record)
|
||||
klass = record.class
|
||||
array = klass.serialize_into_session(record)
|
||||
array.unshift(klass.name)
|
||||
end
|
||||
end
|
||||
|
||||
sign_in_as_user
|
||||
assert warden.authenticated?(:user)
|
||||
ensure
|
||||
Warden::SessionSerializer.class_eval do
|
||||
alias_method :serialize, :original_serialize
|
||||
remove_method :original_serialize
|
||||
alias_method :user_serialize, :original_user_serialize
|
||||
remove_method :original_user_serialize
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
test 'session id is changed on sign in' do
|
||||
get '/users'
|
||||
session_id = request.session["session_id"]
|
||||
@@ -359,13 +390,13 @@ class AuthenticationSessionTest < Devise::IntegrationTest
|
||||
end
|
||||
end
|
||||
|
||||
class AuthenticationWithScopedViewsTest < Devise::IntegrationTest
|
||||
class AuthenticationWithScopedViewsTest < ActionDispatch::IntegrationTest
|
||||
test 'renders the scoped view if turned on and view is available' do
|
||||
swap Devise, scoped_views: true do
|
||||
assert_raise Webrat::NotFoundError do
|
||||
sign_in_as_user
|
||||
end
|
||||
assert_match %r{Special user view}, response.body
|
||||
assert_match /Special user view/, response.body
|
||||
end
|
||||
end
|
||||
|
||||
@@ -376,7 +407,7 @@ class AuthenticationWithScopedViewsTest < Devise::IntegrationTest
|
||||
sign_in_as_user
|
||||
end
|
||||
|
||||
assert_match %r{Special user view}, response.body
|
||||
assert_match /Special user view/, response.body
|
||||
assert !Devise::PasswordsController.scoped_views?
|
||||
ensure
|
||||
Devise::SessionsController.send :remove_instance_variable, :@scoped_views
|
||||
@@ -400,7 +431,7 @@ class AuthenticationWithScopedViewsTest < Devise::IntegrationTest
|
||||
end
|
||||
end
|
||||
|
||||
class AuthenticationOthersTest < Devise::IntegrationTest
|
||||
class AuthenticationOthersTest < ActionDispatch::IntegrationTest
|
||||
test 'handles unverified requests gets rid of caches' do
|
||||
swap ApplicationController, allow_forgery_protection: true do
|
||||
post exhibit_user_url(1)
|
||||
@@ -441,7 +472,7 @@ class AuthenticationOthersTest < Devise::IntegrationTest
|
||||
|
||||
test 'sign in with script name' do
|
||||
assert_nothing_raised do
|
||||
get new_user_session_path, headers: { "SCRIPT_NAME" => "/omg" }
|
||||
get new_user_session_path, {}, "SCRIPT_NAME" => "/omg"
|
||||
fill_in "email", with: "user@test.com"
|
||||
end
|
||||
end
|
||||
@@ -449,7 +480,7 @@ class AuthenticationOthersTest < Devise::IntegrationTest
|
||||
test 'sign in stub in xml format' do
|
||||
get new_user_session_path(format: 'xml')
|
||||
assert_match '<?xml version="1.0" encoding="UTF-8"?>', response.body
|
||||
assert_match %r{<user>.*</user>}m, response.body
|
||||
assert_match /<user>.*<\/user>/m, response.body
|
||||
assert_match '<email></email>', response.body
|
||||
assert_match '<password nil="true"', response.body
|
||||
end
|
||||
@@ -478,7 +509,7 @@ class AuthenticationOthersTest < Devise::IntegrationTest
|
||||
|
||||
test 'sign in with xml format returns xml response' do
|
||||
create_user
|
||||
post user_session_path(format: 'xml'), params: { user: {email: "user@test.com", password: '12345678'} }
|
||||
post user_session_path(format: 'xml'), user: {email: "user@test.com", password: '12345678'}
|
||||
assert_response :success
|
||||
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>)
|
||||
end
|
||||
@@ -488,47 +519,47 @@ class AuthenticationOthersTest < Devise::IntegrationTest
|
||||
assert_response :success
|
||||
|
||||
create_user
|
||||
post user_session_path(format: 'xml'), params: { user: {email: "user@test.com", password: '12345678'} }
|
||||
post user_session_path(format: 'xml'), user: {email: "user@test.com", password: '12345678'}
|
||||
assert_response :success
|
||||
|
||||
get new_user_session_path(format: 'xml')
|
||||
assert_response :success
|
||||
|
||||
post user_session_path(format: 'xml'), params: { user: {email: "user@test.com", password: '12345678'} }
|
||||
post user_session_path(format: 'xml'), user: {email: "user@test.com", password: '12345678'}
|
||||
assert_response :success
|
||||
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>)
|
||||
end
|
||||
|
||||
test 'sign out with html redirects' do
|
||||
sign_in_as_user
|
||||
delete destroy_user_session_path
|
||||
get destroy_user_session_path
|
||||
assert_response :redirect
|
||||
assert_current_url '/'
|
||||
|
||||
sign_in_as_user
|
||||
delete destroy_user_session_path(format: 'html')
|
||||
get destroy_user_session_path(format: 'html')
|
||||
assert_response :redirect
|
||||
assert_current_url '/'
|
||||
end
|
||||
|
||||
test 'sign out with xml format returns no content' do
|
||||
sign_in_as_user
|
||||
delete destroy_user_session_path(format: 'xml')
|
||||
get destroy_user_session_path(format: 'xml')
|
||||
assert_response :no_content
|
||||
assert_not warden.authenticated?(:user)
|
||||
end
|
||||
|
||||
test 'sign out with json format returns no content' do
|
||||
sign_in_as_user
|
||||
delete destroy_user_session_path(format: 'json')
|
||||
get destroy_user_session_path(format: 'json')
|
||||
assert_response :no_content
|
||||
assert_not warden.authenticated?(:user)
|
||||
end
|
||||
|
||||
test 'sign out with non-navigational format via XHR does not redirect' do
|
||||
swap Devise, navigational_formats: ['*/*', :html] do
|
||||
sign_in_as_admin
|
||||
get destroy_sign_out_via_get_session_path, xhr: true, headers: { "HTTP_ACCEPT" => "application/json,text/javascript,*/*" } # NOTE: Bug is triggered by combination of XHR and */*.
|
||||
sign_in_as_user
|
||||
xml_http_request :get, destroy_user_session_path, {}, { "HTTP_ACCEPT" => "application/json,text/javascript,*/*" } # NOTE: Bug is triggered by combination of XHR and */*.
|
||||
assert_response :no_content
|
||||
assert_not warden.authenticated?(:user)
|
||||
end
|
||||
@@ -538,18 +569,18 @@ class AuthenticationOthersTest < Devise::IntegrationTest
|
||||
test 'sign out with navigational format via XHR does redirect' do
|
||||
swap Devise, navigational_formats: ['*/*', :html] do
|
||||
sign_in_as_user
|
||||
delete destroy_user_session_path, xhr: true, headers: { "HTTP_ACCEPT" => "text/html,*/*" }
|
||||
xml_http_request :get, destroy_user_session_path, {}, { "HTTP_ACCEPT" => "text/html,*/*" }
|
||||
assert_response :redirect
|
||||
assert_not warden.authenticated?(:user)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class AuthenticationKeysTest < Devise::IntegrationTest
|
||||
class AuthenticationKeysTest < ActionDispatch::IntegrationTest
|
||||
test 'missing authentication keys cause authentication to abort' do
|
||||
swap Devise, authentication_keys: [:subdomain] do
|
||||
sign_in_as_user
|
||||
assert_contain "Invalid Subdomain or password."
|
||||
assert_contain "Invalid subdomain or password."
|
||||
assert_not warden.authenticated?(:user)
|
||||
end
|
||||
end
|
||||
@@ -562,7 +593,7 @@ class AuthenticationKeysTest < Devise::IntegrationTest
|
||||
end
|
||||
end
|
||||
|
||||
class AuthenticationRequestKeysTest < Devise::IntegrationTest
|
||||
class AuthenticationRequestKeysTest < ActionDispatch::IntegrationTest
|
||||
test 'request keys are used on authentication' do
|
||||
host! 'foo.bar.baz'
|
||||
|
||||
@@ -588,7 +619,7 @@ class AuthenticationRequestKeysTest < Devise::IntegrationTest
|
||||
|
||||
swap Devise, request_keys: [:subdomain] do
|
||||
sign_in_as_user
|
||||
assert_contain "Invalid Email or password."
|
||||
assert_contain "Invalid email or password."
|
||||
assert_not warden.authenticated?(:user)
|
||||
end
|
||||
end
|
||||
@@ -603,7 +634,7 @@ class AuthenticationRequestKeysTest < Devise::IntegrationTest
|
||||
end
|
||||
end
|
||||
|
||||
class AuthenticationSignOutViaTest < Devise::IntegrationTest
|
||||
class AuthenticationSignOutViaTest < ActionDispatch::IntegrationTest
|
||||
def sign_in!(scope)
|
||||
sign_in_as_admin(visit: send("new_#{scope}_session_path"))
|
||||
assert warden.authenticated?(scope)
|
||||
@@ -658,7 +689,7 @@ class AuthenticationSignOutViaTest < Devise::IntegrationTest
|
||||
end
|
||||
end
|
||||
|
||||
class DoubleAuthenticationRedirectTest < Devise::IntegrationTest
|
||||
class DoubleAuthenticationRedirectTest < ActionDispatch::IntegrationTest
|
||||
test 'signed in as user redirects when visiting user sign in page' do
|
||||
sign_in_as_user
|
||||
get new_user_session_path(format: :html)
|
||||
@@ -681,7 +712,7 @@ class DoubleAuthenticationRedirectTest < Devise::IntegrationTest
|
||||
end
|
||||
end
|
||||
|
||||
class DoubleSignOutRedirectTest < Devise::IntegrationTest
|
||||
class DoubleSignOutRedirectTest < ActionDispatch::IntegrationTest
|
||||
test 'sign out after already having signed out redirects to sign in' do
|
||||
sign_in_as_user
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'test_helper'
|
||||
|
||||
class ConfirmationTest < Devise::IntegrationTest
|
||||
class ConfirmationTest < ActionDispatch::IntegrationTest
|
||||
|
||||
def visit_user_confirmation_with_token(confirmation_token)
|
||||
visit user_confirmation_path(confirmation_token: confirmation_token)
|
||||
@@ -35,7 +35,7 @@ class ConfirmationTest < Devise::IntegrationTest
|
||||
test 'user with invalid confirmation token should not be able to confirm an account' do
|
||||
visit_user_confirmation_with_token('invalid_confirmation')
|
||||
assert_have_selector '#error_explanation'
|
||||
assert_contain %r{Confirmation token(.*)invalid}
|
||||
assert_contain /Confirmation token(.*)invalid/
|
||||
end
|
||||
|
||||
test 'user with valid confirmation token should not be able to confirm an account after the token has expired' do
|
||||
@@ -45,7 +45,7 @@ class ConfirmationTest < Devise::IntegrationTest
|
||||
visit_user_confirmation_with_token(user.raw_confirmation_token)
|
||||
|
||||
assert_have_selector '#error_explanation'
|
||||
assert_contain %r{needs to be confirmed within 3 days}
|
||||
assert_contain /needs to be confirmed within 3 days/
|
||||
assert_not user.reload.confirmed?
|
||||
assert_current_url "/users/confirmation?confirmation_token=#{user.raw_confirmation_token}"
|
||||
end
|
||||
@@ -140,7 +140,7 @@ class ConfirmationTest < Devise::IntegrationTest
|
||||
fill_in 'password', with: 'invalid'
|
||||
end
|
||||
|
||||
assert_contain 'Invalid Email or password'
|
||||
assert_contain 'Invalid email or password'
|
||||
assert_not warden.authenticated?(:user)
|
||||
end
|
||||
end
|
||||
@@ -184,14 +184,14 @@ class ConfirmationTest < Devise::IntegrationTest
|
||||
|
||||
test 'resent confirmation token with valid E-Mail in XML format should return valid response' do
|
||||
user = create_user(confirm: false)
|
||||
post user_confirmation_path(format: 'xml'), params: { user: { email: user.email } }
|
||||
post user_confirmation_path(format: 'xml'), user: { email: user.email }
|
||||
assert_response :success
|
||||
assert_equal response.body, {}.to_xml
|
||||
end
|
||||
|
||||
test 'resent confirmation token with invalid E-Mail in XML format should return invalid response' do
|
||||
create_user(confirm: false)
|
||||
post user_confirmation_path(format: 'xml'), params: { user: { email: 'invalid.test@test.com' } }
|
||||
post user_confirmation_path(format: 'xml'), user: { email: 'invalid.test@test.com' }
|
||||
assert_response :unprocessable_entity
|
||||
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
||||
end
|
||||
@@ -213,7 +213,7 @@ class ConfirmationTest < Devise::IntegrationTest
|
||||
test 'request an account confirmation account with JSON, should return an empty JSON' do
|
||||
user = create_user(confirm: false)
|
||||
|
||||
post user_confirmation_path, params: { user: { email: user.email }, format: :json }
|
||||
post user_confirmation_path, user: { email: user.email }, format: :json
|
||||
assert_response :success
|
||||
assert_equal response.body, {}.to_json
|
||||
end
|
||||
@@ -249,7 +249,7 @@ class ConfirmationTest < Devise::IntegrationTest
|
||||
end
|
||||
end
|
||||
|
||||
class ConfirmationOnChangeTest < Devise::IntegrationTest
|
||||
class ConfirmationOnChangeTest < ActionDispatch::IntegrationTest
|
||||
def create_second_admin(options={})
|
||||
@admin = nil
|
||||
create_admin(options)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'test_helper'
|
||||
|
||||
class DatabaseAuthenticationTest < Devise::IntegrationTest
|
||||
class DatabaseAuthenticationTest < ActionDispatch::IntegrationTest
|
||||
test 'sign in with email of different case should succeed when email is in the list of case insensitive keys' do
|
||||
create_user(email: 'Foo@Bar.com')
|
||||
|
||||
@@ -68,7 +68,7 @@ class DatabaseAuthenticationTest < Devise::IntegrationTest
|
||||
fill_in 'password', with: 'abcdef'
|
||||
end
|
||||
|
||||
assert_contain 'Invalid Email or password'
|
||||
assert_contain 'Invalid email or password'
|
||||
assert_not warden.authenticated?(:admin)
|
||||
end
|
||||
|
||||
|
||||
@@ -1,25 +1,23 @@
|
||||
require 'test_helper'
|
||||
|
||||
class HttpAuthenticationTest < Devise::IntegrationTest
|
||||
class HttpAuthenticationTest < ActionDispatch::IntegrationTest
|
||||
test 'handles unverified requests gets rid of caches but continues signed in' do
|
||||
swap ApplicationController, allow_forgery_protection: true do
|
||||
create_user
|
||||
post exhibit_user_url(1), headers: { "HTTP_AUTHORIZATION" => "Basic #{Base64.encode64("user@test.com:12345678")}" }
|
||||
post exhibit_user_url(1), {}, "HTTP_AUTHORIZATION" => "Basic #{Base64.encode64("user@test.com:12345678")}"
|
||||
assert warden.authenticated?(:user)
|
||||
assert_equal "User is authenticated", response.body
|
||||
end
|
||||
end
|
||||
|
||||
test 'sign in should authenticate with http' do
|
||||
swap Devise, skip_session_storage: [] do
|
||||
sign_in_as_new_user_with_http
|
||||
assert_response 200
|
||||
assert_match '<email>user@test.com</email>', response.body
|
||||
assert warden.authenticated?(:user)
|
||||
sign_in_as_new_user_with_http
|
||||
assert_response 200
|
||||
assert_match '<email>user@test.com</email>', response.body
|
||||
assert warden.authenticated?(:user)
|
||||
|
||||
get users_path(format: :xml)
|
||||
assert_response 200
|
||||
end
|
||||
get users_path(format: :xml)
|
||||
assert_response 200
|
||||
end
|
||||
|
||||
test 'sign in should authenticate with http but not emit a cookie if skipping session storage' do
|
||||
@@ -44,7 +42,7 @@ class HttpAuthenticationTest < Devise::IntegrationTest
|
||||
sign_in_as_new_user_with_http("unknown")
|
||||
assert_equal 401, status
|
||||
assert_equal "application/xml; charset=utf-8", headers["Content-Type"]
|
||||
assert_match "<error>Invalid Email or password.</error>", response.body
|
||||
assert_match "<error>Invalid email or password.</error>", response.body
|
||||
end
|
||||
|
||||
test 'returns a custom response with www-authenticate and chosen realm' do
|
||||
@@ -91,16 +89,17 @@ class HttpAuthenticationTest < Devise::IntegrationTest
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def sign_in_as_new_user_with_http(username="user@test.com", password="12345678")
|
||||
user = create_user
|
||||
get users_path(format: :xml), headers: { "HTTP_AUTHORIZATION" => "Basic #{Base64.encode64("#{username}:#{password}")}" }
|
||||
get users_path(format: :xml), {}, "HTTP_AUTHORIZATION" => "Basic #{Base64.encode64("#{username}:#{password}")}"
|
||||
user
|
||||
end
|
||||
|
||||
# Sign in with oauth2 token. This is just to test that it isn't misinterpreted as basic authentication
|
||||
def add_oauth2_header
|
||||
user = create_user
|
||||
get users_path(format: :xml), headers: { "HTTP_AUTHORIZATION" => "OAuth #{Base64.encode64("#{user.email}:12345678")}" }
|
||||
get users_path(format: :xml), {}, "HTTP_AUTHORIZATION" => "OAuth #{Base64.encode64("#{user.email}:12345678")}"
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'test_helper'
|
||||
|
||||
class LockTest < Devise::IntegrationTest
|
||||
class LockTest < ActionDispatch::IntegrationTest
|
||||
|
||||
def visit_user_unlock_with_token(unlock_token)
|
||||
visit user_unlock_path(unlock_token: unlock_token)
|
||||
@@ -75,7 +75,7 @@ class LockTest < Devise::IntegrationTest
|
||||
assert_response :success
|
||||
assert_current_url '/users/unlock?unlock_token=invalid_token'
|
||||
assert_have_selector '#error_explanation'
|
||||
assert_contain %r{Unlock token(.*)invalid}
|
||||
assert_contain /Unlock token(.*)invalid/
|
||||
end
|
||||
|
||||
test "locked user should be able to unlock account" do
|
||||
@@ -132,10 +132,9 @@ class LockTest < Devise::IntegrationTest
|
||||
user = create_user(locked: true)
|
||||
ActionMailer::Base.deliveries.clear
|
||||
|
||||
post user_unlock_path(format: 'xml'), params: { user: {email: user.email} }
|
||||
post user_unlock_path(format: 'xml'), user: {email: user.email}
|
||||
assert_response :success
|
||||
assert_equal response.body, {}.to_xml
|
||||
|
||||
assert_equal 1, ActionMailer::Base.deliveries.size
|
||||
end
|
||||
|
||||
@@ -143,7 +142,7 @@ class LockTest < Devise::IntegrationTest
|
||||
user = create_user(locked: false)
|
||||
ActionMailer::Base.deliveries.clear
|
||||
|
||||
post user_unlock_path(format: 'xml'), params: { user: {email: user.email} }
|
||||
post user_unlock_path(format: 'xml'), user: {email: user.email}
|
||||
assert_response :unprocessable_entity
|
||||
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
||||
assert_equal 0, ActionMailer::Base.deliveries.size
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
require 'test_helper'
|
||||
|
||||
|
||||
class OmniauthableIntegrationTest < Devise::IntegrationTest
|
||||
class OmniauthableIntegrationTest < ActionDispatch::IntegrationTest
|
||||
FACEBOOK_INFO = {
|
||||
"id" => '12345',
|
||||
"link" => 'http://facebook.com/josevalim',
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'test_helper'
|
||||
|
||||
class PasswordTest < Devise::IntegrationTest
|
||||
class PasswordTest < ActionDispatch::IntegrationTest
|
||||
|
||||
def visit_new_password_path
|
||||
visit new_user_session_path
|
||||
@@ -146,7 +146,7 @@ class PasswordTest < Devise::IntegrationTest
|
||||
assert_response :success
|
||||
assert_current_url '/users/password'
|
||||
assert_have_selector '#error_explanation'
|
||||
assert_contain %r{Reset password token(.*)invalid}
|
||||
assert_contain /Reset password token(.*)invalid/
|
||||
assert_not user.reload.valid_password?('987654321')
|
||||
end
|
||||
|
||||
@@ -160,7 +160,8 @@ class PasswordTest < Devise::IntegrationTest
|
||||
assert_response :success
|
||||
assert_current_url '/users/password'
|
||||
assert_have_selector '#error_explanation'
|
||||
assert_contain "Password confirmation doesn't match Password"
|
||||
assert_contain Devise.rails4? ?
|
||||
"Password confirmation doesn't match Password" : "Password doesn't match confirmation"
|
||||
assert_not user.reload.valid_password?('987654321')
|
||||
end
|
||||
|
||||
@@ -212,7 +213,7 @@ class PasswordTest < Devise::IntegrationTest
|
||||
test 'does not sign in user automatically after changing its password if it\'s locked and unlock strategy is :none or :time' do
|
||||
[:none, :time].each do |strategy|
|
||||
swap Devise, unlock_strategy: strategy do
|
||||
create_user(locked: true)
|
||||
user = create_user(locked: true)
|
||||
request_forgot_password
|
||||
reset_password
|
||||
|
||||
@@ -250,14 +251,14 @@ class PasswordTest < Devise::IntegrationTest
|
||||
|
||||
test 'reset password request with valid E-Mail in XML format should return valid response' do
|
||||
create_user
|
||||
post user_password_path(format: 'xml'), params: { user: {email: "user@test.com"} }
|
||||
post user_password_path(format: 'xml'), user: {email: "user@test.com"}
|
||||
assert_response :success
|
||||
assert_equal response.body, { }.to_xml
|
||||
end
|
||||
|
||||
test 'reset password request with invalid E-Mail in XML format should return valid response' do
|
||||
create_user
|
||||
post user_password_path(format: 'xml'), params: { user: {email: "invalid.test@test.com"} }
|
||||
post user_password_path(format: 'xml'), user: {email: "invalid.test@test.com"}
|
||||
assert_response :unprocessable_entity
|
||||
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
||||
end
|
||||
@@ -265,7 +266,7 @@ class PasswordTest < Devise::IntegrationTest
|
||||
test 'reset password request with invalid E-Mail in XML format should return empty and valid response' do
|
||||
swap Devise, paranoid: true do
|
||||
create_user
|
||||
post user_password_path(format: 'xml'), params: { user: {email: "invalid@test.com"} }
|
||||
post user_password_path(format: 'xml'), user: {email: "invalid@test.com"}
|
||||
assert_response :success
|
||||
assert_equal response.body, { }.to_xml
|
||||
end
|
||||
@@ -274,9 +275,8 @@ class PasswordTest < Devise::IntegrationTest
|
||||
test 'change password with valid parameters in XML format should return valid response' do
|
||||
create_user
|
||||
request_forgot_password
|
||||
put user_password_path(format: 'xml'), params: { user: {
|
||||
put user_password_path(format: 'xml'), user: {
|
||||
reset_password_token: 'abcdef', password: '987654321', password_confirmation: '987654321'
|
||||
}
|
||||
}
|
||||
assert_response :success
|
||||
assert warden.authenticated?(:user)
|
||||
@@ -285,7 +285,7 @@ class PasswordTest < Devise::IntegrationTest
|
||||
test 'change password with invalid token in XML format should return invalid response' do
|
||||
create_user
|
||||
request_forgot_password
|
||||
put user_password_path(format: 'xml'), params: { user: {reset_password_token: 'invalid.token', password: '987654321', password_confirmation: '987654321'} }
|
||||
put user_password_path(format: 'xml'), user: {reset_password_token: 'invalid.token', password: '987654321', password_confirmation: '987654321'}
|
||||
assert_response :unprocessable_entity
|
||||
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
||||
end
|
||||
@@ -293,7 +293,7 @@ class PasswordTest < Devise::IntegrationTest
|
||||
test 'change password with invalid new password in XML format should return invalid response' do
|
||||
user = create_user
|
||||
request_forgot_password
|
||||
put user_password_path(format: 'xml'), params: { user: {reset_password_token: user.reload.reset_password_token, password: '', password_confirmation: '987654321'} }
|
||||
put user_password_path(format: 'xml'), user: {reset_password_token: user.reload.reset_password_token, password: '', password_confirmation: '987654321'}
|
||||
assert_response :unprocessable_entity
|
||||
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
||||
end
|
||||
@@ -301,7 +301,7 @@ class PasswordTest < Devise::IntegrationTest
|
||||
test "when using json requests to ask a confirmable request, should not return the object" do
|
||||
user = create_user(confirm: false)
|
||||
|
||||
post user_password_path(format: :json), params: { user: { email: user.email } }
|
||||
post user_password_path(format: :json), user: { email: user.email }
|
||||
|
||||
assert_response :success
|
||||
assert_equal response.body, "{}"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'test_helper'
|
||||
|
||||
class RegistrationTest < Devise::IntegrationTest
|
||||
class RegistrationTest < ActionDispatch::IntegrationTest
|
||||
|
||||
test 'a guest admin should be able to sign in successfully' do
|
||||
get new_admin_session_path
|
||||
@@ -110,7 +110,8 @@ class RegistrationTest < Devise::IntegrationTest
|
||||
assert_template 'registrations/new'
|
||||
assert_have_selector '#error_explanation'
|
||||
assert_contain "Email is invalid"
|
||||
assert_contain "Password confirmation doesn't match Password"
|
||||
assert_contain Devise.rails4? ?
|
||||
"Password confirmation doesn't match Password" : "Password doesn't match confirmation"
|
||||
assert_contain "2 errors prohibited"
|
||||
assert_nil User.to_adapter.find_first
|
||||
|
||||
@@ -216,7 +217,8 @@ class RegistrationTest < Devise::IntegrationTest
|
||||
fill_in 'current password', with: '12345678'
|
||||
click_button 'Update'
|
||||
|
||||
assert_contain "Password confirmation doesn't match Password"
|
||||
assert_contain Devise.rails4? ?
|
||||
"Password confirmation doesn't match Password" : "Password doesn't match confirmation"
|
||||
assert_not User.to_adapter.find_first.valid_password?('pas123')
|
||||
end
|
||||
|
||||
@@ -257,7 +259,7 @@ class RegistrationTest < Devise::IntegrationTest
|
||||
end
|
||||
|
||||
test 'an admin sign up with valid information in XML format should return valid response' do
|
||||
post admin_registration_path(format: 'xml'), params: { admin: { email: 'new_user@test.com', password: 'new_user123', password_confirmation: 'new_user123' } }
|
||||
post admin_registration_path(format: 'xml'), admin: { email: 'new_user@test.com', password: 'new_user123', password_confirmation: 'new_user123' }
|
||||
assert_response :success
|
||||
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<admin>)
|
||||
|
||||
@@ -266,7 +268,7 @@ class RegistrationTest < Devise::IntegrationTest
|
||||
end
|
||||
|
||||
test 'a user sign up with valid information in XML format should return valid response' do
|
||||
post user_registration_path(format: 'xml'), params: { user: { email: 'new_user@test.com', password: 'new_user123', password_confirmation: 'new_user123' } }
|
||||
post user_registration_path(format: 'xml'), user: { email: 'new_user@test.com', password: 'new_user123', password_confirmation: 'new_user123' }
|
||||
assert_response :success
|
||||
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>)
|
||||
|
||||
@@ -275,21 +277,21 @@ class RegistrationTest < Devise::IntegrationTest
|
||||
end
|
||||
|
||||
test 'a user sign up with invalid information in XML format should return invalid response' do
|
||||
post user_registration_path(format: 'xml'), params: { user: { email: 'new_user@test.com', password: 'new_user123', password_confirmation: 'invalid' } }
|
||||
post user_registration_path(format: 'xml'), user: { email: 'new_user@test.com', password: 'new_user123', password_confirmation: 'invalid' }
|
||||
assert_response :unprocessable_entity
|
||||
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
||||
end
|
||||
|
||||
test 'a user update information with valid data in XML format should return valid response' do
|
||||
user = sign_in_as_user
|
||||
put user_registration_path(format: 'xml'), params: { user: { current_password: '12345678', email: 'user.new@test.com' } }
|
||||
put user_registration_path(format: 'xml'), user: { current_password: '12345678', email: 'user.new@test.com' }
|
||||
assert_response :success
|
||||
assert_equal user.reload.email, 'user.new@test.com'
|
||||
end
|
||||
|
||||
test 'a user update information with invalid data in XML format should return invalid response' do
|
||||
user = sign_in_as_user
|
||||
put user_registration_path(format: 'xml'), params: { user: { current_password: 'invalid', email: 'user.new@test.com' } }
|
||||
put user_registration_path(format: 'xml'), user: { current_password: 'invalid', email: 'user.new@test.com' }
|
||||
assert_response :unprocessable_entity
|
||||
assert_equal user.reload.email, 'user@test.com'
|
||||
end
|
||||
@@ -302,7 +304,7 @@ class RegistrationTest < Devise::IntegrationTest
|
||||
end
|
||||
end
|
||||
|
||||
class ReconfirmableRegistrationTest < Devise::IntegrationTest
|
||||
class ReconfirmableRegistrationTest < ActionDispatch::IntegrationTest
|
||||
test 'a signed in admin should see a more appropriate flash message when editing their account if reconfirmable is enabled' do
|
||||
sign_in_as_admin
|
||||
get edit_admin_registration_path
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
require 'test_helper'
|
||||
|
||||
class RememberMeTest < Devise::IntegrationTest
|
||||
class RememberMeTest < ActionDispatch::IntegrationTest
|
||||
if (Rails::VERSION::MAJOR < 4) || (Rails::VERSION::MAJOR >= 4 && Rails::VERSION::MINOR < 1)
|
||||
require 'time_helpers'
|
||||
include ActiveSupport::Testing::TimeHelpers
|
||||
end
|
||||
|
||||
def create_user_and_remember(add_to_token='')
|
||||
user = create_user
|
||||
user.remember_me!
|
||||
@@ -10,7 +15,7 @@ class RememberMeTest < Devise::IntegrationTest
|
||||
end
|
||||
|
||||
def generate_signed_cookie(raw_cookie)
|
||||
request = Devise.rails5? ? ActionDispatch::TestRequest.create : ActionDispatch::TestRequest.new
|
||||
request = ActionDispatch::TestRequest.new
|
||||
request.cookie_jar.signed['raw_cookie'] = raw_cookie
|
||||
request.cookie_jar['raw_cookie']
|
||||
end
|
||||
@@ -47,10 +52,8 @@ class RememberMeTest < Devise::IntegrationTest
|
||||
get new_user_session_path
|
||||
assert request.session[:_csrf_token]
|
||||
|
||||
post user_session_path, params: {
|
||||
authenticity_token: "oops",
|
||||
user: { email: "jose.valim@gmail.com", password: "123456", remember_me: "1" }
|
||||
}
|
||||
post user_session_path, authenticity_token: "oops", user:
|
||||
{ email: "jose.valim@gmail.com", password: "123456", remember_me: "1" }
|
||||
assert_not warden.authenticated?(:user)
|
||||
assert_not request.cookies['remember_user_token']
|
||||
end
|
||||
@@ -121,7 +124,7 @@ class RememberMeTest < Devise::IntegrationTest
|
||||
|
||||
test 'extends remember period when extend remember period config is true' do
|
||||
swap Devise, extend_remember_period: true, remember_for: 1.year do
|
||||
create_user_and_remember
|
||||
user = create_user_and_remember
|
||||
old_remember_token = nil
|
||||
|
||||
travel_to 1.day.ago do
|
||||
@@ -138,7 +141,7 @@ class RememberMeTest < Devise::IntegrationTest
|
||||
|
||||
test 'does not extend remember period when extend period config is false' do
|
||||
swap Devise, extend_remember_period: false, remember_for: 1.year do
|
||||
create_user_and_remember
|
||||
user = create_user_and_remember
|
||||
old_remember_token = nil
|
||||
|
||||
travel_to 1.day.ago do
|
||||
@@ -182,7 +185,7 @@ class RememberMeTest < Devise::IntegrationTest
|
||||
get users_path
|
||||
assert warden.authenticated?(:user)
|
||||
|
||||
delete destroy_user_session_path
|
||||
get destroy_user_session_path
|
||||
assert_not warden.authenticated?(:user)
|
||||
assert_nil warden.cookies['remember_user_token']
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'test_helper'
|
||||
|
||||
class SessionTimeoutTest < Devise::IntegrationTest
|
||||
class SessionTimeoutTest < ActionDispatch::IntegrationTest
|
||||
|
||||
def last_request_at
|
||||
@controller.user_session['last_request_at']
|
||||
@@ -20,7 +20,7 @@ class SessionTimeoutTest < Devise::IntegrationTest
|
||||
old_last_request = last_request_at
|
||||
assert_not_nil last_request_at
|
||||
|
||||
get users_path, headers: { 'devise.skip_trackable' => true }
|
||||
get users_path, {}, 'devise.skip_trackable' => true
|
||||
assert_equal old_last_request, last_request_at
|
||||
end
|
||||
|
||||
@@ -32,7 +32,7 @@ class SessionTimeoutTest < Devise::IntegrationTest
|
||||
new_time = 2.seconds.from_now
|
||||
Time.stubs(:now).returns(new_time)
|
||||
|
||||
get users_path, headers: { 'devise.skip_timeoutable' => true }
|
||||
get users_path, {}, 'devise.skip_timeoutable' => true
|
||||
assert_equal old_last_request, last_request_at
|
||||
end
|
||||
|
||||
@@ -89,7 +89,7 @@ class SessionTimeoutTest < Devise::IntegrationTest
|
||||
user = sign_in_as_user
|
||||
get expire_user_path(user)
|
||||
|
||||
delete destroy_user_session_path
|
||||
get destroy_user_session_path
|
||||
|
||||
assert_response :redirect
|
||||
assert_redirected_to root_path
|
||||
@@ -115,7 +115,7 @@ class SessionTimeoutTest < Devise::IntegrationTest
|
||||
user = sign_in_as_user
|
||||
get expire_user_path(user)
|
||||
|
||||
post "/users/sign_in", params: { email: user.email, password: "123456" }
|
||||
post "/users/sign_in", email: user.email, password: "123456"
|
||||
|
||||
assert_response :redirect
|
||||
follow_redirect!
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'test_helper'
|
||||
|
||||
class TrackableHooksTest < Devise::IntegrationTest
|
||||
class TrackableHooksTest < ActionDispatch::IntegrationTest
|
||||
|
||||
test "current and last sign in timestamps are updated on each sign in" do
|
||||
user = create_user
|
||||
@@ -16,7 +16,7 @@ class TrackableHooksTest < Devise::IntegrationTest
|
||||
assert_equal user.current_sign_in_at, user.last_sign_in_at
|
||||
assert user.current_sign_in_at >= user.created_at
|
||||
|
||||
delete destroy_user_session_path
|
||||
visit destroy_user_session_path
|
||||
new_time = 2.seconds.from_now
|
||||
Time.stubs(:now).returns(new_time)
|
||||
|
||||
@@ -56,7 +56,7 @@ class TrackableHooksTest < Devise::IntegrationTest
|
||||
user.reload
|
||||
assert_equal 1, user.sign_in_count
|
||||
|
||||
delete destroy_user_session_path
|
||||
visit destroy_user_session_path
|
||||
sign_in_as_user
|
||||
user.reload
|
||||
assert_equal 2, user.sign_in_count
|
||||
@@ -80,7 +80,7 @@ class TrackableHooksTest < Devise::IntegrationTest
|
||||
end
|
||||
user.reload
|
||||
assert_equal 0, user.sign_in_count
|
||||
delete destroy_user_session_path
|
||||
visit destroy_user_session_path
|
||||
|
||||
sign_in_as_user do
|
||||
header 'devise.skip_trackable', false
|
||||
|
||||
@@ -37,16 +37,16 @@ class ConfirmationInstructionsTest < ActionMailer::TestCase
|
||||
assert_equal [user.email], mail.to
|
||||
end
|
||||
|
||||
test 'set up sender from configuration' do
|
||||
test 'setup sender from configuration' do
|
||||
assert_equal ['test@example.com'], mail.from
|
||||
end
|
||||
|
||||
test 'set up sender from custom mailer defaults' do
|
||||
test 'setup sender from custom mailer defaults' do
|
||||
Devise.mailer = 'Users::Mailer'
|
||||
assert_equal ['custom@example.com'], mail.from
|
||||
end
|
||||
|
||||
test 'set up sender from custom mailer defaults with proc' do
|
||||
test 'setup sender from custom mailer defaults with proc' do
|
||||
Devise.mailer = 'Users::FromProcMailer'
|
||||
assert_equal ['custom@example.com'], mail.from
|
||||
end
|
||||
@@ -56,17 +56,17 @@ class ConfirmationInstructionsTest < ActionMailer::TestCase
|
||||
assert_present mail.body.encoded
|
||||
end
|
||||
|
||||
test 'set up reply to as copy from sender' do
|
||||
test 'setup reply to as copy from sender' do
|
||||
assert_equal ['test@example.com'], mail.reply_to
|
||||
end
|
||||
|
||||
test 'set up reply to as different if set in defaults' do
|
||||
test 'setup reply to as different if set in defaults' do
|
||||
Devise.mailer = 'Users::ReplyToMailer'
|
||||
assert_equal ['custom@example.com'], mail.from
|
||||
assert_equal ['custom_reply_to@example.com'], mail.reply_to
|
||||
end
|
||||
|
||||
test 'set up subject from I18n' do
|
||||
test 'setup subject from I18n' do
|
||||
store_translations :en, devise: { mailer: { confirmation_instructions: { subject: 'Account Confirmation' } } } do
|
||||
assert_equal 'Account Confirmation', mail.subject
|
||||
end
|
||||
|
||||
@@ -39,16 +39,16 @@ class ResetPasswordInstructionsTest < ActionMailer::TestCase
|
||||
assert_equal [user.email], mail.to
|
||||
end
|
||||
|
||||
test 'set up sender from configuration' do
|
||||
test 'setup sender from configuration' do
|
||||
assert_equal ['test@example.com'], mail.from
|
||||
end
|
||||
|
||||
test 'set up sender from custom mailer defaults' do
|
||||
test 'setup sender from custom mailer defaults' do
|
||||
Devise.mailer = 'Users::Mailer'
|
||||
assert_equal ['custom@example.com'], mail.from
|
||||
end
|
||||
|
||||
test 'set up sender from custom mailer defaults with proc' do
|
||||
test 'setup sender from custom mailer defaults with proc' do
|
||||
Devise.mailer = 'Users::FromProcMailer'
|
||||
assert_equal ['custom@example.com'], mail.from
|
||||
end
|
||||
@@ -58,11 +58,11 @@ class ResetPasswordInstructionsTest < ActionMailer::TestCase
|
||||
assert_present mail.body.encoded
|
||||
end
|
||||
|
||||
test 'set up reply to as copy from sender' do
|
||||
test 'setup reply to as copy from sender' do
|
||||
assert_equal ['test@example.com'], mail.reply_to
|
||||
end
|
||||
|
||||
test 'set up subject from I18n' do
|
||||
test 'setup subject from I18n' do
|
||||
store_translations :en, devise: { mailer: { reset_password_instructions: { subject: 'Reset instructions' } } } do
|
||||
assert_equal 'Reset instructions', mail.subject
|
||||
end
|
||||
|
||||
@@ -40,16 +40,16 @@ class UnlockInstructionsTest < ActionMailer::TestCase
|
||||
assert_equal [user.email], mail.to
|
||||
end
|
||||
|
||||
test 'set up sender from configuration' do
|
||||
test 'setup sender from configuration' do
|
||||
assert_equal ['test@example.com'], mail.from
|
||||
end
|
||||
|
||||
test 'set up sender from custom mailer defaults' do
|
||||
test 'setup sender from custom mailer defaults' do
|
||||
Devise.mailer = 'Users::Mailer'
|
||||
assert_equal ['custom@example.com'], mail.from
|
||||
end
|
||||
|
||||
test 'set up sender from custom mailer defaults with proc' do
|
||||
test 'setup sender from custom mailer defaults with proc' do
|
||||
Devise.mailer = 'Users::FromProcMailer'
|
||||
assert_equal ['custom@example.com'], mail.from
|
||||
end
|
||||
@@ -59,11 +59,11 @@ class UnlockInstructionsTest < ActionMailer::TestCase
|
||||
assert_present mail.body.encoded
|
||||
end
|
||||
|
||||
test 'set up reply to as copy from sender' do
|
||||
test 'setup reply to as copy from sender' do
|
||||
assert_equal ['test@example.com'], mail.reply_to
|
||||
end
|
||||
|
||||
test 'set up subject from I18n' do
|
||||
test 'setup subject from I18n' do
|
||||
store_translations :en, devise: { mailer: { unlock_instructions: { subject: 'Yo unlock instructions' } } } do
|
||||
assert_equal 'Yo unlock instructions', mail.subject
|
||||
end
|
||||
|
||||
@@ -35,8 +35,8 @@ class MappingTest < ActiveSupport::TestCase
|
||||
assert_equal [], Devise.mappings[:skip_admin].used_routes
|
||||
end
|
||||
|
||||
test 'sign_out_via defaults to :delete' do
|
||||
assert_equal :delete, Devise.mappings[:user].sign_out_via
|
||||
test 'sign_out_via defaults to :get' do
|
||||
assert_equal :get, Devise.mappings[:user].sign_out_via
|
||||
end
|
||||
|
||||
test 'allows custom sign_out_via to be given' do
|
||||
|
||||
@@ -188,7 +188,7 @@ class ConfirmableTest < ActiveSupport::TestCase
|
||||
|
||||
test 'confirm time should fallback to devise confirm in default configuration' do
|
||||
swap Devise, allow_unconfirmed_access_for: 1.day do
|
||||
user = create_user
|
||||
user = new_user
|
||||
user.confirmation_sent_at = 2.days.ago
|
||||
assert_not user.active_for_authentication?
|
||||
|
||||
@@ -256,7 +256,7 @@ class ConfirmableTest < ActiveSupport::TestCase
|
||||
user.instance_eval { def confirmation_required?; false end }
|
||||
user.confirmation_sent_at = nil
|
||||
user.save
|
||||
assert user.reload.confirm
|
||||
assert user.reload.confirm!
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -92,28 +92,28 @@ class DatabaseAuthenticatableTest < ActiveSupport::TestCase
|
||||
assert user.respond_to?(:password_confirmation)
|
||||
end
|
||||
|
||||
test 'should generate a hashed password while setting password' do
|
||||
test 'should generate encrypted password while setting password' do
|
||||
user = new_user
|
||||
assert_present user.encrypted_password
|
||||
end
|
||||
|
||||
test 'should support custom hashing methods' do
|
||||
user = UserWithCustomHashing.new(password: '654321')
|
||||
test 'should support custom encryption methods' do
|
||||
user = UserWithCustomEncryption.new(password: '654321')
|
||||
assert_equal user.encrypted_password, '123456'
|
||||
end
|
||||
|
||||
test 'allow authenticatable_salt to work even with nil hashed password' do
|
||||
test 'allow authenticatable_salt to work even with nil encrypted password' do
|
||||
user = User.new
|
||||
user.encrypted_password = nil
|
||||
assert_nil user.authenticatable_salt
|
||||
end
|
||||
|
||||
test 'should not generate a hashed password if password is blank' do
|
||||
test 'should not generate encrypted password if password is blank' do
|
||||
assert_blank new_user(password: nil).encrypted_password
|
||||
assert_blank new_user(password: '').encrypted_password
|
||||
end
|
||||
|
||||
test 'should hash password again if password has changed' do
|
||||
test 'should encrypt password again if password has changed' do
|
||||
user = create_user
|
||||
encrypted_password = user.encrypted_password
|
||||
user.password = user.password_confirmation = 'new_password'
|
||||
|
||||
@@ -29,7 +29,7 @@ class ValidatableTest < ActiveSupport::TestCase
|
||||
assert user.invalid?
|
||||
assert_not_equal 'is invalid', user.errors[:email].join
|
||||
|
||||
%w{invalid_email_format 123 $$$ () ☃}.each do |email|
|
||||
%w{invalid_email_format 123 $$$ () ☃ bla@bla.}.each do |email|
|
||||
user.email = email
|
||||
assert user.invalid?, 'should be invalid with email ' << email
|
||||
assert_equal 'is invalid', user.errors[:email].join
|
||||
@@ -57,7 +57,11 @@ class ValidatableTest < ActiveSupport::TestCase
|
||||
user = new_user(password: 'new_password', password_confirmation: 'blabla')
|
||||
assert user.invalid?
|
||||
|
||||
assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
|
||||
if Devise.rails4?
|
||||
assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
|
||||
else
|
||||
assert_equal 'doesn\'t match confirmation', user.errors[:password].join
|
||||
end
|
||||
end
|
||||
|
||||
test 'should require password when updating/resetting password' do
|
||||
@@ -75,7 +79,11 @@ class ValidatableTest < ActiveSupport::TestCase
|
||||
user.password_confirmation = 'another_password'
|
||||
assert user.invalid?
|
||||
|
||||
assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
|
||||
if Devise.rails4?
|
||||
assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
|
||||
else
|
||||
assert_equal 'doesn\'t match confirmation', user.errors[:password].join
|
||||
end
|
||||
end
|
||||
|
||||
test 'should require a password with minimum of 7 characters' do
|
||||
|
||||
@@ -1,21 +1,24 @@
|
||||
require 'test_helper'
|
||||
|
||||
class OmniAuthRoutesTest < ActionController::TestCase
|
||||
ExpectedUrlGeneratiorError = Devise.rails4? ?
|
||||
ActionController::UrlGenerationError : ActionController::RoutingError
|
||||
|
||||
tests ApplicationController
|
||||
|
||||
def assert_path(action, provider, with_param=true)
|
||||
# Resource param
|
||||
assert_equal @controller.send(action, :user, provider),
|
||||
@controller.send("user_#{provider}_#{action}")
|
||||
@controller.send("user_#{action}", provider)
|
||||
|
||||
# With an object
|
||||
assert_equal @controller.send(action, User.new, provider),
|
||||
@controller.send("user_#{provider}_#{action}")
|
||||
@controller.send("user_#{action}", provider)
|
||||
|
||||
if with_param
|
||||
# Default url params
|
||||
assert_equal @controller.send(action, :user, provider, param: 123),
|
||||
@controller.send("user_#{provider}_#{action}", param: 123)
|
||||
@controller.send("user_#{action}", provider, param: 123)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -30,7 +33,7 @@ class OmniAuthRoutesTest < ActionController::TestCase
|
||||
test 'should generate authorization path' do
|
||||
assert_match "/users/auth/facebook", @controller.omniauth_authorize_path(:user, :facebook)
|
||||
|
||||
assert_raise NoMethodError do
|
||||
assert_raise ExpectedUrlGeneratiorError do
|
||||
@controller.omniauth_authorize_path(:user, :github)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,13 +5,6 @@ ActiveRecord::Base.include_root_in_json = true
|
||||
ActiveRecord::Migrator.migrate(File.expand_path("../../rails_app/db/migrate/", __FILE__))
|
||||
|
||||
class ActiveSupport::TestCase
|
||||
if Devise.rails5?
|
||||
self.use_transactional_tests = true
|
||||
else
|
||||
# Let `after_commit` work with transactional fixtures, however this is not needed for Rails 5.
|
||||
require 'test_after_commit'
|
||||
self.use_transactional_fixtures = true
|
||||
end
|
||||
|
||||
self.use_transactional_fixtures = true
|
||||
self.use_instantiated_fixtures = false
|
||||
end
|
||||
|
||||
@@ -1,131 +1,81 @@
|
||||
require 'test_helper'
|
||||
require 'devise/parameter_sanitizer'
|
||||
|
||||
class ParameterSanitizerTest < ActiveSupport::TestCase
|
||||
class BaseSanitizerTest < ActiveSupport::TestCase
|
||||
def sanitizer(params)
|
||||
params = ActionController::Parameters.new(params)
|
||||
Devise::ParameterSanitizer.new(User, :user, params)
|
||||
Devise::BaseSanitizer.new(User, :user, params)
|
||||
end
|
||||
|
||||
test 'permits the default parameters for sign in' do
|
||||
sanitizer = sanitizer('user' => { 'email' => 'jose' })
|
||||
sanitized = sanitizer.sanitize(:sign_in)
|
||||
|
||||
assert_equal({ 'email' => 'jose' }, sanitized)
|
||||
end
|
||||
|
||||
test 'permits the default parameters for sign up' do
|
||||
sanitizer = sanitizer('user' => { 'email' => 'jose', 'role' => 'invalid' })
|
||||
sanitized = sanitizer.sanitize(:sign_up)
|
||||
|
||||
assert_equal({ 'email' => 'jose' }, sanitized)
|
||||
end
|
||||
|
||||
test 'permits the default parameters for account update' do
|
||||
sanitizer = sanitizer('user' => { 'email' => 'jose', 'role' => 'invalid' })
|
||||
sanitized = sanitizer.sanitize(:account_update)
|
||||
|
||||
assert_equal({ 'email' => 'jose' }, sanitized)
|
||||
end
|
||||
|
||||
test 'permits news parameters for an existing action' do
|
||||
sanitizer = sanitizer('user' => { 'username' => 'jose' })
|
||||
sanitizer.permit(:sign_in, keys: [:username])
|
||||
sanitized = sanitizer.sanitize(:sign_in)
|
||||
|
||||
assert_equal({ 'username' => 'jose' }, sanitized)
|
||||
end
|
||||
|
||||
test 'permits news parameters for an existing action with a block' do
|
||||
sanitizer = sanitizer('user' => { 'username' => 'jose' })
|
||||
sanitizer.permit(:sign_in) do |user|
|
||||
user.permit(:username)
|
||||
end
|
||||
|
||||
sanitized = sanitizer.sanitize(:sign_in)
|
||||
|
||||
assert_equal({ 'username' => 'jose' }, sanitized)
|
||||
end
|
||||
|
||||
test 'permit parameters for new actions' do
|
||||
sanitizer = sanitizer('user' => { 'email' => 'jose@omglol', 'name' => 'Jose' })
|
||||
sanitizer.permit(:invite_user, keys: [:email, :name])
|
||||
|
||||
sanitized = sanitizer.sanitize(:invite_user)
|
||||
|
||||
assert_equal({ 'email' => 'jose@omglol', 'name' => 'Jose' }, sanitized)
|
||||
end
|
||||
|
||||
test 'fails when we do not have any permitted parameters for the action' do
|
||||
sanitizer = sanitizer('user' => { 'email' => 'jose', 'password' => 'invalid' })
|
||||
|
||||
assert_raise NotImplementedError do
|
||||
sanitizer.sanitize(:unknown)
|
||||
end
|
||||
end
|
||||
|
||||
test 'removes permitted parameters' do
|
||||
sanitizer = sanitizer('user' => { 'email' => 'jose@omglol', 'username' => 'jose' })
|
||||
|
||||
sanitizer.permit(:sign_in, keys: [:username], except: [:email])
|
||||
sanitized = sanitizer.sanitize(:sign_in)
|
||||
|
||||
assert_equal({ 'username' => 'jose' }, sanitized)
|
||||
test 'returns chosen params' do
|
||||
sanitizer = sanitizer(user: { "email" => "jose" })
|
||||
assert_equal({ "email" => "jose" }, sanitizer.sanitize(:sign_in))
|
||||
end
|
||||
end
|
||||
|
||||
class DeprecatedParameterSanitizerAPITest < ActiveSupport::TestCase
|
||||
class CustomSanitizer < Devise::ParameterSanitizer
|
||||
def sign_in
|
||||
default_params.permit(:username)
|
||||
if defined?(ActionController::StrongParameters)
|
||||
require 'active_model/forbidden_attributes_protection'
|
||||
|
||||
class ParameterSanitizerTest < ActiveSupport::TestCase
|
||||
def sanitizer(params)
|
||||
params = ActionController::Parameters.new(params)
|
||||
Devise::ParameterSanitizer.new(User, :user, params)
|
||||
end
|
||||
end
|
||||
|
||||
def sanitizer(params)
|
||||
params = ActionController::Parameters.new(params)
|
||||
Devise::ParameterSanitizer.new(User, :user, params)
|
||||
end
|
||||
|
||||
test 'overriding instance methods have precedence over the default sanitized attributes' do
|
||||
assert_deprecated do
|
||||
params = ActionController::Parameters.new(user: { "username" => "jose", "name" => "Jose" })
|
||||
sanitizer = CustomSanitizer.new(User, :user, params)
|
||||
|
||||
sanitized = sanitizer.sanitize(:sign_in)
|
||||
|
||||
assert_equal({ "username" => "jose" }, sanitized)
|
||||
test 'filters some parameters on sign in by default' do
|
||||
sanitizer = sanitizer(user: { "email" => "jose", "password" => "invalid", "remember_me" => "1" })
|
||||
assert_equal({ "email" => "jose", "password" => "invalid", "remember_me" => "1" }, sanitizer.sanitize(:sign_in))
|
||||
end
|
||||
end
|
||||
|
||||
test 'adding new parameters by mutating the Array' do
|
||||
assert_deprecated do
|
||||
sanitizer = sanitizer('user' => { 'username' => 'jose' })
|
||||
sanitizer.for(:sign_in) << :username
|
||||
sanitized = sanitizer.sanitize(:sign_in)
|
||||
|
||||
assert_equal({ 'username' => 'jose' }, sanitized)
|
||||
test 'handles auth keys as a hash' do
|
||||
swap Devise, authentication_keys: {email: true} do
|
||||
sanitizer = sanitizer(user: { "email" => "jose", "password" => "invalid" })
|
||||
assert_equal({ "email" => "jose", "password" => "invalid" }, sanitizer.sanitize(:sign_in))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
test 'adding new parameters with a block' do
|
||||
assert_deprecated do
|
||||
sanitizer = sanitizer('user' => { 'username' => 'jose' })
|
||||
sanitizer.for(:sign_in) { |user| user.permit(:username) }
|
||||
test 'filters some parameters on sign up by default' do
|
||||
sanitizer = sanitizer(user: { "email" => "jose", "role" => "invalid" })
|
||||
assert_equal({ "email" => "jose" }, sanitizer.sanitize(:sign_up))
|
||||
end
|
||||
|
||||
sanitized = sanitizer.sanitize(:sign_in)
|
||||
test 'filters some parameters on account update by default' do
|
||||
sanitizer = sanitizer(user: { "email" => "jose", "role" => "invalid" })
|
||||
assert_equal({ "email" => "jose" }, sanitizer.sanitize(:account_update))
|
||||
end
|
||||
|
||||
assert_equal({ 'username' => 'jose' }, sanitized)
|
||||
end
|
||||
end
|
||||
test 'allows custom hooks' do
|
||||
sanitizer = sanitizer(user: { "email" => "jose", "password" => "invalid" })
|
||||
sanitizer.for(:sign_in) { |user| user.permit(:email, :password) }
|
||||
assert_equal({ "email" => "jose", "password" => "invalid" }, sanitizer.sanitize(:sign_in))
|
||||
end
|
||||
|
||||
test 'removing multiple default parameters' do
|
||||
assert_deprecated do
|
||||
sanitizer = sanitizer('user' => { 'email' => 'jose', 'password' => 'invalid', 'remember_me' => '1' })
|
||||
test 'adding multiple permitted parameters' do
|
||||
sanitizer = sanitizer(user: { "email" => "jose", "username" => "jose1", "role" => "valid" })
|
||||
sanitizer.for(:sign_in).concat([:username, :role])
|
||||
assert_equal({ "email" => "jose", "username" => "jose1", "role" => "valid" }, sanitizer.sanitize(:sign_in))
|
||||
end
|
||||
|
||||
test 'removing multiple default parameters' do
|
||||
sanitizer = sanitizer(user: { "email" => "jose", "password" => "invalid", "remember_me" => "1" })
|
||||
sanitizer.for(:sign_in).delete(:email)
|
||||
sanitizer.for(:sign_in).delete(:password)
|
||||
sanitized = sanitizer.sanitize(:sign_in)
|
||||
assert_equal({ "remember_me" => "1" }, sanitizer.sanitize(:sign_in))
|
||||
end
|
||||
|
||||
assert_equal({ 'remember_me' => '1' }, sanitized)
|
||||
test 'raises on unknown hooks' do
|
||||
sanitizer = sanitizer(user: { "email" => "jose", "password" => "invalid" })
|
||||
assert_raise NotImplementedError do
|
||||
sanitizer.sanitize(:unknown)
|
||||
end
|
||||
end
|
||||
|
||||
test 'passes parameters to filter as arguments to sanitizer' do
|
||||
params = {user: stub}
|
||||
sanitizer = Devise::ParameterSanitizer.new(User, :user, params)
|
||||
|
||||
params[:user].expects(:permit).with(kind_of(Symbol), kind_of(Symbol), kind_of(Symbol))
|
||||
|
||||
sanitizer.sanitize(:sign_in)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,5 +3,4 @@ require 'shared_user'
|
||||
class User < ActiveRecord::Base
|
||||
include Shim
|
||||
include SharedUser
|
||||
include ActiveModel::Serializers::Xml if Devise.rails5?
|
||||
end
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
class AdminsController < ApplicationController
|
||||
before_action :authenticate_admin!
|
||||
before_filter :authenticate_admin!
|
||||
|
||||
def index
|
||||
end
|
||||
|
||||
@@ -3,9 +3,10 @@
|
||||
|
||||
class ApplicationController < ActionController::Base
|
||||
protect_from_forgery
|
||||
before_action :current_user, unless: :devise_controller?
|
||||
before_action :authenticate_user!, if: :devise_controller?
|
||||
respond_to(*Mime::SET.map(&:to_sym))
|
||||
before_filter :current_user, unless: :devise_controller?
|
||||
before_filter :authenticate_user!, if: :devise_controller?
|
||||
respond_to *Mime::SET.map(&:to_sym)
|
||||
|
||||
devise_group :commenter, contains: [:user, :admin]
|
||||
end
|
||||
|
||||
|
||||
@@ -20,10 +20,6 @@ class HomeController < ApplicationController
|
||||
end
|
||||
|
||||
def unauthenticated
|
||||
if Devise.rails5?
|
||||
render body: "unauthenticated", status: :unauthorized
|
||||
else
|
||||
render text: "unauthenticated", status: :unauthorized
|
||||
end
|
||||
render text: "unauthenticated", status: :unauthorized
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
||||
def facebook
|
||||
data = request.respond_to?(:get_header) ? request.get_header("omniauth.auth") : env["omniauth.auth"]
|
||||
data = env["omniauth.auth"]
|
||||
session["devise.facebook_data"] = data["extra"]["user_hash"]
|
||||
render json: data
|
||||
end
|
||||
@@ -9,6 +9,6 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
||||
user = User.to_adapter.find_first(email: 'user@test.com')
|
||||
user.remember_me = true
|
||||
sign_in user
|
||||
render (Devise.rails5? ? :body : :text) => ""
|
||||
render text: ""
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
class UsersController < ApplicationController
|
||||
prepend_before_action :current_user, only: :exhibit
|
||||
before_action :authenticate_user!, except: [:accept, :exhibit]
|
||||
prepend_before_filter :current_user, only: :exhibit
|
||||
before_filter :authenticate_user!, except: [:accept, :exhibit]
|
||||
respond_to :html, :xml
|
||||
|
||||
def index
|
||||
@@ -13,7 +13,7 @@ class UsersController < ApplicationController
|
||||
end
|
||||
|
||||
def update_form
|
||||
render (Devise.rails5? ? :body : :text) => 'Update'
|
||||
render text: 'Update'
|
||||
end
|
||||
|
||||
def accept
|
||||
@@ -21,11 +21,11 @@ class UsersController < ApplicationController
|
||||
end
|
||||
|
||||
def exhibit
|
||||
render (Devise.rails5? ? :body : :text) => current_user ? "User is authenticated" : "User is not authenticated"
|
||||
render text: current_user ? "User is authenticated" : "User is not authenticated"
|
||||
end
|
||||
|
||||
def expire
|
||||
user_session['last_request_at'] = 31.minutes.ago.utc
|
||||
render (Devise.rails5? ? :body : :text) => 'User will be expired on next request'
|
||||
render text: 'User will be expired on next request'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -28,14 +28,10 @@ module RailsApp
|
||||
|
||||
# Configure sensitive parameters which will be filtered from the log file.
|
||||
config.filter_parameters << :password
|
||||
# config.assets.enabled = false
|
||||
config.assets.enabled = false
|
||||
|
||||
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
|
||||
|
||||
if DEVISE_ORM == :active_record && (Rails::VERSION::MAJOR >= 4 && Rails::VERSION::MINOR >= 2)
|
||||
config.active_record.raise_in_transactional_callbacks = true
|
||||
end
|
||||
|
||||
# This was used to break devise in some situations
|
||||
config.to_prepare do
|
||||
Devise::SessionsController.layout "application"
|
||||
|
||||
@@ -3,12 +3,12 @@ unless defined?(DEVISE_ORM)
|
||||
end
|
||||
|
||||
module Devise
|
||||
# Detection for minor differences between Rails 4 and 5 in tests.
|
||||
def self.rails5?
|
||||
Rails.version.start_with? '5'
|
||||
# Detection for minor differences between Rails 3.2 and 4 in tests.
|
||||
def self.rails4?
|
||||
Rails.version.start_with? '4'
|
||||
end
|
||||
end
|
||||
|
||||
# Set up gems listed in the Gemfile.
|
||||
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../../Gemfile', __FILE__)
|
||||
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
|
||||
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
|
||||
|
||||
@@ -19,12 +19,7 @@ RailsApp::Application.configure do
|
||||
else
|
||||
config.serve_static_assets = true
|
||||
end
|
||||
|
||||
if Rails.version >= "5.0.0"
|
||||
config.public_file_server.headers = {'Cache-Control' => 'public, max-age=3600'}
|
||||
else
|
||||
config.static_cache_control = "public, max-age=3600"
|
||||
end
|
||||
config.static_cache_control = "public, max-age=3600"
|
||||
|
||||
# Show full error reports and disable caching.
|
||||
config.consider_all_requests_local = true
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user