devise_oam 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +6 -3
- data/lib/devise_oam/authenticatable_entity.rb +4 -3
- data/lib/devise_oam/strategies/header_authenticatable.rb +35 -14
- data/lib/devise_oam/version.rb +1 -1
- data/lib/devise_oam.rb +8 -1
- data/test/authenticatable_entity_test.rb +21 -0
- data/test/device_oam_test.rb +20 -0
- data/test/dummy/app/models/user.rb +6 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/log/development.log +153 -0
- data/test/dummy/log/test.log +5211 -0
- data/test/dummy/tmp/cache/assets/C7C/0A0/sprockets%2F597e930120327bb64dc863270f4750cc +0 -0
- data/test/dummy/tmp/cache/assets/CBF/400/sprockets%2Fd61b9c798a00b2d9a90a027658659e88 +0 -0
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/DA2/2B0/sprockets%2F30e17171d77ff9cf3ec4717f1dbb1ea9 +0 -0
- data/test/dummy/tmp/cache/assets/DC2/9A0/sprockets%2Fcac341f68ddf22babb24636eee6d4071 +0 -0
- data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/{devise_oam_test.rb → header_authenticatable_test.rb} +15 -26
- metadata +34 -6
data/README.md
CHANGED
@@ -8,7 +8,7 @@ integration with Oracle Access Manager.
|
|
8
8
|
## Installation
|
9
9
|
In **Rails 3**, add this to your Gemfile and run the `bundle` command.
|
10
10
|
|
11
|
-
gem "devise_oam",
|
11
|
+
gem "devise_oam", "~> 0.0.3"
|
12
12
|
|
13
13
|
## Usage
|
14
14
|
1) Add the `HeaderAuthenticatable` strategy in devise initializer `config/initializers/devise.rb`:
|
@@ -38,7 +38,10 @@ end
|
|
38
38
|
* `create_user_if_not_found` - if set to true this will create a new user if no user was found
|
39
39
|
* `create_user_method` - method in the `user_class` to handle new user creation
|
40
40
|
* `ldap_header` - HTTP header for LDAP roles
|
41
|
-
* `
|
41
|
+
* `update_user_method` - method in the `user_class` to handle updating user roles and additional attributes
|
42
|
+
* `attr_headers` - headers with additional attributes that are passed to `update_user_method`
|
43
|
+
|
44
|
+
`roles_setter` should still work, but is deprecated
|
42
45
|
|
43
46
|
### Automatic user creation
|
44
47
|
If you need to automatically create new users based on `oam_header` you need to do the following:
|
@@ -54,7 +57,7 @@ To use LDAP roles parsing:
|
|
54
57
|
|
55
58
|
1. Set `ldap_header` setting to the HTTP header with roles (should be a comma separated string)
|
56
59
|
2. Add a method to your user class that will accept an array with roles and update the user
|
57
|
-
3. In the initializer set `
|
60
|
+
3. In the initializer set `update_user_method` setting to the method you've just created
|
58
61
|
|
59
62
|
For an example see `test/dummy` app.
|
60
63
|
|
@@ -1,10 +1,11 @@
|
|
1
1
|
module DeviseOam
|
2
2
|
class AuthenticatableEntity
|
3
|
-
attr_accessor :login, :ldap_roles
|
3
|
+
attr_accessor :login, :ldap_roles, :attributes
|
4
4
|
|
5
|
-
def initialize(login, ldap_roles = nil)
|
5
|
+
def initialize(login, ldap_roles = nil, attributes = {})
|
6
6
|
@login = login
|
7
7
|
@ldap_roles = parse_ldap_roles(ldap_roles) if ldap_roles
|
8
|
+
@attributes = attributes
|
8
9
|
end
|
9
10
|
|
10
11
|
private
|
@@ -12,4 +13,4 @@ module DeviseOam
|
|
12
13
|
ldap_roles.strip.downcase.split(',')
|
13
14
|
end
|
14
15
|
end
|
15
|
-
end
|
16
|
+
end
|
@@ -4,24 +4,20 @@ module DeviseOam
|
|
4
4
|
class HeaderAuthenticatable < ::Devise::Strategies::Base
|
5
5
|
attr_reader :authenticatable
|
6
6
|
|
7
|
+
# strategy is only valid if there is a DeviseOam.oam_header header in the request
|
7
8
|
def valid?
|
8
|
-
# this strategy is only valid if there is a DeviseOam.oam_header header in the request
|
9
9
|
request.headers[DeviseOam.oam_header]
|
10
10
|
end
|
11
11
|
|
12
12
|
def authenticate!
|
13
|
-
failure_message = "OAM authentication failed"
|
14
|
-
|
15
13
|
oam_data = request.headers[DeviseOam.oam_header]
|
16
|
-
if DeviseOam.ldap_header
|
17
|
-
|
18
|
-
end
|
14
|
+
ldap_data = request.headers[DeviseOam.ldap_header] if DeviseOam.ldap_header
|
15
|
+
attributes = get_attributes if DeviseOam.attr_headers
|
19
16
|
|
20
17
|
if oam_data.blank?
|
21
|
-
fail!(
|
18
|
+
fail!("OAM authentication failed")
|
22
19
|
else
|
23
|
-
@authenticatable = AuthenticatableEntity.new(oam_data, ldap_data)
|
24
|
-
|
20
|
+
@authenticatable = AuthenticatableEntity.new(oam_data, ldap_data, attributes)
|
25
21
|
user = find_or_create_user
|
26
22
|
success!(user)
|
27
23
|
end
|
@@ -34,17 +30,42 @@ module DeviseOam
|
|
34
30
|
private
|
35
31
|
|
36
32
|
def find_or_create_user
|
37
|
-
user =
|
38
|
-
|
33
|
+
user = find_user
|
39
34
|
if user.nil? && DeviseOam.create_user_if_not_found
|
40
|
-
user =
|
35
|
+
user = create_user
|
41
36
|
elsif user && set_roles?
|
42
|
-
user
|
37
|
+
update_user(user)
|
43
38
|
end
|
44
39
|
|
45
40
|
user
|
46
41
|
end
|
42
|
+
|
43
|
+
def find_user
|
44
|
+
DeviseOam.user_class.where({ DeviseOam.user_login_field.to_sym => @authenticatable.login }).first
|
45
|
+
end
|
46
|
+
|
47
|
+
def create_user
|
48
|
+
DeviseOam.user_class.send(DeviseOam.create_user_method, {
|
49
|
+
DeviseOam.user_login_field.to_sym => @authenticatable.login,
|
50
|
+
roles: @authenticatable.ldap_roles
|
51
|
+
})
|
52
|
+
end
|
53
|
+
|
54
|
+
def update_user(user)
|
55
|
+
if @authenticatable.attributes.any?
|
56
|
+
user.send(DeviseOam.update_user_method, @authenticatable.ldap_roles, @authenticatable.attributes)
|
57
|
+
else
|
58
|
+
user.send(DeviseOam.update_user_method, @authenticatable.ldap_roles)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def get_attributes
|
63
|
+
hash = DeviseOam.attr_headers.inject({}) {|attr_hash, attr_header|
|
64
|
+
attr_hash[attr_header.underscore] = request.headers[attr_header] if request.headers[attr_header]
|
65
|
+
attr_hash
|
66
|
+
}
|
67
|
+
end
|
47
68
|
end
|
48
69
|
end
|
49
70
|
end
|
50
|
-
end
|
71
|
+
end
|
data/lib/devise_oam/version.rb
CHANGED
data/lib/devise_oam.rb
CHANGED
@@ -3,7 +3,6 @@ require "devise_oam/strategies/header_authenticatable"
|
|
3
3
|
require "devise_oam/authenticatable_entity"
|
4
4
|
|
5
5
|
module DeviseOam
|
6
|
-
|
7
6
|
# Settings
|
8
7
|
mattr_accessor :oam_header
|
9
8
|
mattr_accessor :user_class
|
@@ -12,6 +11,10 @@ module DeviseOam
|
|
12
11
|
mattr_accessor :create_user_method
|
13
12
|
mattr_accessor :ldap_header
|
14
13
|
mattr_accessor :roles_setter
|
14
|
+
mattr_accessor :attr_headers
|
15
|
+
mattr_writer :update_user_method
|
16
|
+
|
17
|
+
@@update_user_method = nil
|
15
18
|
|
16
19
|
def self.setup
|
17
20
|
yield self
|
@@ -20,4 +23,8 @@ module DeviseOam
|
|
20
23
|
def self.user_class
|
21
24
|
@@user_class.constantize
|
22
25
|
end
|
26
|
+
|
27
|
+
def self.update_user_method
|
28
|
+
@@update_user_method || @@roles_setter
|
29
|
+
end
|
23
30
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
include TestHelpers
|
3
|
+
|
4
|
+
class DeviseOamTest < ActiveSupport::TestCase
|
5
|
+
test "correctly parses ldap roles" do
|
6
|
+
ldap_roles = 'role-1,Role-2'
|
7
|
+
roles = ["role-1", "role-2"]
|
8
|
+
|
9
|
+
authenticatable = DeviseOam::AuthenticatableEntity.new("login", ldap_roles)
|
10
|
+
|
11
|
+
assert_equal authenticatable.ldap_roles, roles
|
12
|
+
end
|
13
|
+
|
14
|
+
test "login is case sensitive" do
|
15
|
+
auth1 = DeviseOam::AuthenticatableEntity.new("Login")
|
16
|
+
auth2 = DeviseOam::AuthenticatableEntity.new("loGin")
|
17
|
+
|
18
|
+
assert_equal auth1.login, "Login"
|
19
|
+
assert_equal auth2.login, "loGin"
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
include TestHelpers
|
3
|
+
|
4
|
+
class DeviseOamTest < ActiveSupport::TestCase
|
5
|
+
test "truth" do
|
6
|
+
assert_kind_of Module, DeviseOam
|
7
|
+
end
|
8
|
+
|
9
|
+
test "setup block yields self" do
|
10
|
+
DeviseOam.setup do |config|
|
11
|
+
assert_equal DeviseOam, config
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
test "update_user_method is set to roles_setter by default" do
|
16
|
+
DeviseOam.update_user_method = nil
|
17
|
+
DeviseOam.roles_setter = :roles_setter
|
18
|
+
assert_equal DeviseOam.update_user_method, :roles_setter
|
19
|
+
end
|
20
|
+
end
|
Binary file
|
@@ -0,0 +1,153 @@
|
|
1
|
+
Connecting to database specified by database.yml
|
2
|
+
|
3
|
+
|
4
|
+
Started GET "/" for 127.0.0.1 at 2012-09-19 17:26:30 +0400
|
5
|
+
Processing by UsersController#index as HTML
|
6
|
+
Completed 401 Unauthorized in 9ms
|
7
|
+
|
8
|
+
|
9
|
+
Started GET "/users/sign_in" for 127.0.0.1 at 2012-09-19 17:26:30 +0400
|
10
|
+
Processing by Devise::SessionsController#new as HTML
|
11
|
+
Completed 500 Internal Server Error in 46ms
|
12
|
+
|
13
|
+
ActiveRecord::StatementInvalid (Could not find table 'users'):
|
14
|
+
activerecord (3.2.5) lib/active_record/connection_adapters/sqlite_adapter.rb:472:in `table_structure'
|
15
|
+
activerecord (3.2.5) lib/active_record/connection_adapters/sqlite_adapter.rb:346:in `columns'
|
16
|
+
activerecord (3.2.5) lib/active_record/connection_adapters/schema_cache.rb:12:in `block in initialize'
|
17
|
+
activerecord (3.2.5) lib/active_record/model_schema.rb:228:in `yield'
|
18
|
+
activerecord (3.2.5) lib/active_record/model_schema.rb:228:in `default'
|
19
|
+
activerecord (3.2.5) lib/active_record/model_schema.rb:228:in `columns'
|
20
|
+
activerecord (3.2.5) lib/active_record/model_schema.rb:243:in `column_defaults'
|
21
|
+
activerecord (3.2.5) lib/active_record/base.rb:482:in `initialize'
|
22
|
+
devise (2.1.2) app/controllers/devise_controller.rb:102:in `new'
|
23
|
+
devise (2.1.2) app/controllers/devise_controller.rb:102:in `build_resource'
|
24
|
+
devise (2.1.2) app/controllers/devise/sessions_controller.rb:8:in `new'
|
25
|
+
actionpack (3.2.5) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
|
26
|
+
actionpack (3.2.5) lib/abstract_controller/base.rb:167:in `process_action'
|
27
|
+
actionpack (3.2.5) lib/action_controller/metal/rendering.rb:10:in `process_action'
|
28
|
+
actionpack (3.2.5) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
|
29
|
+
activesupport (3.2.5) lib/active_support/callbacks.rb:458:in `_run__3322301534199686528__process_action__3654599336353534351__callbacks'
|
30
|
+
activesupport (3.2.5) lib/active_support/callbacks.rb:405:in `__run_callback'
|
31
|
+
activesupport (3.2.5) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
|
32
|
+
activesupport (3.2.5) lib/active_support/callbacks.rb:81:in `run_callbacks'
|
33
|
+
actionpack (3.2.5) lib/abstract_controller/callbacks.rb:17:in `process_action'
|
34
|
+
actionpack (3.2.5) lib/action_controller/metal/rescue.rb:29:in `process_action'
|
35
|
+
actionpack (3.2.5) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
|
36
|
+
activesupport (3.2.5) lib/active_support/notifications.rb:123:in `block in instrument'
|
37
|
+
activesupport (3.2.5) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
|
38
|
+
activesupport (3.2.5) lib/active_support/notifications.rb:123:in `instrument'
|
39
|
+
actionpack (3.2.5) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
|
40
|
+
actionpack (3.2.5) lib/action_controller/metal/params_wrapper.rb:206:in `process_action'
|
41
|
+
activerecord (3.2.5) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
|
42
|
+
actionpack (3.2.5) lib/abstract_controller/base.rb:121:in `process'
|
43
|
+
actionpack (3.2.5) lib/abstract_controller/rendering.rb:45:in `process'
|
44
|
+
actionpack (3.2.5) lib/action_controller/metal.rb:203:in `dispatch'
|
45
|
+
actionpack (3.2.5) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
|
46
|
+
actionpack (3.2.5) lib/action_controller/metal.rb:246:in `block in action'
|
47
|
+
actionpack (3.2.5) lib/action_dispatch/routing/route_set.rb:73:in `call'
|
48
|
+
actionpack (3.2.5) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
|
49
|
+
actionpack (3.2.5) lib/action_dispatch/routing/route_set.rb:36:in `call'
|
50
|
+
actionpack (3.2.5) lib/action_dispatch/routing/mapper.rb:42:in `call'
|
51
|
+
journey (1.0.3) lib/journey/router.rb:68:in `block in call'
|
52
|
+
journey (1.0.3) lib/journey/router.rb:56:in `each'
|
53
|
+
journey (1.0.3) lib/journey/router.rb:56:in `call'
|
54
|
+
actionpack (3.2.5) lib/action_dispatch/routing/route_set.rb:600:in `call'
|
55
|
+
warden (1.2.1) lib/warden/manager.rb:35:in `block in call'
|
56
|
+
warden (1.2.1) lib/warden/manager.rb:34:in `catch'
|
57
|
+
warden (1.2.1) lib/warden/manager.rb:34:in `call'
|
58
|
+
actionpack (3.2.5) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
|
59
|
+
rack (1.4.1) lib/rack/etag.rb:23:in `call'
|
60
|
+
rack (1.4.1) lib/rack/conditionalget.rb:25:in `call'
|
61
|
+
actionpack (3.2.5) lib/action_dispatch/middleware/head.rb:14:in `call'
|
62
|
+
actionpack (3.2.5) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
|
63
|
+
actionpack (3.2.5) lib/action_dispatch/middleware/flash.rb:238:in `call'
|
64
|
+
rack (1.4.1) lib/rack/session/abstract/id.rb:205:in `context'
|
65
|
+
rack (1.4.1) lib/rack/session/abstract/id.rb:200:in `call'
|
66
|
+
actionpack (3.2.5) lib/action_dispatch/middleware/cookies.rb:338:in `call'
|
67
|
+
activerecord (3.2.5) lib/active_record/query_cache.rb:64:in `call'
|
68
|
+
activerecord (3.2.5) lib/active_record/connection_adapters/abstract/connection_pool.rb:473:in `call'
|
69
|
+
actionpack (3.2.5) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
|
70
|
+
activesupport (3.2.5) lib/active_support/callbacks.rb:405:in `_run__2963724873740439576__call__167442707437893209__callbacks'
|
71
|
+
activesupport (3.2.5) lib/active_support/callbacks.rb:405:in `__run_callback'
|
72
|
+
activesupport (3.2.5) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
|
73
|
+
activesupport (3.2.5) lib/active_support/callbacks.rb:81:in `run_callbacks'
|
74
|
+
actionpack (3.2.5) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
|
75
|
+
actionpack (3.2.5) lib/action_dispatch/middleware/reloader.rb:65:in `call'
|
76
|
+
actionpack (3.2.5) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
|
77
|
+
actionpack (3.2.5) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
|
78
|
+
actionpack (3.2.5) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
|
79
|
+
railties (3.2.5) lib/rails/rack/logger.rb:26:in `call_app'
|
80
|
+
railties (3.2.5) lib/rails/rack/logger.rb:16:in `call'
|
81
|
+
actionpack (3.2.5) lib/action_dispatch/middleware/request_id.rb:22:in `call'
|
82
|
+
rack (1.4.1) lib/rack/methodoverride.rb:21:in `call'
|
83
|
+
rack (1.4.1) lib/rack/runtime.rb:17:in `call'
|
84
|
+
activesupport (3.2.5) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
|
85
|
+
rack (1.4.1) lib/rack/lock.rb:15:in `call'
|
86
|
+
actionpack (3.2.5) lib/action_dispatch/middleware/static.rb:62:in `call'
|
87
|
+
railties (3.2.5) lib/rails/engine.rb:479:in `call'
|
88
|
+
railties (3.2.5) lib/rails/application.rb:220:in `call'
|
89
|
+
rack (1.4.1) lib/rack/content_length.rb:14:in `call'
|
90
|
+
railties (3.2.5) lib/rails/rack/log_tailer.rb:17:in `call'
|
91
|
+
rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service'
|
92
|
+
/Users/whatthewhat/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
|
93
|
+
/Users/whatthewhat/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
|
94
|
+
/Users/whatthewhat/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
|
95
|
+
|
96
|
+
|
97
|
+
Rendered /Users/whatthewhat/.rvm/gems/ruby-1.9.3-p125/gems/actionpack-3.2.5/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.8ms)
|
98
|
+
Rendered /Users/whatthewhat/.rvm/gems/ruby-1.9.3-p125/gems/actionpack-3.2.5/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.2ms)
|
99
|
+
Rendered /Users/whatthewhat/.rvm/gems/ruby-1.9.3-p125/gems/actionpack-3.2.5/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (13.3ms)
|
100
|
+
Connecting to database specified by database.yml
|
101
|
+
[1m[36m (0.1ms)[0m [1mselect sqlite_version(*)[0m
|
102
|
+
[1m[35m (1.6ms)[0m CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL)
|
103
|
+
[1m[36m (0.0ms)[0m [1mPRAGMA index_list("schema_migrations")[0m
|
104
|
+
[1m[35m (1.2ms)[0m CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
|
105
|
+
[1m[36m (0.1ms)[0m [1mSELECT "schema_migrations"."version" FROM "schema_migrations" [0m
|
106
|
+
Migrating to DeviseCreateUsers (20120514070218)
|
107
|
+
[1m[35m (0.0ms)[0m begin transaction
|
108
|
+
[1m[36m (0.5ms)[0m [1mCREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "email" varchar(255) DEFAULT '' NOT NULL, "encrypted_password" varchar(255) DEFAULT '' NOT NULL, "reset_password_token" varchar(255), "reset_password_sent_at" datetime, "remember_created_at" datetime, "sign_in_count" integer DEFAULT 0, "current_sign_in_at" datetime, "last_sign_in_at" datetime, "current_sign_in_ip" varchar(255), "last_sign_in_ip" varchar(255), "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) [0m
|
109
|
+
[1m[35m (0.1ms)[0m PRAGMA index_list("users")
|
110
|
+
[1m[36m (0.4ms)[0m [1mCREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email")[0m
|
111
|
+
[1m[35m (0.1ms)[0m PRAGMA index_list("users")
|
112
|
+
[1m[36m (0.0ms)[0m [1mPRAGMA index_info('index_users_on_email')[0m
|
113
|
+
[1m[35m (0.2ms)[0m CREATE UNIQUE INDEX "index_users_on_reset_password_token" ON "users" ("reset_password_token")
|
114
|
+
[1m[36m (0.2ms)[0m [1mINSERT INTO "schema_migrations" ("version") VALUES ('20120514070218')[0m
|
115
|
+
[1m[35m (1.1ms)[0m commit transaction
|
116
|
+
Migrating to AddRolesMaskToUsers (20120521064519)
|
117
|
+
[1m[36m (0.0ms)[0m [1mbegin transaction[0m
|
118
|
+
[1m[35m (0.9ms)[0m ALTER TABLE "users" ADD "roles_mask" integer
|
119
|
+
[1m[36m (0.2ms)[0m [1mINSERT INTO "schema_migrations" ("version") VALUES ('20120521064519')[0m
|
120
|
+
[1m[35m (0.8ms)[0m commit transaction
|
121
|
+
[1m[36m (0.4ms)[0m [1mselect sqlite_version(*)[0m
|
122
|
+
[1m[35m (0.2ms)[0m SELECT "schema_migrations"."version" FROM "schema_migrations"
|
123
|
+
[1m[36m (0.1ms)[0m [1mPRAGMA index_list("users")[0m
|
124
|
+
[1m[35m (0.0ms)[0m PRAGMA index_info('index_users_on_reset_password_token')
|
125
|
+
[1m[36m (0.0ms)[0m [1mPRAGMA index_info('index_users_on_email')[0m
|
126
|
+
Connecting to database specified by database.yml
|
127
|
+
|
128
|
+
|
129
|
+
Started GET "/users/sign_in" for 127.0.0.1 at 2012-09-19 17:27:00 +0400
|
130
|
+
Processing by Devise::SessionsController#new as HTML
|
131
|
+
Rendered /Users/whatthewhat/.rvm/gems/ruby-1.9.3-p125/gems/devise-2.1.2/app/views/devise/shared/_links.erb (1.9ms)
|
132
|
+
Rendered /Users/whatthewhat/.rvm/gems/ruby-1.9.3-p125/gems/devise-2.1.2/app/views/devise/sessions/new.html.erb within layouts/application (16.6ms)
|
133
|
+
Compiled application.css (0ms) (pid 5431)
|
134
|
+
Compiled jquery.js (3ms) (pid 5431)
|
135
|
+
Compiled jquery_ujs.js (0ms) (pid 5431)
|
136
|
+
Compiled application.js (51ms) (pid 5431)
|
137
|
+
Completed 200 OK in 247ms (Views: 187.3ms | ActiveRecord: 2.3ms)
|
138
|
+
|
139
|
+
|
140
|
+
Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2012-09-19 17:27:00 +0400
|
141
|
+
Served asset /application.css - 200 OK (4ms)
|
142
|
+
|
143
|
+
|
144
|
+
Started GET "/assets/application.js?body=1" for 127.0.0.1 at 2012-09-19 17:27:00 +0400
|
145
|
+
Served asset /application.js - 200 OK (9ms)
|
146
|
+
|
147
|
+
|
148
|
+
Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2012-09-19 17:27:00 +0400
|
149
|
+
Served asset /jquery.js - 200 OK (5ms)
|
150
|
+
|
151
|
+
|
152
|
+
Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2012-09-19 17:27:00 +0400
|
153
|
+
Served asset /jquery_ujs.js - 200 OK (4ms)
|