jlecour-authlogic 2.1.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 (123) hide show
  1. data/.gitignore +9 -0
  2. data/CHANGELOG.rdoc +345 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +245 -0
  5. data/Rakefile +42 -0
  6. data/VERSION.yml +4 -0
  7. data/authlogic.gemspec +212 -0
  8. data/generators/session/session_generator.rb +9 -0
  9. data/generators/session/templates/session.erb +2 -0
  10. data/init.rb +1 -0
  11. data/lib/authlogic.rb +56 -0
  12. data/lib/authlogic/acts_as_authentic/base.rb +107 -0
  13. data/lib/authlogic/acts_as_authentic/email.rb +110 -0
  14. data/lib/authlogic/acts_as_authentic/logged_in_status.rb +60 -0
  15. data/lib/authlogic/acts_as_authentic/login.rb +141 -0
  16. data/lib/authlogic/acts_as_authentic/magic_columns.rb +24 -0
  17. data/lib/authlogic/acts_as_authentic/password.rb +344 -0
  18. data/lib/authlogic/acts_as_authentic/perishable_token.rb +105 -0
  19. data/lib/authlogic/acts_as_authentic/persistence_token.rb +68 -0
  20. data/lib/authlogic/acts_as_authentic/restful_authentication.rb +61 -0
  21. data/lib/authlogic/acts_as_authentic/session_maintenance.rb +139 -0
  22. data/lib/authlogic/acts_as_authentic/single_access_token.rb +65 -0
  23. data/lib/authlogic/acts_as_authentic/validations_scope.rb +32 -0
  24. data/lib/authlogic/authenticates_many/association.rb +42 -0
  25. data/lib/authlogic/authenticates_many/base.rb +55 -0
  26. data/lib/authlogic/controller_adapters/abstract_adapter.rb +67 -0
  27. data/lib/authlogic/controller_adapters/merb_adapter.rb +30 -0
  28. data/lib/authlogic/controller_adapters/rails_adapter.rb +48 -0
  29. data/lib/authlogic/controller_adapters/sinatra_adapter.rb +61 -0
  30. data/lib/authlogic/crypto_providers/aes256.rb +43 -0
  31. data/lib/authlogic/crypto_providers/bcrypt.rb +89 -0
  32. data/lib/authlogic/crypto_providers/md5.rb +34 -0
  33. data/lib/authlogic/crypto_providers/sha1.rb +35 -0
  34. data/lib/authlogic/crypto_providers/sha512.rb +50 -0
  35. data/lib/authlogic/i18n.rb +83 -0
  36. data/lib/authlogic/i18n/translator.rb +15 -0
  37. data/lib/authlogic/random.rb +33 -0
  38. data/lib/authlogic/regex.rb +25 -0
  39. data/lib/authlogic/session/activation.rb +58 -0
  40. data/lib/authlogic/session/active_record_trickery.rb +61 -0
  41. data/lib/authlogic/session/base.rb +37 -0
  42. data/lib/authlogic/session/brute_force_protection.rb +96 -0
  43. data/lib/authlogic/session/callbacks.rb +88 -0
  44. data/lib/authlogic/session/cookies.rb +130 -0
  45. data/lib/authlogic/session/existence.rb +93 -0
  46. data/lib/authlogic/session/foundation.rb +63 -0
  47. data/lib/authlogic/session/http_auth.rb +58 -0
  48. data/lib/authlogic/session/id.rb +41 -0
  49. data/lib/authlogic/session/klass.rb +75 -0
  50. data/lib/authlogic/session/magic_columns.rb +95 -0
  51. data/lib/authlogic/session/magic_states.rb +59 -0
  52. data/lib/authlogic/session/params.rb +101 -0
  53. data/lib/authlogic/session/password.rb +240 -0
  54. data/lib/authlogic/session/perishable_token.rb +18 -0
  55. data/lib/authlogic/session/persistence.rb +70 -0
  56. data/lib/authlogic/session/priority_record.rb +34 -0
  57. data/lib/authlogic/session/scopes.rb +101 -0
  58. data/lib/authlogic/session/session.rb +62 -0
  59. data/lib/authlogic/session/timeout.rb +82 -0
  60. data/lib/authlogic/session/unauthorized_record.rb +50 -0
  61. data/lib/authlogic/session/validation.rb +82 -0
  62. data/lib/authlogic/test_case.rb +114 -0
  63. data/lib/authlogic/test_case/mock_controller.rb +45 -0
  64. data/lib/authlogic/test_case/mock_cookie_jar.rb +14 -0
  65. data/lib/authlogic/test_case/mock_logger.rb +10 -0
  66. data/lib/authlogic/test_case/mock_request.rb +19 -0
  67. data/lib/authlogic/test_case/rails_request_adapter.rb +30 -0
  68. data/rails/init.rb +1 -0
  69. data/shoulda_macros/authlogic.rb +13 -0
  70. data/test/acts_as_authentic_test/base_test.rb +18 -0
  71. data/test/acts_as_authentic_test/email_test.rb +97 -0
  72. data/test/acts_as_authentic_test/logged_in_status_test.rb +36 -0
  73. data/test/acts_as_authentic_test/login_test.rb +109 -0
  74. data/test/acts_as_authentic_test/magic_columns_test.rb +27 -0
  75. data/test/acts_as_authentic_test/password_test.rb +236 -0
  76. data/test/acts_as_authentic_test/perishable_token_test.rb +90 -0
  77. data/test/acts_as_authentic_test/persistence_token_test.rb +55 -0
  78. data/test/acts_as_authentic_test/restful_authentication_test.rb +40 -0
  79. data/test/acts_as_authentic_test/session_maintenance_test.rb +84 -0
  80. data/test/acts_as_authentic_test/single_access_test.rb +44 -0
  81. data/test/authenticates_many_test.rb +16 -0
  82. data/test/crypto_provider_test/aes256_test.rb +14 -0
  83. data/test/crypto_provider_test/bcrypt_test.rb +14 -0
  84. data/test/crypto_provider_test/sha1_test.rb +23 -0
  85. data/test/crypto_provider_test/sha512_test.rb +14 -0
  86. data/test/fixtures/companies.yml +5 -0
  87. data/test/fixtures/employees.yml +17 -0
  88. data/test/fixtures/projects.yml +3 -0
  89. data/test/fixtures/users.yml +24 -0
  90. data/test/i18n_test.rb +33 -0
  91. data/test/libs/affiliate.rb +7 -0
  92. data/test/libs/company.rb +6 -0
  93. data/test/libs/employee.rb +7 -0
  94. data/test/libs/employee_session.rb +2 -0
  95. data/test/libs/ldaper.rb +3 -0
  96. data/test/libs/ordered_hash.rb +9 -0
  97. data/test/libs/project.rb +3 -0
  98. data/test/libs/user.rb +5 -0
  99. data/test/libs/user_session.rb +2 -0
  100. data/test/random_test.rb +49 -0
  101. data/test/session_test/activation_test.rb +43 -0
  102. data/test/session_test/active_record_trickery_test.rb +36 -0
  103. data/test/session_test/brute_force_protection_test.rb +101 -0
  104. data/test/session_test/callbacks_test.rb +6 -0
  105. data/test/session_test/cookies_test.rb +107 -0
  106. data/test/session_test/credentials_test.rb +0 -0
  107. data/test/session_test/existence_test.rb +64 -0
  108. data/test/session_test/http_auth_test.rb +28 -0
  109. data/test/session_test/id_test.rb +17 -0
  110. data/test/session_test/klass_test.rb +35 -0
  111. data/test/session_test/magic_columns_test.rb +62 -0
  112. data/test/session_test/magic_states_test.rb +60 -0
  113. data/test/session_test/params_test.rb +53 -0
  114. data/test/session_test/password_test.rb +106 -0
  115. data/test/session_test/perishability_test.rb +15 -0
  116. data/test/session_test/persistence_test.rb +21 -0
  117. data/test/session_test/scopes_test.rb +60 -0
  118. data/test/session_test/session_test.rb +59 -0
  119. data/test/session_test/timeout_test.rb +52 -0
  120. data/test/session_test/unauthorized_record_test.rb +13 -0
  121. data/test/session_test/validation_test.rb +23 -0
  122. data/test/test_helper.rb +181 -0
  123. metadata +233 -0
data/Rakefile ADDED
@@ -0,0 +1,42 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "authlogic"
8
+ gem.summary = "A clean, simple, and unobtrusive ruby authentication solution."
9
+ gem.email = "bjohnson@binarylogic.com"
10
+ gem.homepage = "http://github.com/binarylogic/authlogic"
11
+ gem.authors = ["Ben Johnson of Binary Logic"]
12
+ gem.rubyforge_project = "authlogic"
13
+ gem.add_dependency "activesupport"
14
+ end
15
+ Jeweler::RubyforgeTasks.new
16
+ rescue LoadError
17
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
18
+ end
19
+
20
+ require 'rake/testtask'
21
+ Rake::TestTask.new(:test) do |test|
22
+ test.libs << 'test'
23
+ test.pattern = 'test/**/*_test.rb'
24
+ test.verbose = true
25
+ end
26
+
27
+ begin
28
+ require 'rcov/rcovtask'
29
+ Rcov::RcovTask.new do |test|
30
+ test.libs << 'test'
31
+ test.pattern = 'test/**/*_test.rb'
32
+ test.verbose = true
33
+ end
34
+ rescue LoadError
35
+ task :rcov do
36
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
37
+ end
38
+ end
39
+
40
+ task :test => :check_dependencies
41
+
42
+ task :default => :test
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :patch: 2
3
+ :major: 2
4
+ :minor: 1
data/authlogic.gemspec ADDED
@@ -0,0 +1,212 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{authlogic}
8
+ s.version = "2.1.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Ben Johnson of Binary Logic"]
12
+ s.date = %q{2009-09-12}
13
+ s.email = %q{bjohnson@binarylogic.com}
14
+ s.extra_rdoc_files = [
15
+ "LICENSE",
16
+ "README.rdoc"
17
+ ]
18
+ s.files = [
19
+ ".gitignore",
20
+ "CHANGELOG.rdoc",
21
+ "LICENSE",
22
+ "README.rdoc",
23
+ "Rakefile",
24
+ "VERSION.yml",
25
+ "authlogic.gemspec",
26
+ "generators/session/session_generator.rb",
27
+ "generators/session/templates/session.erb",
28
+ "init.rb",
29
+ "lib/authlogic.rb",
30
+ "lib/authlogic/acts_as_authentic/base.rb",
31
+ "lib/authlogic/acts_as_authentic/email.rb",
32
+ "lib/authlogic/acts_as_authentic/logged_in_status.rb",
33
+ "lib/authlogic/acts_as_authentic/login.rb",
34
+ "lib/authlogic/acts_as_authentic/magic_columns.rb",
35
+ "lib/authlogic/acts_as_authentic/password.rb",
36
+ "lib/authlogic/acts_as_authentic/perishable_token.rb",
37
+ "lib/authlogic/acts_as_authentic/persistence_token.rb",
38
+ "lib/authlogic/acts_as_authentic/restful_authentication.rb",
39
+ "lib/authlogic/acts_as_authentic/session_maintenance.rb",
40
+ "lib/authlogic/acts_as_authentic/single_access_token.rb",
41
+ "lib/authlogic/acts_as_authentic/validations_scope.rb",
42
+ "lib/authlogic/authenticates_many/association.rb",
43
+ "lib/authlogic/authenticates_many/base.rb",
44
+ "lib/authlogic/controller_adapters/abstract_adapter.rb",
45
+ "lib/authlogic/controller_adapters/merb_adapter.rb",
46
+ "lib/authlogic/controller_adapters/rails_adapter.rb",
47
+ "lib/authlogic/controller_adapters/sinatra_adapter.rb",
48
+ "lib/authlogic/crypto_providers/aes256.rb",
49
+ "lib/authlogic/crypto_providers/bcrypt.rb",
50
+ "lib/authlogic/crypto_providers/md5.rb",
51
+ "lib/authlogic/crypto_providers/sha1.rb",
52
+ "lib/authlogic/crypto_providers/sha512.rb",
53
+ "lib/authlogic/i18n.rb",
54
+ "lib/authlogic/i18n/translator.rb",
55
+ "lib/authlogic/random.rb",
56
+ "lib/authlogic/regex.rb",
57
+ "lib/authlogic/session/activation.rb",
58
+ "lib/authlogic/session/active_record_trickery.rb",
59
+ "lib/authlogic/session/base.rb",
60
+ "lib/authlogic/session/brute_force_protection.rb",
61
+ "lib/authlogic/session/callbacks.rb",
62
+ "lib/authlogic/session/cookies.rb",
63
+ "lib/authlogic/session/existence.rb",
64
+ "lib/authlogic/session/foundation.rb",
65
+ "lib/authlogic/session/http_auth.rb",
66
+ "lib/authlogic/session/id.rb",
67
+ "lib/authlogic/session/klass.rb",
68
+ "lib/authlogic/session/magic_columns.rb",
69
+ "lib/authlogic/session/magic_states.rb",
70
+ "lib/authlogic/session/params.rb",
71
+ "lib/authlogic/session/password.rb",
72
+ "lib/authlogic/session/perishable_token.rb",
73
+ "lib/authlogic/session/persistence.rb",
74
+ "lib/authlogic/session/priority_record.rb",
75
+ "lib/authlogic/session/scopes.rb",
76
+ "lib/authlogic/session/session.rb",
77
+ "lib/authlogic/session/timeout.rb",
78
+ "lib/authlogic/session/unauthorized_record.rb",
79
+ "lib/authlogic/session/validation.rb",
80
+ "lib/authlogic/test_case.rb",
81
+ "lib/authlogic/test_case/mock_controller.rb",
82
+ "lib/authlogic/test_case/mock_cookie_jar.rb",
83
+ "lib/authlogic/test_case/mock_logger.rb",
84
+ "lib/authlogic/test_case/mock_request.rb",
85
+ "lib/authlogic/test_case/rails_request_adapter.rb",
86
+ "rails/init.rb",
87
+ "shoulda_macros/authlogic.rb",
88
+ "test/acts_as_authentic_test/base_test.rb",
89
+ "test/acts_as_authentic_test/email_test.rb",
90
+ "test/acts_as_authentic_test/logged_in_status_test.rb",
91
+ "test/acts_as_authentic_test/login_test.rb",
92
+ "test/acts_as_authentic_test/magic_columns_test.rb",
93
+ "test/acts_as_authentic_test/password_test.rb",
94
+ "test/acts_as_authentic_test/perishable_token_test.rb",
95
+ "test/acts_as_authentic_test/persistence_token_test.rb",
96
+ "test/acts_as_authentic_test/restful_authentication_test.rb",
97
+ "test/acts_as_authentic_test/session_maintenance_test.rb",
98
+ "test/acts_as_authentic_test/single_access_test.rb",
99
+ "test/authenticates_many_test.rb",
100
+ "test/crypto_provider_test/aes256_test.rb",
101
+ "test/crypto_provider_test/bcrypt_test.rb",
102
+ "test/crypto_provider_test/sha1_test.rb",
103
+ "test/crypto_provider_test/sha512_test.rb",
104
+ "test/fixtures/companies.yml",
105
+ "test/fixtures/employees.yml",
106
+ "test/fixtures/projects.yml",
107
+ "test/fixtures/users.yml",
108
+ "test/i18n_test.rb",
109
+ "test/libs/affiliate.rb",
110
+ "test/libs/company.rb",
111
+ "test/libs/employee.rb",
112
+ "test/libs/employee_session.rb",
113
+ "test/libs/ldaper.rb",
114
+ "test/libs/ordered_hash.rb",
115
+ "test/libs/project.rb",
116
+ "test/libs/user.rb",
117
+ "test/libs/user_session.rb",
118
+ "test/random_test.rb",
119
+ "test/session_test/activation_test.rb",
120
+ "test/session_test/active_record_trickery_test.rb",
121
+ "test/session_test/brute_force_protection_test.rb",
122
+ "test/session_test/callbacks_test.rb",
123
+ "test/session_test/cookies_test.rb",
124
+ "test/session_test/credentials_test.rb",
125
+ "test/session_test/existence_test.rb",
126
+ "test/session_test/http_auth_test.rb",
127
+ "test/session_test/id_test.rb",
128
+ "test/session_test/klass_test.rb",
129
+ "test/session_test/magic_columns_test.rb",
130
+ "test/session_test/magic_states_test.rb",
131
+ "test/session_test/params_test.rb",
132
+ "test/session_test/password_test.rb",
133
+ "test/session_test/perishability_test.rb",
134
+ "test/session_test/persistence_test.rb",
135
+ "test/session_test/scopes_test.rb",
136
+ "test/session_test/session_test.rb",
137
+ "test/session_test/timeout_test.rb",
138
+ "test/session_test/unauthorized_record_test.rb",
139
+ "test/session_test/validation_test.rb",
140
+ "test/test_helper.rb"
141
+ ]
142
+ s.homepage = %q{http://github.com/binarylogic/authlogic}
143
+ s.rdoc_options = ["--charset=UTF-8"]
144
+ s.require_paths = ["lib"]
145
+ s.rubyforge_project = %q{authlogic}
146
+ s.rubygems_version = %q{1.3.5}
147
+ s.summary = %q{A clean, simple, and unobtrusive ruby authentication solution.}
148
+ s.test_files = [
149
+ "test/acts_as_authentic_test/base_test.rb",
150
+ "test/acts_as_authentic_test/email_test.rb",
151
+ "test/acts_as_authentic_test/logged_in_status_test.rb",
152
+ "test/acts_as_authentic_test/login_test.rb",
153
+ "test/acts_as_authentic_test/magic_columns_test.rb",
154
+ "test/acts_as_authentic_test/password_test.rb",
155
+ "test/acts_as_authentic_test/perishable_token_test.rb",
156
+ "test/acts_as_authentic_test/persistence_token_test.rb",
157
+ "test/acts_as_authentic_test/restful_authentication_test.rb",
158
+ "test/acts_as_authentic_test/session_maintenance_test.rb",
159
+ "test/acts_as_authentic_test/single_access_test.rb",
160
+ "test/authenticates_many_test.rb",
161
+ "test/crypto_provider_test/aes256_test.rb",
162
+ "test/crypto_provider_test/bcrypt_test.rb",
163
+ "test/crypto_provider_test/sha1_test.rb",
164
+ "test/crypto_provider_test/sha512_test.rb",
165
+ "test/i18n_test.rb",
166
+ "test/libs/affiliate.rb",
167
+ "test/libs/company.rb",
168
+ "test/libs/employee.rb",
169
+ "test/libs/employee_session.rb",
170
+ "test/libs/ldaper.rb",
171
+ "test/libs/ordered_hash.rb",
172
+ "test/libs/project.rb",
173
+ "test/libs/user.rb",
174
+ "test/libs/user_session.rb",
175
+ "test/random_test.rb",
176
+ "test/session_test/activation_test.rb",
177
+ "test/session_test/active_record_trickery_test.rb",
178
+ "test/session_test/brute_force_protection_test.rb",
179
+ "test/session_test/callbacks_test.rb",
180
+ "test/session_test/cookies_test.rb",
181
+ "test/session_test/credentials_test.rb",
182
+ "test/session_test/existence_test.rb",
183
+ "test/session_test/http_auth_test.rb",
184
+ "test/session_test/id_test.rb",
185
+ "test/session_test/klass_test.rb",
186
+ "test/session_test/magic_columns_test.rb",
187
+ "test/session_test/magic_states_test.rb",
188
+ "test/session_test/params_test.rb",
189
+ "test/session_test/password_test.rb",
190
+ "test/session_test/perishability_test.rb",
191
+ "test/session_test/persistence_test.rb",
192
+ "test/session_test/scopes_test.rb",
193
+ "test/session_test/session_test.rb",
194
+ "test/session_test/timeout_test.rb",
195
+ "test/session_test/unauthorized_record_test.rb",
196
+ "test/session_test/validation_test.rb",
197
+ "test/test_helper.rb"
198
+ ]
199
+
200
+ if s.respond_to? :specification_version then
201
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
202
+ s.specification_version = 3
203
+
204
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
205
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
206
+ else
207
+ s.add_dependency(%q<activesupport>, [">= 0"])
208
+ end
209
+ else
210
+ s.add_dependency(%q<activesupport>, [">= 0"])
211
+ end
212
+ end
@@ -0,0 +1,9 @@
1
+ class SessionGenerator < Rails::Generator::NamedBase
2
+ def manifest
3
+ record do |m|
4
+ m.class_collisions class_name
5
+ m.directory File.join('app/models', class_path)
6
+ m.template 'session.erb', File.join('app/models', class_path, "#{file_name}.rb")
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,2 @@
1
+ class <%= class_name %> < Authlogic::Session::Base
2
+ end
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require File.dirname(__FILE__) + "/rails/init.rb"
data/lib/authlogic.rb ADDED
@@ -0,0 +1,56 @@
1
+ require "active_record"
2
+
3
+ require File.dirname(__FILE__) + "/authlogic/i18n"
4
+ require File.dirname(__FILE__) + "/authlogic/random"
5
+ require File.dirname(__FILE__) + "/authlogic/regex"
6
+
7
+ require File.dirname(__FILE__) + "/authlogic/controller_adapters/abstract_adapter"
8
+ require File.dirname(__FILE__) + "/authlogic/controller_adapters/rails_adapter" if defined?(Rails)
9
+ require File.dirname(__FILE__) + "/authlogic/controller_adapters/merb_adapter" if defined?(Merb)
10
+ require File.dirname(__FILE__) + "/authlogic/controller_adapters/sinatra_adapter" if defined?(Sinatra)
11
+
12
+ require File.dirname(__FILE__) + "/authlogic/crypto_providers/md5"
13
+ require File.dirname(__FILE__) + "/authlogic/crypto_providers/sha1"
14
+ require File.dirname(__FILE__) + "/authlogic/crypto_providers/sha512"
15
+ require File.dirname(__FILE__) + "/authlogic/crypto_providers/bcrypt"
16
+ require File.dirname(__FILE__) + "/authlogic/crypto_providers/aes256"
17
+
18
+ require File.dirname(__FILE__) + "/authlogic/authenticates_many/base"
19
+ require File.dirname(__FILE__) + "/authlogic/authenticates_many/association"
20
+
21
+ require File.dirname(__FILE__) + "/authlogic/acts_as_authentic/email"
22
+ require File.dirname(__FILE__) + "/authlogic/acts_as_authentic/logged_in_status"
23
+ require File.dirname(__FILE__) + "/authlogic/acts_as_authentic/login"
24
+ require File.dirname(__FILE__) + "/authlogic/acts_as_authentic/magic_columns"
25
+ require File.dirname(__FILE__) + "/authlogic/acts_as_authentic/password"
26
+ require File.dirname(__FILE__) + "/authlogic/acts_as_authentic/perishable_token"
27
+ require File.dirname(__FILE__) + "/authlogic/acts_as_authentic/persistence_token"
28
+ require File.dirname(__FILE__) + "/authlogic/acts_as_authentic/restful_authentication"
29
+ require File.dirname(__FILE__) + "/authlogic/acts_as_authentic/session_maintenance"
30
+ require File.dirname(__FILE__) + "/authlogic/acts_as_authentic/single_access_token"
31
+ require File.dirname(__FILE__) + "/authlogic/acts_as_authentic/validations_scope"
32
+ require File.dirname(__FILE__) + "/authlogic/acts_as_authentic/base"
33
+
34
+ require File.dirname(__FILE__) + "/authlogic/session/activation"
35
+ require File.dirname(__FILE__) + "/authlogic/session/active_record_trickery"
36
+ require File.dirname(__FILE__) + "/authlogic/session/brute_force_protection"
37
+ require File.dirname(__FILE__) + "/authlogic/session/callbacks"
38
+ require File.dirname(__FILE__) + "/authlogic/session/cookies"
39
+ require File.dirname(__FILE__) + "/authlogic/session/existence"
40
+ require File.dirname(__FILE__) + "/authlogic/session/foundation"
41
+ require File.dirname(__FILE__) + "/authlogic/session/http_auth"
42
+ require File.dirname(__FILE__) + "/authlogic/session/id"
43
+ require File.dirname(__FILE__) + "/authlogic/session/klass"
44
+ require File.dirname(__FILE__) + "/authlogic/session/magic_columns"
45
+ require File.dirname(__FILE__) + "/authlogic/session/magic_states"
46
+ require File.dirname(__FILE__) + "/authlogic/session/params"
47
+ require File.dirname(__FILE__) + "/authlogic/session/password"
48
+ require File.dirname(__FILE__) + "/authlogic/session/perishable_token"
49
+ require File.dirname(__FILE__) + "/authlogic/session/persistence"
50
+ require File.dirname(__FILE__) + "/authlogic/session/priority_record"
51
+ require File.dirname(__FILE__) + "/authlogic/session/scopes"
52
+ require File.dirname(__FILE__) + "/authlogic/session/session"
53
+ require File.dirname(__FILE__) + "/authlogic/session/timeout"
54
+ require File.dirname(__FILE__) + "/authlogic/session/unauthorized_record"
55
+ require File.dirname(__FILE__) + "/authlogic/session/validation"
56
+ require File.dirname(__FILE__) + "/authlogic/session/base"
@@ -0,0 +1,107 @@
1
+ module Authlogic
2
+ module ActsAsAuthentic
3
+ # Provides the base functionality for acts_as_authentic
4
+ module Base
5
+ def self.included(klass)
6
+ klass.class_eval do
7
+ extend Config
8
+ end
9
+ end
10
+
11
+ module Config
12
+ # This includes a lot of helpful methods for authenticating records which The Authlogic::Session module relies on.
13
+ # To use it just do:
14
+ #
15
+ # class User < ActiveRecord::Base
16
+ # acts_as_authentic
17
+ # end
18
+ #
19
+ # Configuration is easy:
20
+ #
21
+ # acts_as_authentic do |c|
22
+ # c.my_configuration_option = my_value
23
+ # end
24
+ #
25
+ # See the various sub modules for the configuration they provide.
26
+ def acts_as_authentic(unsupported_options = nil, &block)
27
+ # Stop all configuration if the DB is not set up
28
+ return if !db_setup?
29
+
30
+ raise ArgumentError.new("You are using the old v1.X.X configuration method for Authlogic. Instead of " +
31
+ "passing a hash of configuration options to acts_as_authentic, pass a block: acts_as_authentic { |c| c.my_option = my_value }") if !unsupported_options.nil?
32
+
33
+ yield self if block_given?
34
+ acts_as_authentic_modules.each { |mod| include mod }
35
+ end
36
+
37
+ # Since this part of Authlogic deals with another class, ActiveRecord, we can't just start including things
38
+ # in ActiveRecord itself. A lot of these module includes need to be triggered by the acts_as_authentic method
39
+ # call. For example, you don't want to start adding in email validations and what not into a model that has
40
+ # nothing to do with Authlogic.
41
+ #
42
+ # That being said, this is your tool for extending Authlogic and "hooking" into the acts_as_authentic call.
43
+ def add_acts_as_authentic_module(mod, action = :append)
44
+ modules = acts_as_authentic_modules
45
+ case action
46
+ when :append
47
+ modules << mod
48
+ when :prepend
49
+ modules = [mod] + modules
50
+ end
51
+ modules.uniq!
52
+ write_inheritable_attribute(:acts_as_authentic_modules, modules)
53
+ end
54
+
55
+ # This is the same as add_acts_as_authentic_module, except that it removes the module from the list.
56
+ def remove_acts_as_authentic_module(mod)
57
+ acts_as_authentic_modules.delete(mod)
58
+ acts_as_authentic_modules
59
+ end
60
+
61
+ private
62
+ def acts_as_authentic_modules
63
+ key = :acts_as_authentic_modules
64
+ inheritable_attributes.include?(key) ? read_inheritable_attribute(key) : []
65
+ end
66
+
67
+ def db_setup?
68
+ begin
69
+ column_names
70
+ true
71
+ rescue Exception
72
+ false
73
+ end
74
+ end
75
+
76
+ def rw_config(key, value, default_value = nil, read_value = nil)
77
+ if value == read_value
78
+ inheritable_attributes.include?(key) ? read_inheritable_attribute(key) : default_value
79
+ else
80
+ write_inheritable_attribute(key, value)
81
+ end
82
+ end
83
+
84
+ def first_column_to_exist(*columns_to_check)
85
+ if db_setup?
86
+ columns_to_check.each { |column_name| return column_name.to_sym if column_names.include?(column_name.to_s) }
87
+ end
88
+ columns_to_check.first && columns_to_check.first.to_sym
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+
95
+ ::ActiveRecord::Base.send :include, Authlogic::ActsAsAuthentic::Base
96
+ ::ActiveRecord::Base.send :include, Authlogic::ActsAsAuthentic::Email
97
+ ::ActiveRecord::Base.send :include, Authlogic::ActsAsAuthentic::LoggedInStatus
98
+ ::ActiveRecord::Base.send :include, Authlogic::ActsAsAuthentic::Login
99
+ ::ActiveRecord::Base.send :include, Authlogic::ActsAsAuthentic::MagicColumns
100
+ ::ActiveRecord::Base.send :include, Authlogic::ActsAsAuthentic::Password
101
+ ::ActiveRecord::Base.send :include, Authlogic::ActsAsAuthentic::PerishableToken
102
+ ::ActiveRecord::Base.send :include, Authlogic::ActsAsAuthentic::PersistenceToken
103
+ ::ActiveRecord::Base.send :include, Authlogic::ActsAsAuthentic::RestfulAuthentication
104
+ ::ActiveRecord::Base.send :include, Authlogic::ActsAsAuthentic::SessionMaintenance
105
+ ::ActiveRecord::Base.send :include, Authlogic::ActsAsAuthentic::SingleAccessToken
106
+ ::ActiveRecord::Base.send :include, Authlogic::ActsAsAuthentic::ValidationsScope
107
+
@@ -0,0 +1,110 @@
1
+ module Authlogic
2
+ module ActsAsAuthentic
3
+ # Sometimes models won't have an explicit "login" or "username" field. Instead they want to use the email field.
4
+ # In this case, authlogic provides validations to make sure the email submited is actually a valid email. Don't worry,
5
+ # if you do have a login or username field, Authlogic will still validate your email field. One less thing you have to
6
+ # worry about.
7
+ module Email
8
+ def self.included(klass)
9
+ klass.class_eval do
10
+ extend Config
11
+ add_acts_as_authentic_module(Methods)
12
+ end
13
+ end
14
+
15
+ # Configuration to modify how Authlogic handles the email field.
16
+ module Config
17
+ # The name of the field that stores email addresses.
18
+ #
19
+ # * <tt>Default:</tt> :email, if it exists
20
+ # * <tt>Accepts:</tt> Symbol
21
+ def email_field(value = nil)
22
+ rw_config(:email_field, value, first_column_to_exist(nil, :email, :email_address))
23
+ end
24
+ alias_method :email_field=, :email_field
25
+
26
+ # Toggles validating the email field or not.
27
+ #
28
+ # * <tt>Default:</tt> true
29
+ # * <tt>Accepts:</tt> Boolean
30
+ def validate_email_field(value = nil)
31
+ rw_config(:validate_email_field, value, true)
32
+ end
33
+ alias_method :validate_email_field=, :validate_email_field
34
+
35
+ # A hash of options for the validates_length_of call for the email field. Allows you to change this however you want.
36
+ #
37
+ # <b>Keep in mind this is ruby. I wanted to keep this as flexible as possible, so you can completely replace the hash or
38
+ # merge options into it. Checkout the convenience function merge_validates_length_of_email_field_options to merge
39
+ # options.</b>
40
+ #
41
+ # * <tt>Default:</tt> {:within => 6..100}
42
+ # * <tt>Accepts:</tt> Hash of options accepted by validates_length_of
43
+ def validates_length_of_email_field_options(value = nil)
44
+ rw_config(:validates_length_of_email_field_options, value, {:within => 6..100})
45
+ end
46
+ alias_method :validates_length_of_email_field_options=, :validates_length_of_email_field_options
47
+
48
+ # A convenience function to merge options into the validates_length_of_email_field_options. So intead of:
49
+ #
50
+ # self.validates_length_of_email_field_options = validates_length_of_email_field_options.merge(:my_option => my_value)
51
+ #
52
+ # You can do this:
53
+ #
54
+ # merge_validates_length_of_email_field_options :my_option => my_value
55
+ def merge_validates_length_of_email_field_options(options = {})
56
+ self.validates_length_of_email_field_options = validates_length_of_email_field_options.merge(options)
57
+ end
58
+
59
+ # A hash of options for the validates_format_of call for the email field. Allows you to change this however you want.
60
+ #
61
+ # <b>Keep in mind this is ruby. I wanted to keep this as flexible as possible, so you can completely replace the hash or
62
+ # merge options into it. Checkout the convenience function merge_validates_format_of_email_field_options to merge
63
+ # options.</b>
64
+ #
65
+ # * <tt>Default:</tt> {:with => Authlogic::Regex.email, :message => I18n.t('error_messages.email_invalid', :default => "should look like an email address.")}
66
+ # * <tt>Accepts:</tt> Hash of options accepted by validates_format_of
67
+ def validates_format_of_email_field_options(value = nil)
68
+ rw_config(:validates_format_of_email_field_options, value, {:with => Authlogic::Regex.email, :message => I18n.t('error_messages.email_invalid', :default => "should look like an email address.")})
69
+ end
70
+ alias_method :validates_format_of_email_field_options=, :validates_format_of_email_field_options
71
+
72
+ # See merge_validates_length_of_email_field_options. The same thing except for validates_format_of_email_field_options.
73
+ def merge_validates_format_of_email_field_options(options = {})
74
+ self.validates_format_of_email_field_options = validates_format_of_email_field_options.merge(options)
75
+ end
76
+
77
+ # A hash of options for the validates_uniqueness_of call for the email field. Allows you to change this however you want.
78
+ #
79
+ # <b>Keep in mind this is ruby. I wanted to keep this as flexible as possible, so you can completely replace the hash or
80
+ # merge options into it. Checkout the convenience function merge_validates_uniqueness_of_email_field_options to merge
81
+ # options.</b>
82
+ #
83
+ # * <tt>Default:</tt> {:case_sensitive => false, :scope => validations_scope, :if => "#{email_field}_changed?".to_sym}
84
+ # * <tt>Accepts:</tt> Hash of options accepted by validates_uniqueness_of
85
+ def validates_uniqueness_of_email_field_options(value = nil)
86
+ rw_config(:validates_uniqueness_of_email_field_options, value, {:case_sensitive => false, :scope => validations_scope, :if => "#{email_field}_changed?".to_sym})
87
+ end
88
+ alias_method :validates_uniqueness_of_email_field_options=, :validates_uniqueness_of_email_field_options
89
+
90
+ # See merge_validates_length_of_email_field_options. The same thing except for validates_uniqueness_of_email_field_options.
91
+ def merge_validates_uniqueness_of_email_field_options(options = {})
92
+ self.validates_uniqueness_of_email_field_options = validates_uniqueness_of_email_field_options.merge(options)
93
+ end
94
+ end
95
+
96
+ # All methods relating to the email field
97
+ module Methods
98
+ def self.included(klass)
99
+ klass.class_eval do
100
+ if validate_email_field && email_field
101
+ validates_length_of email_field, validates_length_of_email_field_options
102
+ validates_format_of email_field, validates_format_of_email_field_options
103
+ validates_uniqueness_of email_field, validates_uniqueness_of_email_field_options
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end