sorcery 0.3.1 → 0.4.2

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 (138) hide show
  1. data/Gemfile +3 -2
  2. data/Gemfile.lock +13 -11
  3. data/README.rdoc +89 -61
  4. data/Rakefile +4 -4
  5. data/VERSION +1 -1
  6. data/lib/generators/sorcery_migration/templates/core.rb +2 -2
  7. data/lib/sorcery/controller/submodules/http_basic_auth.rb +1 -1
  8. data/lib/sorcery/controller.rb +16 -18
  9. data/lib/sorcery/crypto_providers/bcrypt.rb +3 -5
  10. data/lib/sorcery/crypto_providers/common.rb +35 -0
  11. data/lib/sorcery/crypto_providers/md5.rb +3 -23
  12. data/lib/sorcery/crypto_providers/sha1.rb +4 -16
  13. data/lib/sorcery/crypto_providers/sha256.rb +3 -23
  14. data/lib/sorcery/crypto_providers/sha512.rb +3 -23
  15. data/lib/sorcery/engine.rb +4 -0
  16. data/lib/sorcery/initializers/initializer.rb +86 -0
  17. data/lib/sorcery/model/submodules/activity_logging.rb +1 -1
  18. data/lib/sorcery/model/submodules/brute_force_protection.rb +1 -1
  19. data/lib/sorcery/model/submodules/reset_password.rb +1 -1
  20. data/lib/sorcery/model.rb +25 -3
  21. data/lib/sorcery/railties/tasks.rake +10 -0
  22. data/lib/sorcery/sinatra.rb +0 -9
  23. data/lib/sorcery/test_helpers/internal/rails.rb +52 -0
  24. data/lib/sorcery/test_helpers/internal/sinatra.rb +122 -0
  25. data/lib/sorcery/test_helpers/internal.rb +55 -0
  26. data/lib/sorcery/test_helpers/rails.rb +5 -46
  27. data/lib/sorcery/test_helpers/sinatra.rb +58 -104
  28. data/lib/sorcery/test_helpers.rb +0 -35
  29. data/lib/sorcery.rb +8 -0
  30. data/sorcery.gemspec +140 -146
  31. data/spec/Gemfile +2 -2
  32. data/spec/Gemfile.lock +20 -12
  33. data/spec/Rakefile +1 -0
  34. data/spec/rails3/.rspec +1 -1
  35. data/spec/rails3/{app_root/Gemfile → Gemfile} +4 -4
  36. data/spec/rails3/{app_root/Gemfile.lock → Gemfile.lock} +20 -20
  37. data/spec/rails3/{app_root/Rakefile → Rakefile} +1 -0
  38. data/spec/rails3/config/database.yml +27 -0
  39. data/spec/rails3/{app_root/spec → spec}/controller_activity_logging_spec.rb +2 -4
  40. data/spec/rails3/{app_root/spec → spec}/controller_brute_force_protection_spec.rb +3 -2
  41. data/spec/rails3/{app_root/spec → spec}/controller_oauth2_spec.rb +10 -9
  42. data/spec/rails3/{app_root/spec → spec}/controller_oauth_spec.rb +8 -8
  43. data/spec/rails3/spec/controller_session_timeout_spec.rb +55 -0
  44. data/spec/rails3/{app_root/spec → spec}/controller_spec.rb +6 -16
  45. data/spec/rails3/spec/spec.opts +2 -0
  46. data/spec/rails3/spec/spec_helper.rb +70 -0
  47. data/spec/rails3/{app_root/spec → spec}/user_activation_spec.rb +7 -13
  48. data/spec/rails3/{app_root/spec → spec}/user_brute_force_protection_spec.rb +2 -30
  49. data/spec/rails3/{app_root/spec → spec}/user_oauth_spec.rb +3 -3
  50. data/spec/rails3/{app_root/spec → spec}/user_remember_me_spec.rb +3 -11
  51. data/spec/rails3/{app_root/spec → spec}/user_reset_password_spec.rb +20 -17
  52. data/spec/rails3/{app_root/spec → spec}/user_spec.rb +19 -9
  53. data/spec/sinatra/Gemfile +3 -3
  54. data/spec/sinatra/Gemfile.lock +17 -17
  55. data/spec/sinatra/Rakefile +1 -0
  56. data/spec/sinatra/spec/controller_brute_force_protection_spec.rb +3 -2
  57. data/spec/sinatra/spec/controller_oauth2_spec.rb +10 -9
  58. data/spec/sinatra/spec/controller_oauth_spec.rb +5 -5
  59. data/spec/sinatra/spec/controller_session_timeout_spec.rb +28 -23
  60. data/spec/sinatra/spec/spec.opts +2 -4
  61. data/spec/sinatra/spec/spec_helper.rb +4 -2
  62. data/spec/sorcery_crypto_providers_spec.rb +5 -4
  63. data/spec/spec.opts +2 -0
  64. data/spec/spec_helper.rb +3 -4
  65. metadata +151 -149
  66. data/lib/sorcery/controller/submodules/email.rb +0 -44
  67. data/lib/sorcery/controller/submodules/oauth.rb +0 -95
  68. data/spec/rails3/app_root/.rspec +0 -1
  69. data/spec/rails3/app_root/config/database.yml +0 -27
  70. data/spec/rails3/app_root/spec/controller_session_timeout_spec.rb +0 -50
  71. data/spec/rails3/app_root/spec/spec_helper.rb +0 -62
  72. data/spec/sinatra/spec/user_activation_spec.rb +0 -188
  73. data/spec/sinatra/spec/user_activity_logging_spec.rb +0 -36
  74. data/spec/sinatra/spec/user_brute_force_protection_spec.rb +0 -76
  75. data/spec/sinatra/spec/user_oauth_spec.rb +0 -39
  76. data/spec/sinatra/spec/user_remember_me_spec.rb +0 -66
  77. data/spec/sinatra/spec/user_reset_password_spec.rb +0 -178
  78. data/spec/sinatra/spec/user_spec.rb +0 -317
  79. /data/spec/rails3/{app_root/.gitignore → .gitignore} +0 -0
  80. /data/spec/rails3/{app_root/README → README} +0 -0
  81. /data/spec/rails3/{app_root/Rakefile.unused → Rakefile.unused} +0 -0
  82. /data/spec/rails3/{app_root/app → app}/controllers/application_controller.rb +0 -0
  83. /data/spec/rails3/{app_root/app → app}/helpers/application_helper.rb +0 -0
  84. /data/spec/rails3/{app_root/app → app}/mailers/sorcery_mailer.rb +0 -0
  85. /data/spec/rails3/{app_root/app → app}/models/authentication.rb +0 -0
  86. /data/spec/rails3/{app_root/app → app}/models/user.rb +0 -0
  87. /data/spec/rails3/{app_root/app → app}/views/layouts/application.html.erb +0 -0
  88. /data/spec/rails3/{app_root/app → app}/views/sorcery_mailer/activation_email.html.erb +0 -0
  89. /data/spec/rails3/{app_root/app → app}/views/sorcery_mailer/activation_email.text.erb +0 -0
  90. /data/spec/rails3/{app_root/app → app}/views/sorcery_mailer/activation_success_email.html.erb +0 -0
  91. /data/spec/rails3/{app_root/app → app}/views/sorcery_mailer/activation_success_email.text.erb +0 -0
  92. /data/spec/rails3/{app_root/app → app}/views/sorcery_mailer/reset_password_email.html.erb +0 -0
  93. /data/spec/rails3/{app_root/app → app}/views/sorcery_mailer/reset_password_email.text.erb +0 -0
  94. /data/spec/rails3/{app_root/config → config}/application.rb +0 -0
  95. /data/spec/rails3/{app_root/config → config}/boot.rb +0 -0
  96. /data/spec/rails3/{app_root/config → config}/environment.rb +0 -0
  97. /data/spec/rails3/{app_root/config → config}/environments/development.rb +0 -0
  98. /data/spec/rails3/{app_root/config → config}/environments/in_memory.rb +0 -0
  99. /data/spec/rails3/{app_root/config → config}/environments/production.rb +0 -0
  100. /data/spec/rails3/{app_root/config → config}/environments/test.rb +0 -0
  101. /data/spec/rails3/{app_root/config → config}/initializers/backtrace_silencers.rb +0 -0
  102. /data/spec/rails3/{app_root/config → config}/initializers/inflections.rb +0 -0
  103. /data/spec/rails3/{app_root/config → config}/initializers/mime_types.rb +0 -0
  104. /data/spec/rails3/{app_root/config → config}/initializers/secret_token.rb +0 -0
  105. /data/spec/rails3/{app_root/config → config}/initializers/session_store.rb +0 -0
  106. /data/spec/rails3/{app_root/config → config}/locales/en.yml +0 -0
  107. /data/spec/rails3/{app_root/config → config}/routes.rb +0 -0
  108. /data/spec/rails3/{app_root/config.ru → config.ru} +0 -0
  109. /data/spec/rails3/{app_root/db → db}/migrate/activation/20101224223622_add_activation_to_users.rb +0 -0
  110. /data/spec/rails3/{app_root/db → db}/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -0
  111. /data/spec/rails3/{app_root/db → db}/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -0
  112. /data/spec/rails3/{app_root/db → db}/migrate/core/20101224223620_create_users.rb +0 -0
  113. /data/spec/rails3/{app_root/db → db}/migrate/external/20101224223628_create_authentications.rb +0 -0
  114. /data/spec/rails3/{app_root/db → db}/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -0
  115. /data/spec/rails3/{app_root/db → db}/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -0
  116. /data/spec/rails3/{app_root/db → db}/schema.rb +0 -0
  117. /data/spec/rails3/{app_root/db → db}/seeds.rb +0 -0
  118. /data/spec/rails3/{app_root/lib → lib}/tasks/.gitkeep +0 -0
  119. /data/spec/rails3/{app_root/public → public}/404.html +0 -0
  120. /data/spec/rails3/{app_root/public → public}/422.html +0 -0
  121. /data/spec/rails3/{app_root/public → public}/500.html +0 -0
  122. /data/spec/rails3/{app_root/public → public}/favicon.ico +0 -0
  123. /data/spec/rails3/{app_root/public → public}/images/rails.png +0 -0
  124. /data/spec/rails3/{app_root/public → public}/index.html +0 -0
  125. /data/spec/rails3/{app_root/public → public}/javascripts/application.js +0 -0
  126. /data/spec/rails3/{app_root/public → public}/javascripts/controls.js +0 -0
  127. /data/spec/rails3/{app_root/public → public}/javascripts/dragdrop.js +0 -0
  128. /data/spec/rails3/{app_root/public → public}/javascripts/effects.js +0 -0
  129. /data/spec/rails3/{app_root/public → public}/javascripts/prototype.js +0 -0
  130. /data/spec/rails3/{app_root/public → public}/javascripts/rails.js +0 -0
  131. /data/spec/rails3/{app_root/public → public}/robots.txt +0 -0
  132. /data/spec/rails3/{app_root/public → public}/stylesheets/.gitkeep +0 -0
  133. /data/spec/rails3/{app_root/script → script}/rails +0 -0
  134. /data/spec/rails3/{app_root/spec → spec}/controller_http_basic_auth_spec.rb +0 -0
  135. /data/spec/rails3/{app_root/spec → spec}/controller_remember_me_spec.rb +0 -0
  136. /data/spec/rails3/{app_root/spec → spec}/spec_helper.orig.rb +0 -0
  137. /data/spec/rails3/{app_root/spec → spec}/user_activity_logging_spec.rb +0 -0
  138. /data/spec/rails3/{app_root/vendor → vendor}/plugins/.gitkeep +0 -0
@@ -1,130 +1,84 @@
1
1
  module Sorcery
2
2
  module TestHelpers
3
3
  module Sinatra
4
-
5
- class MyApp
6
- class << self
7
- def new
8
- return this
4
+ def self.included(base)
5
+ base.send(:include, InstanceMethods)
6
+ base.send(:include, CookieSessionMethods)
7
+ ::Sinatra::Base.class_eval do
8
+ class << self
9
+ attr_accessor :rack_test_session
9
10
  end
10
- end
11
- end
12
-
13
- class ::Sinatra::Application
14
- class << self
15
- attr_accessor :sorcery_vars
16
- end
17
- @sorcery_vars = {}
18
11
 
19
- # NOTE: see before and after test filters in filters.rb
20
-
21
- def save_instance_vars
22
- instance_variables.each do |var|
23
- self.class.sorcery_vars[:"#{var.to_s.delete("@")}"] = instance_variable_get(var)
12
+ def self.inherited(subclass)
13
+ super
14
+ subclass.class_eval do
15
+ class << self
16
+ attr_accessor :rack_test_session
17
+ end
18
+ end
19
+ end
20
+
21
+ include CookieSessionMethods
22
+
23
+ def rack_test_session
24
+ self.class.rack_test_session
24
25
  end
25
26
  end
26
27
  end
27
-
28
- ::RSpec::Matchers.define :redirect_to do |expected|
29
- match do |actual|
30
- actual.status == 302 && actual.location == expected
31
- end
32
- end
33
-
34
- def get_sinatra_app(app)
35
- while app.class != ::Sinatra::Application do
36
- app = app.instance_variable_get(:@app)
37
- end
38
- app
39
- end
40
-
41
- def login_user(user=nil)
42
- user ||= @user
43
- get_sinatra_app(subject).send(:login_user,user)
44
- get_sinatra_app(subject).send(:after_login!,user,[user.username,'secret'])
45
- end
46
-
47
- def logout_user
48
- get_sinatra_app(subject).send(:logout)
49
- end
50
28
 
51
- def clear_user_without_logout
52
- get_sinatra_app(subject).instance_variable_set(:@current_user,nil)
53
- end
54
-
55
- def assigns
56
- ::Sinatra::Application.sorcery_vars
57
- end
58
-
59
- class SessionData
60
- def initialize(cookies)
61
- @cookies = cookies
62
- @data = cookies['rack.session']
63
- if @data
64
- @data = @data.unpack("m*").first
65
- @data = Marshal.load(@data)
66
- else
67
- @data = {}
29
+ module InstanceMethods
30
+ def get_sinatra_app(app)
31
+ while !app.kind_of? ::Sinatra::Base do
32
+ app = app.instance_variable_get(:@app)
68
33
  end
34
+ app
69
35
  end
70
36
 
71
- def [](key)
72
- @data[key]
37
+ def login_user(user=nil)
38
+ user ||= @user
39
+ get_sinatra_app(app).send(:login_user, user)
40
+ get_sinatra_app(app).send(:after_login!, user, [user.send(user.sorcery_config.username_attribute_name), 'secret'])
73
41
  end
74
42
 
75
- def []=(key, value)
76
- @data[key] = value
77
- session_data = Marshal.dump(@data)
78
- session_data = [session_data].pack("m*")
79
- @cookies.merge("rack.session=#{Rack::Utils.escape(session_data)}", URI.parse("//example.org//"))
80
- raise "session variable not set" unless @cookies['rack.session'] == session_data
43
+ def logout_user
44
+ get_sinatra_app(app).send(:logout)
81
45
  end
82
46
  end
83
47
 
84
- def session
85
- SessionData.new(rack_test_session.instance_variable_get(:@rack_mock_session).cookie_jar)
86
- end
87
-
88
- def cookies
89
- rack_test_session.instance_variable_get(:@rack_mock_session).cookie_jar
90
- end
91
-
92
- def sorcery_reload!(submodules = [], options = {})
93
- reload_user_class
48
+ module CookieSessionMethods
49
+ class SessionData
50
+ def initialize(cookies)
51
+ @cookies = cookies
52
+ @data = cookies['rack.session']
53
+ if @data
54
+ @data = @data.unpack("m*").first
55
+ @data = Marshal.load(@data)
56
+ else
57
+ @data = {}
58
+ end
59
+ end
94
60
 
95
- # return to no-module configuration
96
- ::Sorcery::Controller::Config.init!
97
- ::Sorcery::Controller::Config.reset!
61
+ def [](key)
62
+ @data[key]
63
+ end
98
64
 
99
- # clear all filters
100
- ::Sinatra::Application.instance_variable_set(:@filters,{:before => [],:after => []})
101
- ::Sinatra::Application.class_eval do
102
- load File.join(File.dirname(__FILE__),'..','..','..','spec','sinatra','filters.rb')
103
- end
104
-
105
- # configure
106
- ::Sorcery::Controller::Config.submodules = submodules
107
- ::Sorcery::Controller::Config.user_class = nil
108
- ::Sinatra::Application.send(:include, Sorcery::Controller::Adapters::Sinatra)
109
- ::Sinatra::Application.send(:include, Sorcery::Controller)
110
-
111
- User.activate_sorcery! do |config|
112
- options.each do |property,value|
113
- config.send(:"#{property}=", value)
65
+ def []=(key, value)
66
+ @data[key] = value
67
+ session_data = Marshal.dump(@data)
68
+ session_data = [session_data].pack("m*")
69
+ @cookies.merge("rack.session=#{Rack::Utils.escape(session_data)}", URI.parse("//example.org//"))
70
+ raise "session variable not set" unless @cookies['rack.session'] == session_data
71
+ end
72
+
73
+ def clear
74
+ @data = {}
114
75
  end
115
76
  end
116
- end
117
-
118
- def sorcery_controller_property_set(property, value)
119
- ::Sinatra::Application.activate_sorcery! do |config|
120
- config.send(:"#{property}=", value)
121
- end
122
- end
123
77
 
124
- def sorcery_controller_oauth_property_set(provider, property, value)
125
- ::Sinatra::Application.activate_sorcery! do |config|
126
- config.send(provider).send(:"#{property}=", value)
78
+ def session
79
+ SessionData.new(rack_test_session.instance_variable_get(:@rack_mock_session).cookie_jar)
127
80
  end
81
+
128
82
  end
129
83
  end
130
84
  end
@@ -1,40 +1,5 @@
1
1
  module Sorcery
2
2
  module TestHelpers
3
- # a patch to fix a bug in testing that happens when you 'destroy' a session twice.
4
- # After the first destroy, the session is an ordinary hash, and then when destroy is called again there's an exception.
5
- class ::Hash
6
- def destroy
7
- clear
8
- end
9
- end
10
-
11
- def create_new_user(attributes_hash = nil)
12
- user_attributes_hash = attributes_hash || {:username => 'gizmo', :email => "bla@bla.com", :password => 'secret'}
13
- @user = User.new(user_attributes_hash)
14
- @user.save!
15
- @user
16
- end
17
3
 
18
- def create_new_external_user(provider, attributes_hash = nil)
19
- user_attributes_hash = attributes_hash || {:username => 'gizmo', :authentications_attributes => [{:provider => provider, :uid => 123}]}
20
- @user = User.new(user_attributes_hash)
21
- @user.save!
22
- @user
23
- end
24
-
25
- def sorcery_model_property_set(property, *values)
26
- User.class_eval do
27
- sorcery_config.send(:"#{property}=", *values)
28
- end
29
- end
30
-
31
- private
32
-
33
- # reload user class between specs
34
- # so it will be possible to test the different submodules in isolation
35
- def reload_user_class
36
- Object.send(:remove_const,:User)
37
- load 'user.rb'
38
- end
39
4
  end
40
5
  end
data/lib/sorcery.rb CHANGED
@@ -36,6 +36,7 @@ module Sorcery
36
36
  end
37
37
  end
38
38
  module CryptoProviders
39
+ autoload :Common, 'sorcery/crypto_providers/common'
39
40
  autoload :AES256, 'sorcery/crypto_providers/aes256'
40
41
  autoload :BCrypt, 'sorcery/crypto_providers/bcrypt'
41
42
  autoload :MD5, 'sorcery/crypto_providers/md5'
@@ -47,7 +48,14 @@ module Sorcery
47
48
  module TestHelpers
48
49
  autoload :Rails, 'sorcery/test_helpers/rails'
49
50
  autoload :Sinatra, 'sorcery/test_helpers/sinatra'
51
+ autoload :Internal, 'sorcery/test_helpers/internal'
52
+ module Internal
53
+ autoload :Rails, 'sorcery/test_helpers/internal/rails'
54
+ autoload :Sinatra, 'sorcery/test_helpers/internal/sinatra'
55
+ end
56
+
50
57
  end
58
+
51
59
 
52
60
  require 'sorcery/engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
53
61
  require 'sorcery/sinatra' if defined?(Sinatra)