rodauth-rails 1.15.2 → 2.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4347261e8bb70c5e8f8cd218b0485d335eae250b8efc51677acb0bb7625e655b
4
- data.tar.gz: d00e315a95b9c8659c29eec2e1722d95c6b77d7804682c3ad0c70058df1ee709
3
+ metadata.gz: d494712a7d9e548251e812cfb962c74c170663905f4b07f239d7c32f01f2a4c3
4
+ data.tar.gz: 064204c2a262f5cae1360d8509623595a333acb43cbf421f0bfa45bb6b7de36a
5
5
  SHA512:
6
- metadata.gz: 7218d821e3d83d779c40c1ae6a5a0aef7d1ff1e46bb207805f23daf1480f0cdbef19f7e24165d21fc8647bfe9c64973a162d83028a145df60e63c5d2b67ba915
7
- data.tar.gz: c0a318f879f6cf35daade60784e7cc896d061d14c93281475d33831aa95e9377d3664cb3d7e86ab32ed99984ee9f477f37282c204860c8a8cf9ed5ee3cf7ad84
6
+ metadata.gz: 5a8a072ee2d3f615f14df9484ff04a1d1f85ebbef0aa0273087fca7042d437ac04e8628392e56b81c4ab23940aa7a3b4ca324899d53079d51bd5dda296429285
7
+ data.tar.gz: a79173adc2a6edd193e8cdb5b11124387f3cc0ab8c001032fe564ed0824ef0a007b5bcadeab98800c149ad303aa5f032359e0cca917c2491a34c8c10ebc0dc22
data/README.md CHANGED
@@ -90,17 +90,15 @@ $ rails generate rodauth:install users
90
90
  If you want Rodauth endpoints to be exposed via [JSON API]:
91
91
 
92
92
  ```sh
93
- $ rails generate rodauth:install --json # regular authentication using the Rails session
93
+ $ rails generate rodauth:install --json # cookied-based authentication
94
94
  # or
95
- $ rails generate rodauth:install --jwt # token authentication via the "Authorization" header
96
- $ bundle add jwt
95
+ $ rails generate rodauth:install --jwt # token-based authentication
97
96
  ```
98
97
 
99
98
  To use Argon2 instead of bcrypt for password hashing:
100
99
 
101
100
  ```sh
102
101
  $ rails generate rodauth:install --argon2
103
- $ bundle add argon2
104
102
  ```
105
103
 
106
104
  ## Usage
@@ -672,6 +670,11 @@ $ rails middleware
672
670
  # run MyApp::Application.routes
673
671
  ```
674
672
 
673
+ > [!NOTE]
674
+ > If you're using a middleware that should be called before Rodauth routes, make sure that middleware is inserted *before* Rodauth.
675
+ >
676
+ > For example, if you're using [Rack::Attack] to throttle signups, make sure you put the `rack-attack` gem *above* `rodauth-rails` in the Gemfile, so that its middleware is inserted first.
677
+
675
678
  ### Roda app
676
679
 
677
680
  The [`Rodauth::Rails::App`](/lib/rodauth/rails/app.rb) class is a [Roda]
@@ -795,3 +798,4 @@ conduct](CODE_OF_CONDUCT.md).
795
798
  [inheritance]: http://rodauth.jeremyevans.net/rdoc/files/doc/guides/share_configuration_rdoc.html
796
799
  [library]: https://github.com/jeremyevans/rodauth#label-Using+Rodauth+as+a+Library
797
800
  [restoring defaults]: https://github.com/janko/rodauth-rails/wiki/Restoring-Rodauth-Defaults
801
+ [Rack::Attack]: https://github.com/rack/rack-attack
@@ -38,6 +38,22 @@ module Rodauth
38
38
  template "app/misc/rodauth_main.rb"
39
39
  end
40
40
 
41
+ def add_gems
42
+ if activerecord? && !sequel?
43
+ gem "sequel-activerecord_connection", "~> 2.0", comment: "Enables Sequel to use Active Record's database connection"
44
+ gem "after_commit_everywhere", "~> 1.1", comment: "Required for Sequel's transaction hooks to work in all cases (on Active Record < 7.2)" if ActiveRecord.version < Gem::Version.new("7.2")
45
+ end
46
+ if argon2?
47
+ gem "argon2", "~> 2.3", comment: "Used by Rodauth for password hashing"
48
+ else
49
+ gem "bcrypt", "~> 3.1", comment: "Used by Rodauth for password hashing"
50
+ end
51
+ if jwt?
52
+ gem "jwt", "~> 2.9", comment: "Used by Rodauth for JWT support"
53
+ end
54
+ gem "tilt", "~> 2.4", comment: "Used by Rodauth for rendering built-in view and email templates"
55
+ end
56
+
41
57
  def create_rodauth_controller
42
58
  template "app/controllers/rodauth_controller.rb"
43
59
  end
@@ -55,7 +71,7 @@ module Rodauth
55
71
  end
56
72
 
57
73
  def show_instructions
58
- readme "INSTRUCTIONS" if behavior == :invoke && !api_only?
74
+ readme "INSTRUCTIONS" if behavior == :invoke && !json? && !jwt?
59
75
  end
60
76
 
61
77
  private
@@ -83,11 +83,7 @@ module Rodauth
83
83
  end
84
84
 
85
85
  def erb_eval(content)
86
- if ERB.version[/\d+\.\d+\.\d+/].to_s >= "2.2.0"
87
- ERB.new(content, trim_mode: "-").result(binding)
88
- else
89
- ERB.new(content, 0, "-").result(binding)
90
- end
86
+ ERB.new(content, trim_mode: "-").result(binding)
91
87
  end
92
88
 
93
89
  def emails
@@ -7,6 +7,7 @@ create_table :<%= table_prefix.pluralize %><%= primary_key_type %> do |t|
7
7
  <% case activerecord_adapter -%>
8
8
  <% when "postgresql" -%>
9
9
  t.citext :email, null: false
10
+ t.check_constraint "email ~ '^[^,;@ \r\n]+@[^,@; \r\n]+\.[^,@; \r\n]+$'", name: "valid_email"
10
11
  <% else -%>
11
12
  t.string :email, null: false
12
13
  <% end -%>
@@ -54,11 +54,7 @@ module Rodauth
54
54
  end
55
55
 
56
56
  def erb_eval(content)
57
- if ERB.version[/\d+\.\d+\.\d+/].to_s >= "2.2.0"
58
- ERB.new(content, trim_mode: "-").result(binding)
59
- else
60
- ERB.new(content, 0, "-").result(binding)
61
- end
57
+ ERB.new(content, trim_mode: "-").result(binding)
62
58
  end
63
59
 
64
60
  def migration_chunk(feature)
@@ -132,11 +128,7 @@ module Rodauth
132
128
  end
133
129
 
134
130
  def default_primary_key_type
135
- if ActiveRecord.version >= Gem::Version.new("5.1") && activerecord_adapter != "sqlite3"
136
- :bigint
137
- else
138
- :integer
139
- end
131
+ activerecord_adapter == "sqlite3" ? :integer : :bigint
140
132
  end
141
133
 
142
134
  # Active Record 7+ sets default precision to 6 for timestamp columns,
@@ -52,7 +52,6 @@ module Rodauth
52
52
  copy_file view_location(view), "app/views/#{directory}/#{view}.html.erb" do |content|
53
53
  content = content.gsub("rodauth.", "rodauth(:#{configuration_name}).") if configuration_name
54
54
  content = content.gsub("rodauth/", "#{directory}/")
55
- content = form_helpers_compatibility(content) if ActionView.version < Gem::Version.new("5.1")
56
55
  content
57
56
  end
58
57
  end
@@ -103,16 +102,6 @@ module Rodauth
103
102
  options[:name]&.to_sym
104
103
  end
105
104
 
106
- # We need to use the *_tag helpers on versions lower than Rails 5.1.
107
- def form_helpers_compatibility(content)
108
- content
109
- .gsub(/form_with url: (.+) do \|form\|/, 'form_tag \1 do')
110
- .gsub(/form\.(label|submit)/, '\1_tag')
111
- .gsub(/form\.(email|password|text|telephone|hidden)_field (\S+), value:/, '\1_field_tag \2,')
112
- .gsub(/form\.radio_button (\S+), (\S+),/, 'radio_button_tag \1, \2, false,')
113
- .gsub(/form\.check_box (\S+), (.+) /, 'check_box_tag \1, "t", false, \2 ')
114
- end
115
-
116
105
  def view_location(view)
117
106
  if tailwind?
118
107
  "app/views/rodauth/tailwind/#{view}.html.erb"
@@ -4,14 +4,10 @@ module Rodauth
4
4
  def self.included(controller)
5
5
  # ActionController::API doesn't have helper methods
6
6
  if controller.respond_to?(:helper_method)
7
- controller.helper_method :rodauth, :current_account
7
+ controller.helper_method :rodauth
8
8
  end
9
9
  end
10
10
 
11
- def current_account(name = nil)
12
- rodauth(name).rails_account
13
- end
14
-
15
11
  def rodauth(name = nil)
16
12
  request.env.fetch ["rodauth", *name].join(".")
17
13
  end
@@ -80,7 +80,7 @@ module Rodauth
80
80
  response
81
81
  end
82
82
 
83
- if ActionPack.version >= Gem::Version.new("8.0.0.beta1")
83
+ if ActionPack.version >= Gem::Version.new("8.0")
84
84
  def rails_benchmark(&block)
85
85
  ActiveSupport::Benchmark.realtime(:float_millisecond, &block)
86
86
  end
@@ -1,5 +1,5 @@
1
1
  module Rodauth
2
2
  module Rails
3
- VERSION = "1.15.2"
3
+ VERSION = "2.0.0"
4
4
  end
5
5
  end
data/lib/rodauth/rails.rb CHANGED
@@ -7,10 +7,9 @@ module Rodauth
7
7
  class Error < StandardError
8
8
  end
9
9
 
10
- # This allows the developer to avoid loading Rodauth at boot time.
10
+ # This allows avoiding loading Rodauth at boot time.
11
11
  autoload :App, "rodauth/rails/app"
12
12
  autoload :Auth, "rodauth/rails/auth"
13
- autoload :Model, "rodauth/rails/model"
14
13
 
15
14
  @app = nil
16
15
  @middleware = true
@@ -66,15 +65,6 @@ module Rodauth
66
65
  end
67
66
  end
68
67
 
69
- def authenticated(name = nil, &condition)
70
- warn "Rodauth::Rails.authenticated has been deprecated in favor of Rodauth::Rails.authenticate, which additionally requires existence of the account record."
71
- lambda do |request|
72
- rodauth = request.env.fetch ["rodauth", *name].join(".")
73
- rodauth.require_authentication
74
- rodauth.authenticated? && (condition.nil? || condition.call(rodauth))
75
- end
76
- end
77
-
78
68
  if ::Rails.gem_version >= Gem::Version.new("5.2")
79
69
  def secret_key_base
80
70
  ::Rails.application.secret_key_base
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.homepage = "https://github.com/janko/rodauth-rails"
12
12
  spec.license = "MIT"
13
13
 
14
- spec.required_ruby_version = ">= 2.5"
14
+ spec.required_ruby_version = ">= 2.6"
15
15
 
16
16
  spec.files = Dir["README.md", "LICENSE.txt", "lib/**/*", "*.gemspec"]
17
17
  spec.require_paths = ["lib"]
@@ -19,11 +19,10 @@ Gem::Specification.new do |spec|
19
19
  spec.add_dependency "railties", ">= 5.0", "< 8.1"
20
20
  spec.add_dependency "rodauth", "~> 2.36"
21
21
  spec.add_dependency "roda", "~> 3.76"
22
- spec.add_dependency "sequel-activerecord_connection", "~> 1.1"
23
22
  spec.add_dependency "rodauth-model", "~> 0.2"
24
- spec.add_dependency "tilt"
25
- spec.add_dependency "bcrypt"
26
23
 
24
+ spec.add_development_dependency "tilt"
25
+ spec.add_development_dependency "bcrypt", "~> 3.1"
27
26
  spec.add_development_dependency "jwt"
28
27
  spec.add_development_dependency "rotp"
29
28
  spec.add_development_dependency "rqrcode"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rodauth-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.15.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Janko Marohnić
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-08 00:00:00.000000000 Z
11
+ date: 2024-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -58,20 +58,6 @@ dependencies:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '3.76'
61
- - !ruby/object:Gem::Dependency
62
- name: sequel-activerecord_connection
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '1.1'
68
- type: :runtime
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '1.1'
75
61
  - !ruby/object:Gem::Dependency
76
62
  name: rodauth-model
77
63
  requirement: !ruby/object:Gem::Requirement
@@ -93,7 +79,7 @@ dependencies:
93
79
  - - ">="
94
80
  - !ruby/object:Gem::Version
95
81
  version: '0'
96
- type: :runtime
82
+ type: :development
97
83
  prerelease: false
98
84
  version_requirements: !ruby/object:Gem::Requirement
99
85
  requirements:
@@ -104,16 +90,16 @@ dependencies:
104
90
  name: bcrypt
105
91
  requirement: !ruby/object:Gem::Requirement
106
92
  requirements:
107
- - - ">="
93
+ - - "~>"
108
94
  - !ruby/object:Gem::Version
109
- version: '0'
110
- type: :runtime
95
+ version: '3.1'
96
+ type: :development
111
97
  prerelease: false
112
98
  version_requirements: !ruby/object:Gem::Requirement
113
99
  requirements:
114
- - - ">="
100
+ - - "~>"
115
101
  - !ruby/object:Gem::Version
116
- version: '0'
102
+ version: '3.1'
117
103
  - !ruby/object:Gem::Dependency
118
104
  name: jwt
119
105
  requirement: !ruby/object:Gem::Requirement
@@ -352,7 +338,6 @@ files:
352
338
  - lib/rodauth/rails/feature/internal_request.rb
353
339
  - lib/rodauth/rails/feature/render.rb
354
340
  - lib/rodauth/rails/middleware.rb
355
- - lib/rodauth/rails/model.rb
356
341
  - lib/rodauth/rails/railtie.rb
357
342
  - lib/rodauth/rails/tasks.rake
358
343
  - lib/rodauth/rails/tasks/routes.rb
@@ -372,14 +357,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
372
357
  requirements:
373
358
  - - ">="
374
359
  - !ruby/object:Gem::Version
375
- version: '2.5'
360
+ version: '2.6'
376
361
  required_rubygems_version: !ruby/object:Gem::Requirement
377
362
  requirements:
378
363
  - - ">="
379
364
  - !ruby/object:Gem::Version
380
365
  version: '0'
381
366
  requirements: []
382
- rubygems_version: 3.5.11
367
+ rubygems_version: 3.5.22
383
368
  signing_key:
384
369
  specification_version: 4
385
370
  summary: Provides Rails integration for Rodauth authentication framework.
@@ -1,6 +0,0 @@
1
- module Rodauth
2
- module Rails
3
- Model = Rodauth::Model
4
- deprecate_constant :Model
5
- end
6
- end