challah 1.6.1 → 2.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/README.md +5 -38
  4. data/VERSION +1 -1
  5. data/app/controllers/sessions_controller.rb +11 -10
  6. data/app/models/authorization.rb +2 -0
  7. data/lib/challah/audit.rb +38 -36
  8. data/lib/challah/authenticators/api_key.rb +4 -2
  9. data/lib/challah/authenticators/password.rb +3 -1
  10. data/lib/challah/authenticators.rb +5 -3
  11. data/lib/challah/concerns/authorizeable.rb +4 -0
  12. data/lib/challah/concerns/user/attributeable.rb +35 -33
  13. data/lib/challah/concerns/user/authenticateable.rb +2 -0
  14. data/lib/challah/concerns/user/authorizable.rb +16 -12
  15. data/lib/challah/concerns/user/findable.rb +13 -10
  16. data/lib/challah/concerns/user/passwordable.rb +5 -3
  17. data/lib/challah/concerns/user/provideable.rb +22 -20
  18. data/lib/challah/concerns/user/statusable.rb +3 -21
  19. data/lib/challah/concerns/user/validateable.rb +3 -1
  20. data/lib/challah/concerns/userable.rb +1 -3
  21. data/lib/challah/controller.rb +69 -65
  22. data/lib/challah/cookie_store.rb +7 -5
  23. data/lib/challah/encrypter.rb +4 -2
  24. data/lib/challah/engine.rb +5 -18
  25. data/lib/challah/providers/password_provider.rb +9 -7
  26. data/lib/challah/providers.rb +3 -1
  27. data/lib/challah/random.rb +6 -4
  28. data/lib/challah/routes.rb +6 -6
  29. data/lib/challah/session.rb +27 -25
  30. data/lib/challah/signup.rb +5 -3
  31. data/lib/challah/simple_cookie_store.rb +82 -80
  32. data/lib/challah/techniques/api_key_technique.rb +2 -2
  33. data/lib/challah/techniques/password_technique.rb +2 -1
  34. data/lib/challah/techniques/token_technique.rb +1 -1
  35. data/lib/challah/techniques.rb +2 -0
  36. data/lib/challah/test.rb +6 -0
  37. data/lib/challah/validators/email_validator.rb +2 -0
  38. data/lib/challah/validators/password_validator.rb +5 -3
  39. data/lib/challah/version.rb +3 -1
  40. data/lib/challah.rb +2 -5
  41. data/lib/generators/challah_generator.rb +2 -8
  42. data/lib/generators/templates/{migration.rb → migration.erb} +3 -6
  43. metadata +42 -19
  44. data/lib/challah/plugins.rb +0 -54
@@ -5,7 +5,7 @@ module Challah
5
5
  attr_accessor :user_model
6
6
 
7
7
  def initialize(session)
8
- @key = session.key? ? session.key : nil
8
+ @key = session.key? ? session.key : nil
9
9
  end
10
10
 
11
11
  def authenticate
@@ -16,7 +16,7 @@ module Challah
16
16
  unless @key.to_s.blank?
17
17
  user = user_model.find_by_api_key(@key)
18
18
 
19
- if user and user.valid_session?
19
+ if user && user.valid_session?
20
20
  return user
21
21
  end
22
22
  end
@@ -12,7 +12,7 @@ module Challah
12
12
 
13
13
  # if we can successfully authenticate, return a User instance, otherwise nil
14
14
  def authenticate
15
- if username? and password?
15
+ if username? && password?
16
16
  user = user_model.find_for_session(username)
17
17
 
18
18
  if user
@@ -49,5 +49,6 @@ module Challah
49
49
  def username
50
50
  @username
51
51
  end
52
+
52
53
  end
53
54
  end
@@ -43,7 +43,7 @@ module Challah
43
43
 
44
44
  private
45
45
 
46
- attr_reader :token
46
+ attr_reader :token
47
47
 
48
48
  end
49
49
  end
@@ -54,6 +54,7 @@ module Challah
54
54
  # +ApiKeyTechnique+.
55
55
  #
56
56
  module Techniques
57
+
57
58
  # Register a new technique class. Pass in a name as an identifier, and the class to use
58
59
  # when attempting to authenticate.
59
60
  def register_technique(name, klass)
@@ -69,5 +70,6 @@ module Challah
69
70
  def techniques
70
71
  @techniques.dup
71
72
  end
73
+
72
74
  end
73
75
  end
data/lib/challah/test.rb CHANGED
@@ -1,7 +1,9 @@
1
1
  module Challah
2
+
2
3
  # Used to persist session data in test mode instead of using cookies. Stores the session
3
4
  # data lazily in a global var, accessible across the testing environment.
4
5
  class TestSessionStore
6
+
5
7
  def initialize(session = nil)
6
8
  @session = session
7
9
  end
@@ -22,6 +24,7 @@ module Challah
22
24
  $challah_test_session = "#{ token }@#{ user_id }"
23
25
  true
24
26
  end
27
+
25
28
  end
26
29
 
27
30
  module Testing
@@ -39,17 +42,20 @@ module Challah
39
42
  alias_method :logout, :signout
40
43
 
41
44
  end
45
+
42
46
  end
43
47
 
44
48
  if defined?(ActionController::TestCase)
45
49
  Challah.options[:storage_class] = Challah::TestSessionStore
46
50
 
47
51
  class ActionController::TestCase
52
+
48
53
  include Challah::Testing
49
54
 
50
55
  setup do
51
56
  $challah_test_session = nil
52
57
  end
58
+
53
59
  end
54
60
  end
55
61
 
@@ -6,6 +6,7 @@ module Challah
6
6
  # validates :email, :presence => true, :email => true
7
7
  # end
8
8
  class EmailValidator < ActiveModel::EachValidator
9
+
9
10
  # Called automatically by ActiveModel validation..
10
11
  def validate_each(record, attribute, value)
11
12
  unless value =~ EmailValidator.pattern
@@ -17,5 +18,6 @@ module Challah
17
18
  def self.pattern
18
19
  /\b[A-Z0-9._%a-z\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,}\z/
19
20
  end
21
+
20
22
  end
21
23
  end
@@ -1,9 +1,10 @@
1
1
  module Challah
2
2
  class PasswordValidator < ActiveModel::Validator
3
+
3
4
  # Check to make sure a valid password and confirmation were set
4
5
  def validate(record)
5
- if record.password_provider? or options[:force]
6
- if record.new_record? and record.password.to_s.blank? and !record.password_changed?
6
+ if record.password_provider? || options[:force]
7
+ if record.new_record? && record.password.to_s.blank? && !record.password_changed?
7
8
  record.errors.add :password, :blank
8
9
  elsif record.password_changed?
9
10
  if record.password.to_s.size < 4
@@ -14,5 +15,6 @@ module Challah
14
15
  end
15
16
  end
16
17
  end
18
+
17
19
  end
18
- end
20
+ end
@@ -1,5 +1,7 @@
1
1
  module Challah
2
+
2
3
  unless defined?(Challah::VERSION)
3
- VERSION = File.read(File.expand_path('../../../VERSION', __FILE__)).strip.freeze
4
+ VERSION = File.read(File.expand_path("../../../VERSION", __FILE__)).strip.freeze
4
5
  end
6
+
5
7
  end
data/lib/challah.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "challah/version"
2
2
 
3
3
  module Challah
4
+
4
5
  autoload :Audit, "challah/audit"
5
6
 
6
7
  autoload :CookieStore, "challah/cookie_store"
@@ -9,7 +10,6 @@ module Challah
9
10
  autoload :Authenticators, "challah/authenticators"
10
11
  autoload :Controller, "challah/controller"
11
12
  autoload :Encrypter, "challah/encrypter"
12
- autoload :Plugins, "challah/plugins"
13
13
  autoload :Providers, "challah/providers"
14
14
  autoload :Random, "challah/random"
15
15
  autoload :Session, "challah/session"
@@ -74,10 +74,6 @@ module Challah
74
74
  register_technique :password, PasswordTechnique
75
75
  register_technique :token, TokenTechnique
76
76
 
77
- # Set up plugin registering capability
78
- extend Plugins
79
- @plugins ||= {}
80
-
81
77
  # Set up authenticators
82
78
  extend Authenticators
83
79
  @authenticators ||= {}
@@ -91,6 +87,7 @@ module Challah
91
87
  @providers ||= {}
92
88
 
93
89
  register_provider :password, PasswordProvider
90
+
94
91
  end
95
92
 
96
93
  require "challah/engine" if defined?(Rails)
@@ -7,17 +7,11 @@ class ChallahGenerator < Rails::Generators::Base
7
7
  source_root File.expand_path("../templates", __FILE__)
8
8
 
9
9
  def copy_migration
10
- migration_template "migration.rb", "db/migrate/challah_create_users.rb", migration_version: migration_version
11
- end
12
-
13
- def rails5?
14
- Rails.version.start_with? "5"
10
+ migration_template "migration.erb", "db/migrate/challah_create_users.rb", migration_version: migration_version
15
11
  end
16
12
 
17
13
  def migration_version
18
- if rails5?
19
- "[#{ Rails::VERSION::MAJOR }.#{ Rails::VERSION::MINOR }]"
20
- end
14
+ "[#{ Rails::VERSION::MAJOR }.#{ Rails::VERSION::MINOR }]"
21
15
  end
22
16
 
23
17
  end
@@ -10,10 +10,8 @@ class ChallahCreateUsers < ActiveRecord::Migration<%= migration_version %>
10
10
  t.datetime :last_session_at
11
11
  t.integer :session_count, default: 0
12
12
  t.integer :failed_auth_count, default: 0
13
- t.integer :created_by, default: 0
14
- t.integer :updated_by, default: 0
15
- t.datetime :created_at
16
- t.datetime :updated_at
13
+ t.bigint :created_by, default: 0
14
+ t.bigint :updated_by, default: 0
17
15
  t.integer :status, default: 0 # defaults to :active
18
16
  t.timestamps null: true
19
17
  end
@@ -24,7 +22,7 @@ class ChallahCreateUsers < ActiveRecord::Migration<%= migration_version %>
24
22
  add_index :users, :api_key
25
23
 
26
24
  create_table :authorizations do |t|
27
- t.integer :user_id
25
+ t.references :user
28
26
  t.string :provider, limit: 50
29
27
  t.string :uid
30
28
  t.string :token, limit: 500
@@ -34,7 +32,6 @@ class ChallahCreateUsers < ActiveRecord::Migration<%= migration_version %>
34
32
  t.timestamps null: true
35
33
  end
36
34
 
37
- add_index :authorizations, :user_id
38
35
  add_index :authorizations, [ :user_id, :provider ]
39
36
  add_index :authorizations, :uid
40
37
  add_index :authorizations, :token
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: challah
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.1
4
+ version: 2.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Tornow
@@ -10,42 +10,48 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-08-17 00:00:00.000000000 Z
13
+ date: 2020-02-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: highline
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - "~>"
20
- - !ruby/object:Gem::Version
21
- version: '1.7'
22
19
  - - ">="
23
20
  - !ruby/object:Gem::Version
24
21
  version: 1.7.1
22
+ - - "<"
23
+ - !ruby/object:Gem::Version
24
+ version: '3'
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
28
28
  requirements:
29
- - - "~>"
30
- - !ruby/object:Gem::Version
31
- version: '1.7'
32
29
  - - ">="
33
30
  - !ruby/object:Gem::Version
34
31
  version: 1.7.1
32
+ - - "<"
33
+ - !ruby/object:Gem::Version
34
+ version: '3'
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: rails
37
37
  requirement: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: 4.2.0
41
+ version: 5.2.0
42
+ - - "<"
43
+ - !ruby/object:Gem::Version
44
+ version: '7'
42
45
  type: :runtime
43
46
  prerelease: false
44
47
  version_requirements: !ruby/object:Gem::Requirement
45
48
  requirements:
46
49
  - - ">="
47
50
  - !ruby/object:Gem::Version
48
- version: 4.2.0
51
+ version: 5.2.0
52
+ - - "<"
53
+ - !ruby/object:Gem::Version
54
+ version: '7'
49
55
  - !ruby/object:Gem::Dependency
50
56
  name: rake
51
57
  requirement: !ruby/object:Gem::Requirement
@@ -94,14 +100,14 @@ dependencies:
94
100
  requirements:
95
101
  - - "~>"
96
102
  - !ruby/object:Gem::Version
97
- version: '4.8'
103
+ version: '5.1'
98
104
  type: :development
99
105
  prerelease: false
100
106
  version_requirements: !ruby/object:Gem::Requirement
101
107
  requirements:
102
108
  - - "~>"
103
109
  - !ruby/object:Gem::Version
104
- version: '4.8'
110
+ version: '5.1'
105
111
  - !ruby/object:Gem::Dependency
106
112
  name: sqlite3
107
113
  requirement: !ruby/object:Gem::Requirement
@@ -130,7 +136,21 @@ dependencies:
130
136
  - - "~>"
131
137
  - !ruby/object:Gem::Version
132
138
  version: '0.2'
133
- description: A simple gem for authorization and session management in Rails.
139
+ - !ruby/object:Gem::Dependency
140
+ name: appraisal
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: Authorization and session management for Rails apps
134
154
  email:
135
155
  - john@johntornow.com
136
156
  - p@rdln.net
@@ -167,7 +187,6 @@ files:
167
187
  - lib/challah/cookie_store.rb
168
188
  - lib/challah/encrypter.rb
169
189
  - lib/challah/engine.rb
170
- - lib/challah/plugins.rb
171
190
  - lib/challah/providers.rb
172
191
  - lib/challah/providers/password_provider.rb
173
192
  - lib/challah/random.rb
@@ -184,14 +203,19 @@ files:
184
203
  - lib/challah/validators/password_validator.rb
185
204
  - lib/challah/version.rb
186
205
  - lib/generators/challah_generator.rb
187
- - lib/generators/templates/migration.rb
206
+ - lib/generators/templates/migration.erb
188
207
  - lib/tasks/crud.rake
189
208
  - lib/tasks/setup.rake
190
209
  - lib/tasks/unpack.rake
191
210
  homepage: https://github.com/jdtornow/challah
192
211
  licenses:
193
212
  - MIT
194
- metadata: {}
213
+ metadata:
214
+ bug_tracker_uri: https://github.com/jdtornow/challah/issues
215
+ changelog_uri: https://github.com/jdtornow/challah/releases
216
+ homepage_uri: https://github.com/jdtornow/challah
217
+ source_code_uri: https://github.com/jdtornow/challah
218
+ wiki_uri: https://github.com/jdtornow/challah/wiki
195
219
  post_install_message:
196
220
  rdoc_options: []
197
221
  require_paths:
@@ -200,15 +224,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
200
224
  requirements:
201
225
  - - ">="
202
226
  - !ruby/object:Gem::Version
203
- version: 2.2.2
227
+ version: 2.5.0
204
228
  required_rubygems_version: !ruby/object:Gem::Requirement
205
229
  requirements:
206
230
  - - ">="
207
231
  - !ruby/object:Gem::Version
208
232
  version: 1.8.11
209
233
  requirements: []
210
- rubyforge_project:
211
- rubygems_version: 2.7.6
234
+ rubygems_version: 3.1.2
212
235
  signing_key:
213
236
  specification_version: 4
214
237
  summary: Rails authentication and sessions
@@ -1,54 +0,0 @@
1
- module Challah
2
- # Plugins are used to extend the functionality of Challah.
3
- module Plugins
4
- # A simple DSL for registering a plugin
5
- class Plugin
6
- attr_reader :active_record, :action_controller, :user_extensions, :user_init_methods
7
-
8
- def initialize
9
- @active_record ||= []
10
- @action_controller ||= []
11
- @user_extensions ||= []
12
- @user_init_methods ||= []
13
- end
14
-
15
- # When active_record or action_controller is loaded, run the given block
16
- def on_load(framework, &block)
17
- return unless [ :active_record, :action_controller ].include?(framework)
18
- instance_variable_get("@#{framework}") << block
19
- end
20
-
21
- # Pass a module name to include it in the base User model after challah_user
22
- # is run
23
- def extend_user(module_name, init_method = nil)
24
- @user_extensions << module_name
25
- @user_init_methods << init_method unless init_method.nil?
26
- end
27
- end
28
-
29
- # Register a new plugin.
30
- def register_plugin(name, &block)
31
- plugin = Plugin.new
32
- plugin.instance_eval(&block)
33
- @plugins[name] = plugin
34
- end
35
-
36
- # Get the list of all plugins
37
- def plugins
38
- @plugins
39
- end
40
- end
41
-
42
- # Loop through all registered plugins and extend User functionality.
43
- def self.include_user_plugins!
44
- Challah.plugins.values.each do |plugin|
45
- plugin.user_extensions.each do |mod|
46
- Challah.user.send(:extend, mod)
47
- end
48
-
49
- plugin.user_init_methods.each do |method_name|
50
- Challah.user.send(method_name)
51
- end
52
- end
53
- end
54
- end