sorcery 0.7.0 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. data/Gemfile +1 -3
  2. data/Gemfile.lock +47 -57
  3. data/README.rdoc +19 -57
  4. data/Rakefile +27 -1
  5. data/VERSION +1 -1
  6. data/lib/generators/sorcery/USAGE +22 -0
  7. data/lib/generators/sorcery/install_generator.rb +72 -0
  8. data/lib/{sorcery/initializers → generators/sorcery/templates}/initializer.rb +4 -4
  9. data/lib/generators/sorcery/templates/migration/activity_logging.rb +17 -0
  10. data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +11 -0
  11. data/lib/generators/{sorcery_migration/templates → sorcery/templates/migration}/core.rb +2 -2
  12. data/lib/generators/{sorcery_migration/templates → sorcery/templates/migration}/external.rb +1 -1
  13. data/lib/generators/sorcery/templates/migration/remember_me.rb +15 -0
  14. data/lib/generators/sorcery/templates/migration/reset_password.rb +17 -0
  15. data/lib/generators/sorcery/templates/migration/user_activation.rb +17 -0
  16. data/lib/sorcery/controller/submodules/activity_logging.rb +8 -11
  17. data/lib/sorcery/controller/submodules/brute_force_protection.rb +2 -2
  18. data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +23 -8
  19. data/lib/sorcery/controller/submodules/external/providers/twitter.rb +1 -1
  20. data/lib/sorcery/controller/submodules/remember_me.rb +16 -14
  21. data/lib/sorcery/controller/submodules/session_timeout.rb +3 -3
  22. data/lib/sorcery/controller.rb +40 -39
  23. data/lib/sorcery/model/adapters/mongo_mapper.rb +49 -0
  24. data/lib/sorcery/model/adapters/mongoid.rb +3 -1
  25. data/lib/sorcery/model/submodules/brute_force_protection.rb +14 -6
  26. data/lib/sorcery/model/submodules/remember_me.rb +9 -2
  27. data/lib/sorcery/model/submodules/reset_password.rb +12 -2
  28. data/lib/sorcery/model/submodules/user_activation.rb +13 -1
  29. data/lib/sorcery/model/temporary_token.rb +4 -2
  30. data/lib/sorcery/model.rb +21 -4
  31. data/lib/sorcery.rb +5 -7
  32. data/sorcery.gemspec +83 -216
  33. data/spec/Gemfile +1 -1
  34. data/spec/Gemfile.lock +20 -17
  35. data/spec/README.md +6 -1
  36. data/spec/rails3/Gemfile +2 -2
  37. data/spec/rails3/Gemfile.lock +36 -51
  38. data/spec/rails3/spec/controller_activity_logging_spec.rb +6 -6
  39. data/spec/rails3/spec/controller_brute_force_protection_spec.rb +2 -2
  40. data/spec/rails3/spec/controller_oauth2_spec.rb +5 -3
  41. data/spec/rails3/spec/controller_session_timeout_spec.rb +4 -4
  42. data/spec/rails3/spec/spec_helper.rb +1 -3
  43. data/spec/rails3_mongo_mapper/.gitignore +4 -0
  44. data/spec/rails3_mongo_mapper/.rspec +1 -0
  45. data/spec/{sinatra_modular → rails3_mongo_mapper}/Gemfile +5 -5
  46. data/spec/rails3_mongo_mapper/Gemfile.lock +158 -0
  47. data/spec/{sinatra → rails3_mongo_mapper}/Rakefile +3 -3
  48. data/spec/rails3_mongo_mapper/app/controllers/application_controller.rb +108 -0
  49. data/spec/rails3_mongo_mapper/app/helpers/application_helper.rb +2 -0
  50. data/spec/rails3_mongo_mapper/app/models/authentication.rb +6 -0
  51. data/spec/rails3_mongo_mapper/app/models/user.rb +5 -0
  52. data/spec/rails3_mongo_mapper/app/views/layouts/application.html.erb +14 -0
  53. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.html.erb +17 -0
  54. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.text.erb +9 -0
  55. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_success_email.html.erb +17 -0
  56. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_success_email.text.erb +9 -0
  57. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.html.erb +16 -0
  58. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.text.erb +8 -0
  59. data/spec/rails3_mongo_mapper/config/application.rb +51 -0
  60. data/spec/rails3_mongo_mapper/config/boot.rb +13 -0
  61. data/spec/rails3_mongo_mapper/config/environment.rb +5 -0
  62. data/spec/rails3_mongo_mapper/config/environments/development.rb +30 -0
  63. data/spec/rails3_mongo_mapper/config/environments/in_memory.rb +0 -0
  64. data/spec/rails3_mongo_mapper/config/environments/production.rb +49 -0
  65. data/spec/rails3_mongo_mapper/config/environments/test.rb +35 -0
  66. data/spec/rails3_mongo_mapper/config/initializers/backtrace_silencers.rb +7 -0
  67. data/spec/rails3_mongo_mapper/config/initializers/inflections.rb +10 -0
  68. data/spec/rails3_mongo_mapper/config/initializers/mime_types.rb +5 -0
  69. data/spec/rails3_mongo_mapper/config/initializers/mongo.rb +2 -0
  70. data/spec/rails3_mongo_mapper/config/initializers/secret_token.rb +7 -0
  71. data/spec/rails3_mongo_mapper/config/initializers/session_store.rb +8 -0
  72. data/spec/rails3_mongo_mapper/config/locales/en.yml +5 -0
  73. data/spec/rails3_mongo_mapper/config/routes.rb +59 -0
  74. data/spec/rails3_mongo_mapper/config.ru +4 -0
  75. data/spec/rails3_mongo_mapper/db/schema.rb +23 -0
  76. data/spec/rails3_mongo_mapper/db/seeds.rb +7 -0
  77. data/spec/rails3_mongo_mapper/lib/tasks/.gitkeep +0 -0
  78. data/spec/rails3_mongo_mapper/public/404.html +26 -0
  79. data/spec/rails3_mongo_mapper/public/422.html +26 -0
  80. data/spec/rails3_mongo_mapper/public/500.html +26 -0
  81. data/spec/rails3_mongo_mapper/public/favicon.ico +0 -0
  82. data/spec/rails3_mongo_mapper/public/images/rails.png +0 -0
  83. data/spec/rails3_mongo_mapper/public/javascripts/application.js +2 -0
  84. data/spec/rails3_mongo_mapper/public/javascripts/controls.js +965 -0
  85. data/spec/rails3_mongo_mapper/public/javascripts/dragdrop.js +974 -0
  86. data/spec/rails3_mongo_mapper/public/javascripts/effects.js +1123 -0
  87. data/spec/rails3_mongo_mapper/public/javascripts/prototype.js +6001 -0
  88. data/spec/rails3_mongo_mapper/public/javascripts/rails.js +175 -0
  89. data/spec/rails3_mongo_mapper/public/robots.txt +5 -0
  90. data/spec/rails3_mongo_mapper/public/stylesheets/.gitkeep +0 -0
  91. data/spec/rails3_mongo_mapper/script/rails +6 -0
  92. data/spec/{sinatra → rails3_mongo_mapper}/spec/controller_spec.rb +45 -42
  93. data/spec/rails3_mongo_mapper/spec/spec_helper.orig.rb +27 -0
  94. data/spec/rails3_mongo_mapper/spec/spec_helper.rb +55 -0
  95. data/spec/rails3_mongo_mapper/spec/user_activation_spec.rb +9 -0
  96. data/spec/rails3_mongo_mapper/spec/user_activity_logging_spec.rb +8 -0
  97. data/spec/rails3_mongo_mapper/spec/user_brute_force_protection_spec.rb +8 -0
  98. data/spec/rails3_mongo_mapper/spec/user_oauth_spec.rb +8 -0
  99. data/spec/rails3_mongo_mapper/spec/user_remember_me_spec.rb +8 -0
  100. data/spec/rails3_mongo_mapper/spec/user_reset_password_spec.rb +8 -0
  101. data/spec/rails3_mongo_mapper/spec/user_spec.rb +37 -0
  102. data/spec/rails3_mongo_mapper/vendor/plugins/.gitkeep +0 -0
  103. data/spec/rails3_mongoid/Gemfile +1 -1
  104. data/spec/rails3_mongoid/Gemfile.lock +38 -36
  105. data/spec/rails3_mongoid/script/rails +0 -0
  106. data/spec/rails3_mongoid/spec/controller_activity_logging_spec.rb +98 -0
  107. data/spec/rails3_mongoid/spec/controller_spec.rb +11 -0
  108. data/spec/rails3_mongoid/spec/user_spec.rb +1 -0
  109. data/spec/shared_examples/user_activation_shared_examples.rb +1 -1
  110. data/spec/shared_examples/user_remember_me_shared_examples.rb +1 -1
  111. data/spec/shared_examples/user_reset_password_shared_examples.rb +2 -2
  112. data/spec/shared_examples/user_shared_examples.rb +29 -1
  113. metadata +105 -251
  114. data/lib/generators/sorcery_migration/sorcery_migration_generator.rb +0 -24
  115. data/lib/generators/sorcery_migration/templates/activity_logging.rb +0 -17
  116. data/lib/generators/sorcery_migration/templates/brute_force_protection.rb +0 -11
  117. data/lib/generators/sorcery_migration/templates/remember_me.rb +0 -15
  118. data/lib/generators/sorcery_migration/templates/reset_password.rb +0 -17
  119. data/lib/generators/sorcery_migration/templates/user_activation.rb +0 -17
  120. data/lib/sorcery/controller/adapters/sinatra.rb +0 -115
  121. data/lib/sorcery/sinatra.rb +0 -4
  122. data/lib/sorcery/test_helpers/internal/sinatra.rb +0 -74
  123. data/lib/sorcery/test_helpers/internal/sinatra_modular.rb +0 -74
  124. data/lib/sorcery/test_helpers/sinatra.rb +0 -88
  125. data/spec/rails3/Rakefile.unused +0 -7
  126. data/spec/sinatra/Gemfile +0 -15
  127. data/spec/sinatra/Gemfile.lock +0 -115
  128. data/spec/sinatra/authentication.rb +0 -3
  129. data/spec/sinatra/db/migrate/activation/20101224223622_add_activation_to_users.rb +0 -17
  130. data/spec/sinatra/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -17
  131. data/spec/sinatra/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -11
  132. data/spec/sinatra/db/migrate/core/20101224223620_create_users.rb +0 -16
  133. data/spec/sinatra/db/migrate/external/20101224223628_create_authentications.rb +0 -14
  134. data/spec/sinatra/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -15
  135. data/spec/sinatra/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -13
  136. data/spec/sinatra/filters.rb +0 -27
  137. data/spec/sinatra/modular.rb +0 -157
  138. data/spec/sinatra/myapp.rb +0 -133
  139. data/spec/sinatra/spec/controller_activity_logging_spec.rb +0 -85
  140. data/spec/sinatra/spec/controller_brute_force_protection_spec.rb +0 -70
  141. data/spec/sinatra/spec/controller_http_basic_auth_spec.rb +0 -53
  142. data/spec/sinatra/spec/controller_oauth2_spec.rb +0 -96
  143. data/spec/sinatra/spec/controller_oauth_spec.rb +0 -100
  144. data/spec/sinatra/spec/controller_remember_me_spec.rb +0 -64
  145. data/spec/sinatra/spec/controller_session_timeout_spec.rb +0 -57
  146. data/spec/sinatra/spec/spec_helper.rb +0 -45
  147. data/spec/sinatra/user.rb +0 -6
  148. data/spec/sinatra/views/test_login.erb +0 -4
  149. data/spec/sinatra_modular/Gemfile.lock +0 -115
  150. data/spec/sinatra_modular/Rakefile +0 -11
  151. data/spec/sinatra_modular/authentication.rb +0 -3
  152. data/spec/sinatra_modular/db/migrate/activation/20101224223622_add_activation_to_users.rb +0 -17
  153. data/spec/sinatra_modular/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -17
  154. data/spec/sinatra_modular/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -11
  155. data/spec/sinatra_modular/db/migrate/core/20101224223620_create_users.rb +0 -16
  156. data/spec/sinatra_modular/db/migrate/external/20101224223628_create_authentications.rb +0 -14
  157. data/spec/sinatra_modular/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -15
  158. data/spec/sinatra_modular/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -13
  159. data/spec/sinatra_modular/filters.rb +0 -27
  160. data/spec/sinatra_modular/modular.rb +0 -157
  161. data/spec/sinatra_modular/myapp.rb +0 -133
  162. data/spec/sinatra_modular/sorcery_mailer.rb +0 -25
  163. data/spec/sinatra_modular/spec_modular/controller_activity_logging_spec.rb +0 -85
  164. data/spec/sinatra_modular/spec_modular/controller_brute_force_protection_spec.rb +0 -70
  165. data/spec/sinatra_modular/spec_modular/controller_http_basic_auth_spec.rb +0 -53
  166. data/spec/sinatra_modular/spec_modular/controller_oauth2_spec.rb +0 -96
  167. data/spec/sinatra_modular/spec_modular/controller_oauth_spec.rb +0 -100
  168. data/spec/sinatra_modular/spec_modular/controller_remember_me_spec.rb +0 -64
  169. data/spec/sinatra_modular/spec_modular/controller_session_timeout_spec.rb +0 -57
  170. data/spec/sinatra_modular/spec_modular/controller_spec.rb +0 -116
  171. data/spec/sinatra_modular/spec_modular/spec.opts +0 -2
  172. data/spec/sinatra_modular/spec_modular/spec_helper.rb +0 -51
  173. data/spec/sinatra_modular/user.rb +0 -6
  174. data/spec/sinatra_modular/views/test_login.erb +0 -4
  175. /data/spec/{sinatra → rails3_mongo_mapper/app/mailers}/sorcery_mailer.rb +0 -0
  176. /data/spec/{sinatra → rails3_mongo_mapper}/spec/spec.opts +0 -0
@@ -1,10 +1,12 @@
1
1
  PATH
2
- remote: ../../../
2
+ remote: ../../
3
3
  specs:
4
- sorcery (0.6.1)
4
+ sorcery (0.7.2)
5
5
  bcrypt-ruby (~> 3.0.0)
6
6
  oauth (~> 0.4.4)
7
- oauth2 (~> 0.5.0)
7
+ oauth (~> 0.4.4)
8
+ oauth2 (~> 0.4.1)
9
+ oauth2 (~> 0.4.1)
8
10
 
9
11
  GEM
10
12
  remote: http://rubygems.org/
@@ -38,51 +40,39 @@ GEM
38
40
  activesupport (3.0.3)
39
41
  addressable (2.2.6)
40
42
  archive-tar-minitar (0.5.2)
41
- arel (2.0.6)
43
+ arel (2.0.10)
42
44
  bcrypt-ruby (3.0.1)
43
45
  builder (2.1.2)
44
- capybara (1.1.1)
45
- mime-types (>= 1.16)
46
- nokogiri (>= 1.3.3)
47
- rack (>= 1.0.0)
48
- rack-test (>= 0.5.4)
49
- selenium-webdriver (~> 2.0)
50
- xpath (~> 0.1.4)
51
- childprocess (0.2.2)
52
- ffi (~> 1.0.6)
53
- columnize (0.3.2)
54
- diff-lcs (1.1.2)
46
+ columnize (0.3.4)
47
+ diff-lcs (1.1.3)
55
48
  erubis (2.6.6)
56
49
  abstract (>= 1.0.0)
57
- faraday (0.7.4)
58
- addressable (~> 2.2.6)
50
+ faraday (0.6.1)
51
+ addressable (~> 2.2.4)
59
52
  multipart-post (~> 1.1.0)
60
- rack (< 2, >= 1.1.0)
61
- ffi (1.0.9)
62
- i18n (0.5.0)
63
- json_pure (1.5.1)
53
+ rack (>= 1.1.0, < 2)
54
+ i18n (0.6.0)
64
55
  launchy (2.0.5)
65
56
  addressable (~> 2.2.6)
66
- linecache19 (0.5.11)
57
+ linecache19 (0.5.12)
67
58
  ruby_core_source (>= 0.1.4)
68
- mail (2.2.13)
59
+ mail (2.2.19)
69
60
  activesupport (>= 2.3.6)
70
61
  i18n (>= 0.4.0)
71
62
  mime-types (~> 1.16)
72
63
  treetop (~> 1.4.8)
73
- mime-types (1.16)
64
+ mime-types (1.17.2)
74
65
  multi_json (1.0.3)
75
66
  multipart-post (1.1.3)
76
- nokogiri (1.4.4)
77
67
  oauth (0.4.5)
78
- oauth2 (0.5.1)
79
- faraday (~> 0.7.4)
80
- multi_json (~> 1.0.3)
81
- polyglot (0.3.1)
82
- rack (1.2.1)
83
- rack-mount (0.6.13)
68
+ oauth2 (0.4.1)
69
+ faraday (~> 0.6.1)
70
+ multi_json (>= 0.0.5)
71
+ polyglot (0.3.2)
72
+ rack (1.2.4)
73
+ rack-mount (0.6.14)
84
74
  rack (>= 1.0.0)
85
- rack-test (0.5.6)
75
+ rack-test (0.5.7)
86
76
  rack (>= 1.0)
87
77
  rails (3.0.3)
88
78
  actionmailer (= 3.0.3)
@@ -97,12 +87,12 @@ GEM
97
87
  activesupport (= 3.0.3)
98
88
  rake (>= 0.8.7)
99
89
  thor (~> 0.14.4)
100
- rake (0.8.7)
90
+ rake (0.9.2.2)
101
91
  rspec (2.5.0)
102
92
  rspec-core (~> 2.5.0)
103
93
  rspec-expectations (~> 2.5.0)
104
94
  rspec-mocks (~> 2.5.0)
105
- rspec-core (2.5.1)
95
+ rspec-core (2.5.2)
106
96
  rspec-expectations (2.5.0)
107
97
  diff-lcs (~> 1.1.2)
108
98
  rspec-mocks (2.5.0)
@@ -111,7 +101,7 @@ GEM
111
101
  activesupport (~> 3.0)
112
102
  railties (~> 3.0)
113
103
  rspec (~> 2.5.0)
114
- ruby-debug-base19 (0.11.24)
104
+ ruby-debug-base19 (0.11.25)
115
105
  columnize (>= 0.3.1)
116
106
  linecache19 (>= 0.5.11)
117
107
  ruby_core_source (>= 0.1.4)
@@ -119,31 +109,26 @@ GEM
119
109
  columnize (>= 0.3.1)
120
110
  linecache19 (>= 0.5.11)
121
111
  ruby-debug-base19 (>= 0.11.19)
122
- ruby_core_source (0.1.4)
112
+ ruby_core_source (0.1.5)
123
113
  archive-tar-minitar (>= 0.5.2)
124
- rubyzip (0.9.4)
125
- selenium-webdriver (2.6.0)
126
- childprocess (>= 0.2.1)
127
- ffi (>= 1.0.7)
128
- json_pure
129
- rubyzip
130
- simplecov (0.3.9)
131
- simplecov-html (>= 0.3.7)
132
- simplecov-html (0.3.9)
133
- sqlite3-ruby (1.3.2)
114
+ simplecov (0.5.4)
115
+ multi_json (~> 1.0.3)
116
+ simplecov-html (~> 0.5.3)
117
+ simplecov-html (0.5.3)
118
+ sqlite3 (1.3.4)
119
+ sqlite3-ruby (1.3.3)
120
+ sqlite3 (>= 1.3.3)
134
121
  thor (0.14.6)
135
122
  timecop (0.3.5)
136
- treetop (1.4.9)
123
+ treetop (1.4.10)
124
+ polyglot
137
125
  polyglot (>= 0.3.1)
138
- tzinfo (0.3.23)
139
- xpath (0.1.4)
140
- nokogiri (~> 1.3)
126
+ tzinfo (0.3.30)
141
127
 
142
128
  PLATFORMS
143
129
  ruby
144
130
 
145
131
  DEPENDENCIES
146
- capybara (~> 1.1.1)
147
132
  launchy (~> 2.0.5)
148
133
  rails (= 3.0.3)
149
134
  rspec (~> 2.5.0)
@@ -30,7 +30,7 @@ describe ApplicationController do
30
30
  end
31
31
 
32
32
  it "should log login time on login" do
33
- now = Time.now.utc
33
+ now = Time.now.in_time_zone
34
34
  login_user
35
35
  @user.last_login_at.should_not be_nil
36
36
  @user.last_login_at.to_s(:db).should >= now.to_s(:db)
@@ -39,7 +39,7 @@ describe ApplicationController do
39
39
 
40
40
  it "should log logout time on logout" do
41
41
  login_user
42
- now = Time.now.utc
42
+ now = Time.now.in_time_zone
43
43
  logout_user
44
44
  User.first.last_logout_at.should_not be_nil
45
45
  User.first.last_logout_at.to_s(:db).should >= now.to_s(:db)
@@ -48,7 +48,7 @@ describe ApplicationController do
48
48
 
49
49
  it "should log last activity time when logged in" do
50
50
  login_user
51
- now = Time.now.utc
51
+ now = Time.now.in_time_zone
52
52
  get :some_action
53
53
  User.first.last_activity_at.to_s(:db).should >= now.to_s(:db)
54
54
  User.first.last_activity_at.to_s(:db).should <= (now+2).to_s(:db)
@@ -81,14 +81,14 @@ describe ApplicationController do
81
81
 
82
82
  it "should not register login time if configured so" do
83
83
  sorcery_controller_property_set(:register_login_time, false)
84
- now = Time.now.utc
84
+ now = Time.now.in_time_zone
85
85
  login_user
86
86
  @user.last_login_at.should be_nil
87
87
  end
88
88
 
89
89
  it "should not register logout time if configured so" do
90
90
  sorcery_controller_property_set(:register_logout_time, false)
91
- now = Time.now.utc
91
+ now = Time.now.in_time_zone
92
92
  login_user
93
93
  logout_user
94
94
  @user.last_logout_at.should be_nil
@@ -96,7 +96,7 @@ describe ApplicationController do
96
96
 
97
97
  it "should not register last activity time if configured so" do
98
98
  sorcery_controller_property_set(:register_last_activity_time, false)
99
- now = Time.now.utc
99
+ now = Time.now.in_time_zone
100
100
  login_user
101
101
  get :some_action
102
102
  @user.last_activity_at.should be_nil
@@ -47,7 +47,7 @@ describe ApplicationController do
47
47
  get :test_login, :username => 'gizmo', :password => 'blabla'
48
48
  get :test_login, :username => 'gizmo', :password => 'blabla'
49
49
  User.find_by_username('gizmo').lock_expires_at.should_not be_nil
50
- Timecop.travel(Time.now + 0.3)
50
+ Timecop.travel(Time.now.in_time_zone + 0.3)
51
51
  get :test_login, :username => 'gizmo', :password => 'blabla'
52
52
  User.find_by_username('gizmo').lock_expires_at.should be_nil
53
53
  end
@@ -58,7 +58,7 @@ describe ApplicationController do
58
58
  get :test_login, :username => 'gizmo', :password => 'blabla'
59
59
  get :test_login, :username => 'gizmo', :password => 'blabla'
60
60
  unlock_date = User.find_by_username('gizmo').lock_expires_at
61
- Timecop.travel(Time.now + 1)
61
+ Timecop.travel(Time.now.in_time_zone + 1)
62
62
  get :test_login, :username => 'gizmo', :password => 'blabla'
63
63
  User.find_by_username('gizmo').lock_expires_at.to_s.should == unlock_date.to_s
64
64
  end
@@ -5,7 +5,9 @@ def stub_all_oauth2_requests!
5
5
  @client = OAuth2::Client.new("key","secret", :site => "http://myapi.com")
6
6
  OAuth2::Client.stub!(:new).and_return(@client)
7
7
  @acc_token = OAuth2::AccessToken.new(@client, "asd", {})
8
- @client.stub!(:get_token).and_return(@acc_token)
8
+ @webby = @client.web_server
9
+ OAuth2::Strategy::WebServer.stub!(:new).and_return(@webby)
10
+ @webby.stub!(:get_access_token).and_return(@acc_token)
9
11
  @acc_token.stub!(:get).and_return({"id"=>"123", "name"=>"Noam Ben Ari", "first_name"=>"Noam", "last_name"=>"Ben Ari", "link"=>"http://www.facebook.com/nbenari1", "hometown"=>{"id"=>"110619208966868", "name"=>"Haifa, Israel"}, "location"=>{"id"=>"106906559341067", "name"=>"Pardes Hanah, Hefa, Israel"}, "bio"=>"I'm a new daddy, and enjoying it!", "gender"=>"male", "email"=>"nbenari@gmail.com", "timezone"=>2, "locale"=>"en_US", "languages"=>[{"id"=>"108405449189952", "name"=>"Hebrew"}, {"id"=>"106059522759137", "name"=>"English"}, {"id"=>"112624162082677", "name"=>"Russian"}], "verified"=>true, "updated_time"=>"2011-02-16T20:59:38+0000"}.to_json)
10
12
  end
11
13
 
@@ -41,7 +43,7 @@ describe ApplicationController do
41
43
  create_new_user
42
44
  get :login_at_test2
43
45
  response.should be_a_redirect
44
- response.should redirect_to("http://myapi.com/oauth/authorize?redirect_uri=http%3A%2F%2Fblabla.com&scope=email%2Coffline_access")
46
+ response.should redirect_to("http://myapi.com/oauth/authorize?client_id=key&redirect_uri=http%3A%2F%2Fblabla.com&scope=email%2Coffline_access&response_type=code")
45
47
  end
46
48
 
47
49
  it "'login_from' logins if user exists" do
@@ -63,7 +65,7 @@ describe ApplicationController do
63
65
  create_new_user
64
66
  get :login_at_test3
65
67
  response.should be_a_redirect
66
- response.should redirect_to("http://myapi.com/oauth/authorize?redirect_uri=http%3A%2F%2Fblabla.com&scope=")
68
+ response.should redirect_to("http://myapi.com/oauth/authorize?client_id=key&redirect_uri=http%3A%2F%2Fblabla.com&scope=&response_type=code")
67
69
  end
68
70
 
69
71
  it "'login_from' logins if user exists (github)" do
@@ -23,7 +23,7 @@ describe ApplicationController do
23
23
 
24
24
  it "should reset session after session timeout" do
25
25
  login_user
26
- Timecop.travel(Time.now+0.6)
26
+ Timecop.travel(Time.now.in_time_zone+0.6)
27
27
  get :test_should_be_logged_in
28
28
  session[:user_id].should be_nil
29
29
  response.should be_a_redirect
@@ -33,10 +33,10 @@ describe ApplicationController do
33
33
  it "should not logout if there was activity" do
34
34
  sorcery_controller_property_set(:session_timeout_from_last_action, true)
35
35
  get :test_login, :username => 'gizmo', :password => 'secret'
36
- Timecop.travel(Time.now+0.3)
36
+ Timecop.travel(Time.now.in_time_zone+0.3)
37
37
  get :test_should_be_logged_in
38
38
  session[:user_id].should_not be_nil
39
- Timecop.travel(Time.now+0.3)
39
+ Timecop.travel(Time.now.in_time_zone+0.3)
40
40
  get :test_should_be_logged_in
41
41
  session[:user_id].should_not be_nil
42
42
  response.should be_a_success
@@ -45,7 +45,7 @@ describe ApplicationController do
45
45
  it "with 'session_timeout_from_last_action' should logout if there was no activity" do
46
46
  sorcery_controller_property_set(:session_timeout_from_last_action, true)
47
47
  get :test_login, :username => 'gizmo', :password => 'secret'
48
- Timecop.travel(Time.now+0.6)
48
+ Timecop.travel(Time.now.in_time_zone+0.6)
49
49
  get :test_should_be_logged_in
50
50
  session[:user_id].should be_nil
51
51
  response.should be_a_redirect
@@ -5,7 +5,7 @@ $: << File.join(File.dirname(__FILE__), '..', '..', 'lib' )
5
5
  ENV["RAILS_ENV"] ||= 'in_memory'
6
6
  require File.expand_path("../../config/environment", __FILE__)
7
7
  require 'rspec/rails'
8
- require 'capybara/rspec'
8
+ #require 'capybara/rspec'
9
9
  require 'timecop'
10
10
  # require 'simplecov'
11
11
  # SimpleCov.root File.join(File.dirname(__FILE__), "..", "..", "rails3" )
@@ -24,8 +24,6 @@ require 'timecop'
24
24
  # in spec/support/ and its subdirectories.
25
25
  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
26
26
 
27
-
28
-
29
27
  RSpec.configure do |config|
30
28
  config.include RSpec::Rails::ControllerExampleGroup, :example_group => { :file_path => /controller(.)*_spec.rb$/ }
31
29
  # == Mock Framework
@@ -0,0 +1,4 @@
1
+ .bundle
2
+ db/*.sqlite3
3
+ log/*.log
4
+ tmp/**/*
@@ -0,0 +1 @@
1
+ --colour
@@ -1,15 +1,15 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- gem 'sinatra', '>= 1.2.0'
4
- gem 'sqlite3-ruby', :require => 'sqlite3'
5
- gem 'activerecord', '>= 3.0.3'
6
- gem 'actionmailer', '>= 3.0.3'
3
+ gem 'rails', '3.0.3'
7
4
  gem "sorcery", '>= 0.1.0', :path => '../../'
5
+ gem "mongo_mapper"
6
+ gem "bson_ext", "~> 1.3"
8
7
 
9
8
  group :development, :test do
10
- gem "rake"
11
9
  gem "rspec", "~> 2.5.0"
10
+ gem 'rspec-rails', "~> 2.5.0"
12
11
  gem 'ruby-debug19'
13
12
  gem 'simplecov', '>= 0.3.8', :require => false # Will install simplecov-html as a dependency
14
13
  gem 'timecop'
14
+ gem 'pry'
15
15
  end
@@ -0,0 +1,158 @@
1
+ PATH
2
+ remote: ../../
3
+ specs:
4
+ sorcery (0.7.2)
5
+ bcrypt-ruby (~> 3.0.0)
6
+ oauth (~> 0.4.4)
7
+ oauth (~> 0.4.4)
8
+ oauth2 (~> 0.4.1)
9
+ oauth2 (~> 0.4.1)
10
+
11
+ GEM
12
+ remote: http://rubygems.org/
13
+ specs:
14
+ abstract (1.0.0)
15
+ actionmailer (3.0.3)
16
+ actionpack (= 3.0.3)
17
+ mail (~> 2.2.9)
18
+ actionpack (3.0.3)
19
+ activemodel (= 3.0.3)
20
+ activesupport (= 3.0.3)
21
+ builder (~> 2.1.2)
22
+ erubis (~> 2.6.6)
23
+ i18n (~> 0.4)
24
+ rack (~> 1.2.1)
25
+ rack-mount (~> 0.6.13)
26
+ rack-test (~> 0.5.6)
27
+ tzinfo (~> 0.3.23)
28
+ activemodel (3.0.3)
29
+ activesupport (= 3.0.3)
30
+ builder (~> 2.1.2)
31
+ i18n (~> 0.4)
32
+ activerecord (3.0.3)
33
+ activemodel (= 3.0.3)
34
+ activesupport (= 3.0.3)
35
+ arel (~> 2.0.2)
36
+ tzinfo (~> 0.3.23)
37
+ activeresource (3.0.3)
38
+ activemodel (= 3.0.3)
39
+ activesupport (= 3.0.3)
40
+ activesupport (3.0.3)
41
+ addressable (2.2.6)
42
+ archive-tar-minitar (0.5.2)
43
+ arel (2.0.10)
44
+ bcrypt-ruby (3.0.1)
45
+ bson (1.3.1)
46
+ bson_ext (1.3.1)
47
+ builder (2.1.2)
48
+ coderay (0.9.8)
49
+ columnize (0.3.4)
50
+ diff-lcs (1.1.3)
51
+ erubis (2.6.6)
52
+ abstract (>= 1.0.0)
53
+ faraday (0.6.1)
54
+ addressable (~> 2.2.4)
55
+ multipart-post (~> 1.1.0)
56
+ rack (>= 1.1.0, < 2)
57
+ i18n (0.6.0)
58
+ linecache19 (0.5.12)
59
+ ruby_core_source (>= 0.1.4)
60
+ mail (2.2.19)
61
+ activesupport (>= 2.3.6)
62
+ i18n (>= 0.4.0)
63
+ mime-types (~> 1.16)
64
+ treetop (~> 1.4.8)
65
+ method_source (0.6.7)
66
+ ruby_parser (>= 2.3.1)
67
+ mime-types (1.17.2)
68
+ mongo (1.3.1)
69
+ bson (>= 1.3.1)
70
+ mongo_mapper (0.9.2)
71
+ activemodel (~> 3.0)
72
+ activesupport (~> 3.0)
73
+ plucky (~> 0.3.8)
74
+ multi_json (1.0.3)
75
+ multipart-post (1.1.3)
76
+ oauth (0.4.5)
77
+ oauth2 (0.4.1)
78
+ faraday (~> 0.6.1)
79
+ multi_json (>= 0.0.5)
80
+ plucky (0.3.8)
81
+ mongo (~> 1.3)
82
+ polyglot (0.3.2)
83
+ pry (0.9.7.3)
84
+ coderay (~> 0.9.8)
85
+ method_source (~> 0.6.7)
86
+ ruby_parser (>= 2.3.1)
87
+ slop (~> 2.1.0)
88
+ rack (1.2.4)
89
+ rack-mount (0.6.14)
90
+ rack (>= 1.0.0)
91
+ rack-test (0.5.7)
92
+ rack (>= 1.0)
93
+ rails (3.0.3)
94
+ actionmailer (= 3.0.3)
95
+ actionpack (= 3.0.3)
96
+ activerecord (= 3.0.3)
97
+ activeresource (= 3.0.3)
98
+ activesupport (= 3.0.3)
99
+ bundler (~> 1.0)
100
+ railties (= 3.0.3)
101
+ railties (3.0.3)
102
+ actionpack (= 3.0.3)
103
+ activesupport (= 3.0.3)
104
+ rake (>= 0.8.7)
105
+ thor (~> 0.14.4)
106
+ rake (0.9.2.2)
107
+ rspec (2.5.0)
108
+ rspec-core (~> 2.5.0)
109
+ rspec-expectations (~> 2.5.0)
110
+ rspec-mocks (~> 2.5.0)
111
+ rspec-core (2.5.2)
112
+ rspec-expectations (2.5.0)
113
+ diff-lcs (~> 1.1.2)
114
+ rspec-mocks (2.5.0)
115
+ rspec-rails (2.5.0)
116
+ actionpack (~> 3.0)
117
+ activesupport (~> 3.0)
118
+ railties (~> 3.0)
119
+ rspec (~> 2.5.0)
120
+ ruby-debug-base19 (0.11.25)
121
+ columnize (>= 0.3.1)
122
+ linecache19 (>= 0.5.11)
123
+ ruby_core_source (>= 0.1.4)
124
+ ruby-debug19 (0.11.6)
125
+ columnize (>= 0.3.1)
126
+ linecache19 (>= 0.5.11)
127
+ ruby-debug-base19 (>= 0.11.19)
128
+ ruby_core_source (0.1.5)
129
+ archive-tar-minitar (>= 0.5.2)
130
+ ruby_parser (2.3.1)
131
+ sexp_processor (~> 3.0)
132
+ sexp_processor (3.0.7)
133
+ simplecov (0.5.4)
134
+ multi_json (~> 1.0.3)
135
+ simplecov-html (~> 0.5.3)
136
+ simplecov-html (0.5.3)
137
+ slop (2.1.0)
138
+ thor (0.14.6)
139
+ timecop (0.3.5)
140
+ treetop (1.4.10)
141
+ polyglot
142
+ polyglot (>= 0.3.1)
143
+ tzinfo (0.3.30)
144
+
145
+ PLATFORMS
146
+ ruby
147
+
148
+ DEPENDENCIES
149
+ bson_ext (~> 1.3)
150
+ mongo_mapper
151
+ pry
152
+ rails (= 3.0.3)
153
+ rspec (~> 2.5.0)
154
+ rspec-rails (~> 2.5.0)
155
+ ruby-debug19
156
+ simplecov (>= 0.3.8)
157
+ sorcery (>= 0.1.0)!
158
+ timecop
@@ -1,11 +1,11 @@
1
1
  require 'rake'
2
2
  require 'rspec/core/rake_task'
3
3
 
4
- desc 'Default: Run all specs.'
4
+ desc 'Default: Run all specs for a specific rails version.'
5
5
  task :default => :spec
6
6
 
7
- desc "Run all specs"
7
+ desc "Run all specs for a specific rails version"
8
8
  RSpec::Core::RakeTask.new(:spec) do |t|
9
- t.pattern = 'spec/*_spec.rb'
9
+ t.pattern = '**/*_spec.rb'
10
10
  t.rspec_opts = ["--options #{File.dirname(__FILE__)}/spec/spec.opts"]
11
11
  end
@@ -0,0 +1,108 @@
1
+ require 'oauth'
2
+
3
+ class ApplicationController < ActionController::Base
4
+ protect_from_forgery
5
+
6
+ #before_filter :validate_session, :only => [:test_should_be_logged_in] if defined?(:validate_session)
7
+ before_filter :require_login_from_http_basic, :only => [:test_http_basic_auth]
8
+ before_filter :require_login, :only => [:test_logout, :test_should_be_logged_in, :some_action]
9
+
10
+ def index
11
+ @user = User.first
12
+ render :text => @user.attributes.inspect
13
+ end
14
+
15
+ def some_action
16
+ render :nothing => true
17
+ end
18
+
19
+ def test_login
20
+ @user = login(params[:username], params[:password])
21
+ render :text => ""
22
+ end
23
+
24
+ def test_return_to
25
+ @user = login(params[:username], params[:password])
26
+ redirect_back_or_to(:index, :notice => 'haha!')
27
+ end
28
+
29
+ def test_logout
30
+ logout
31
+ render :text => ""
32
+ end
33
+
34
+ def test_logout_with_remember
35
+ remember_me!
36
+ logout
37
+ render :text => ""
38
+ end
39
+
40
+ def test_login_with_remember
41
+ @user = login(params[:username], params[:password])
42
+ remember_me!
43
+
44
+ render :text => ""
45
+ end
46
+
47
+ def test_login_with_remember_in_login
48
+ @user = login(params[:username], params[:password], params[:remember])
49
+
50
+ render :text => ""
51
+ end
52
+
53
+ def test_login_from_cookie
54
+ @user = current_user
55
+ render :text => ""
56
+ end
57
+
58
+ def test_not_authenticated_action
59
+ render :text => "test_not_authenticated_action"
60
+ end
61
+
62
+ def test_should_be_logged_in
63
+ render :text => ""
64
+ end
65
+
66
+ def test_http_basic_auth
67
+ render :text => "HTTP Basic Auth"
68
+ end
69
+
70
+ def login_at_test
71
+ login_at(:twitter)
72
+ end
73
+
74
+ def login_at_test2
75
+ login_at(:facebook)
76
+ end
77
+
78
+ def test_login_from
79
+ if @user = login_from(:twitter)
80
+ redirect_to "bla", :notice => "Success!"
81
+ else
82
+ redirect_to "blu", :alert => "Failed!"
83
+ end
84
+ end
85
+
86
+ def test_login_from2
87
+ if @user = login_from(:facebook)
88
+ redirect_to "bla", :notice => "Success!"
89
+ else
90
+ redirect_to "blu", :alert => "Failed!"
91
+ end
92
+ end
93
+
94
+ def test_create_from_provider
95
+ provider = params[:provider]
96
+ login_from(provider)
97
+ if @user = create_from(provider)
98
+ redirect_to "bla", :notice => "Success!"
99
+ else
100
+ redirect_to "blu", :alert => "Failed!"
101
+ end
102
+ end
103
+
104
+ protected
105
+
106
+
107
+
108
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,6 @@
1
+ class Authentication
2
+ include MongoMapper::Document
3
+ key :provider, String
4
+ key :uid, Integer
5
+ belongs_to :user
6
+ end
@@ -0,0 +1,5 @@
1
+ class User
2
+ include MongoMapper::Document
3
+
4
+ many :authentications, :dependent => :destroy
5
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>AppRoot</title>
5
+ <%= stylesheet_link_tag :all %>
6
+ <%= javascript_include_tag :defaults %>
7
+ <%= csrf_meta_tag %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
5
+ </head>
6
+ <body>
7
+ <h1>Welcome to example.com, <%= @user.username %></h1>
8
+ <p>
9
+ You have successfully signed up to example.com,
10
+ your username is: <%= @user.username %>.<br/>
11
+ </p>
12
+ <p>
13
+ To login to the site, just follow this link: <%= @url %>.
14
+ </p>
15
+ <p>Thanks for joining and have a great day!</p>
16
+ </body>
17
+ </html>
@@ -0,0 +1,9 @@
1
+ Welcome to example.com, <%= @user.username %>
2
+ ===============================================
3
+
4
+ You have successfully signed up to example.com,
5
+ your username is: <%= @user.username %>.
6
+
7
+ To login to the site, just follow this link: <%= @url %>.
8
+
9
+ Thanks for joining and have a great day!