clearance 2.6.2 → 2.7.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: 830820687a4cbb2e63c535692a8bbc1bfee75f747ef351362df0142317251e56
4
- data.tar.gz: 559bc151b6cf7669f13c113c16e4275dbd687fe4c3daf77bb17e288bd982548e
3
+ metadata.gz: f43e65fb98c36167f024899806818f771cabf396d1c1e147f4a21d1bdccb37dd
4
+ data.tar.gz: 42a88e8b50b98b5414b923fda5775e1998223791ffe2fcee00ca03163c7f9a50
5
5
  SHA512:
6
- metadata.gz: d68f58f9428536f29d68348baaa4e616bd39f713933e986bff2977f5afce6d1fdf42a783f475de869d564a384b1414e737b2e34e63bf8bdb35dee53a1e234bf6
7
- data.tar.gz: 26f780a332edc0358289d87e924749078366d08e9490574e7a5943a61abbe19f16a4cd13dc947f10bddf6733aff3c405aa2e94e33787dd618b9218dd3cc334cb
6
+ metadata.gz: 680e0a4d6cebe218f7d8fffeadebcdcd9a160cb9a562a5cef3f876ad118556d4caa4338b40e3dd0135e3ee89e47a8034593d6131ee8eeb4ec7f47062b1aafe3a
7
+ data.tar.gz: cbc137fa5f3f722f28f99c1537909ed27b3b54e5df3aee37b4c7954e2b3e6c452a900f034239072196796171703eb27c3e859edc69b08bb35762bd260f0253a4
@@ -0,0 +1,19 @@
1
+ name: update-templates
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths:
8
+ - README.md
9
+ workflow_dispatch:
10
+
11
+ jobs:
12
+ update-templates:
13
+ permissions:
14
+ contents: write
15
+ pull-requests: write
16
+ pages: write
17
+ uses: thoughtbot/templates/.github/workflows/dynamic-readme.yaml@main
18
+ secrets:
19
+ token: ${{ secrets.GITHUB_TOKEN }}
@@ -16,12 +16,10 @@ jobs:
16
16
  fail-fast: false
17
17
  matrix:
18
18
  gemfile:
19
- - "6.0"
20
19
  - "6.1"
21
20
  - "7.0"
22
21
  - "7.1"
23
22
  ruby:
24
- - "2.7.6"
25
23
  - "3.0.4"
26
24
  - "3.1.2"
27
25
  - "3.2.2"
data/Appraisals CHANGED
@@ -1,9 +1,3 @@
1
- appraise "rails_6.0" do
2
- gem "railties", "~> 6.0.0"
3
- gem "net-smtp", require: false # not bundled in ruby 3.1
4
- gem "psych", "< 4" # psych 4 switched from unsafe load to safe load
5
- end
6
-
7
1
  appraise "rails_6.1" do
8
2
  gem "railties", "~> 6.1.0"
9
3
  gem "net-smtp", require: false # not bundled in ruby 3.1
data/CHANGELOG.md CHANGED
@@ -5,9 +5,17 @@ complete changelog, see the git history for each version via the version links.
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
- [Unreleased]: https://github.com/thoughtbot/clearance/compare/v2.6.2...main
8
+ [Unreleased]: https://github.com/thoughtbot/clearance/compare/v2.7.0...main
9
9
 
10
- ## [2.6.2] January 15, 2024
10
+ ## [2.7.0] - April 19, 2024
11
+ - Call dynamic README workflow (#1004)
12
+ - Drop Ruby 2.76 and Rails 6.0 (#1005)
13
+ - Update specs to match on translations (#1015)
14
+ - Add configuration options for failure method redirects (#1002) Dan Sharp
15
+
16
+ [2.7.0]: https://github.com/thoughtbot/clearance/compare/v2.6.2...v2.7.0
17
+
18
+ ## [2.6.2] - January 15, 2024
11
19
  - Fix typo in Clearance::Token docs (#1000) Gabe Berke-Williams
12
20
  - Add CODEOWNERS file (#994)
13
21
  - Add support for Rails 7.1 (#995) Samuel Giddens
@@ -20,6 +28,8 @@ deprecated active record handling in application.rb (#998)
20
28
  - Replace mentions of NEWS.md with CHANGELOG.md (#982)
21
29
  - Fix broken thoughtbot logo on README.md
22
30
 
31
+ [2.6.2]: https://github.com/thoughtbot/clearance/compare/v2.6.1...v2.6.2
32
+
23
33
  ## [2.6.1] - September 23, 2022
24
34
  - Document how to report security issues
25
35
  - Only update the `env["QUERY_STRING"]` if the `as` parameter is present in
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- clearance (2.6.2)
4
+ clearance (2.7.0)
5
5
  actionmailer (>= 5.0)
6
6
  activemodel (>= 5.0)
7
7
  activerecord (>= 5.0)
@@ -110,8 +110,8 @@ GEM
110
110
  factory_bot (~> 6.2.0)
111
111
  railties (>= 5.0.0)
112
112
  ffi (1.16.3)
113
- ffi-compiler (1.0.1)
114
- ffi (>= 1.0.0)
113
+ ffi-compiler (1.3.2)
114
+ ffi (>= 1.15.5)
115
115
  rake
116
116
  globalid (1.2.1)
117
117
  activesupport (>= 6.1)
@@ -131,14 +131,14 @@ GEM
131
131
  mini_mime (1.1.2)
132
132
  mini_portile2 (2.8.0)
133
133
  minitest (5.15.0)
134
- net-imap (0.4.9)
134
+ net-imap (0.4.10)
135
135
  date
136
136
  net-protocol
137
137
  net-pop (0.1.2)
138
138
  net-protocol
139
139
  net-protocol (0.2.2)
140
140
  timeout
141
- net-smtp (0.4.0)
141
+ net-smtp (0.5.0)
142
142
  net-protocol
143
143
  nokogiri (1.13.6)
144
144
  mini_portile2 (~> 2.8.0)
@@ -171,7 +171,7 @@ GEM
171
171
  thor (~> 1.0)
172
172
  zeitwerk (~> 2.5)
173
173
  rainbow (3.1.1)
174
- rake (13.0.6)
174
+ rake (13.1.0)
175
175
  regexp_parser (2.5.0)
176
176
  rexml (3.2.5)
177
177
  rspec-core (3.11.0)
data/README.md CHANGED
@@ -19,7 +19,7 @@ monitored by contributors.
19
19
 
20
20
  ## Getting Started
21
21
 
22
- Clearance is a Rails engine tested against Rails `>= 6.0` and Ruby `>= 2.7.0`.
22
+ Clearance is a Rails engine tested against Rails `>= 6.1` and Ruby `>= 3.0.0`.
23
23
 
24
24
  You can add it to your Gemfile with:
25
25
 
@@ -59,6 +59,8 @@ Clearance.configure do |config|
59
59
  config.mailer_sender = "reply@example.com"
60
60
  config.password_strategy = Clearance::PasswordStrategies::BCrypt
61
61
  config.redirect_url = "/"
62
+ config.url_after_destroy = nil
63
+ config.url_after_denied_access_when_signed_out = nil
62
64
  config.rotate_csrf_on_sign_in = true
63
65
  config.same_site = nil
64
66
  config.secure_cookie = false
@@ -222,8 +224,16 @@ These "failure" methods are called for signed out sessions:
222
224
  - `application#url_after_denied_access_when_signed_out`
223
225
  - `sessions#url_after_destroy`
224
226
 
225
- They both default to `sign_in_url`. Override this method to change both of their
226
- behavior, or override them individually to just change one.
227
+ You can override the appropriate method in your subclassed controller or you
228
+ can set a configuration value for either of these URLs:
229
+
230
+ - `Clearance.configuration.url_after_denied_access_when_signed_out`
231
+ - `Clearance.configuration.url_after_destroy`
232
+
233
+ Both configurations default to `nil` and if not set will default to
234
+ `sign_in_url` in `sessions_controller.rb` and `authorization.rb` for backwards
235
+ compatibility.
236
+
227
237
 
228
238
  ### Views
229
239
 
@@ -481,21 +491,10 @@ For security issues it's better to contact <security@thoughtbot.com> (See <https
481
491
 
482
492
  ## License
483
493
 
484
- Clearance is copyright © 2009-2019 thoughtbot. It is free software, and may be
494
+ Clearance is copyright © 2009 thoughtbot. It is free software, and may be
485
495
  redistributed under the terms specified in the [`LICENSE`] file.
486
496
 
487
497
  [`LICENSE`]: /LICENSE
488
498
 
489
- ## About thoughtbot
490
-
491
- ![thoughtbot](https://thoughtbot.com/brand_assets/93:44.svg)
492
-
493
- Clearance is maintained and funded by thoughtbot, inc.
494
- The names and logos for thoughtbot are trademarks of thoughtbot, inc.
495
-
496
- We love open source software!
497
- See [our other projects][community] or
498
- [hire us][hire] to design, develop, and grow your product.
499
-
500
- [community]: https://thoughtbot.com/community?utm_source=github
501
- [hire]: https://thoughtbot.com/hire-us?utm_source=github
499
+ <!-- START /templates/footer.md -->
500
+ <!-- END /templates/footer.md -->
@@ -37,7 +37,7 @@ class Clearance::SessionsController < Clearance::BaseController
37
37
  end
38
38
 
39
39
  def url_after_destroy
40
- sign_in_url
40
+ Clearance.configuration.url_after_destroy || sign_in_url
41
41
  end
42
42
 
43
43
  def url_for_signed_in_users
@@ -114,7 +114,7 @@ module Clearance
114
114
  #
115
115
  # @return [String]
116
116
  def url_after_denied_access_when_signed_out
117
- sign_in_url
117
+ Clearance.configuration.url_after_denied_access_when_signed_out || sign_in_url
118
118
  end
119
119
  end
120
120
  end
@@ -68,6 +68,20 @@ module Clearance
68
68
  # @return [String]
69
69
  attr_accessor :redirect_url
70
70
 
71
+ # The default path Clearance will redirect signed out users to.
72
+ # Defaults to `nil` so that the controller will use `sign_in_url`
73
+ # for backwards compatibility. This can be set here instead of overriding
74
+ # the method via an overridden session controller.
75
+ # @return [String]
76
+ attr_accessor :url_after_destroy
77
+
78
+ # The default path Clearance will redirect non-users to when denied access.
79
+ # Defaults to `nil` so that the authorization module will use `sign_in_url`
80
+ # for backwards compatibility. This can be set here instead of overriding
81
+ # the method via an overridden authorization module.
82
+ # @return [String]
83
+ attr_accessor :url_after_denied_access_when_signed_out
84
+
71
85
  # Controls whether Clearance will rotate the CSRF token on sign in.
72
86
  # Defaults to `nil` which generates a warning. Will default to true in
73
87
  # Clearance 2.0.
@@ -140,6 +154,8 @@ module Clearance
140
154
  @same_site = nil
141
155
  @mailer_sender = 'reply@example.com'
142
156
  @redirect_url = '/'
157
+ @url_after_destroy = nil
158
+ @url_after_denied_access_when_signed_out = nil
143
159
  @rotate_csrf_on_sign_in = true
144
160
  @routes = true
145
161
  @secure_cookie = false
@@ -1,3 +1,3 @@
1
1
  module Clearance
2
- VERSION = "2.6.2".freeze
2
+ VERSION = "2.7.0".freeze
3
3
  end
@@ -109,6 +109,34 @@ describe Clearance::Configuration do
109
109
  end
110
110
  end
111
111
 
112
+ context "when no url_after_destroy value specified" do
113
+ it "returns nil as the default" do
114
+ expect(Clearance::Configuration.new.url_after_destroy).to be_nil
115
+ end
116
+ end
117
+
118
+ context "when url_after_destroy value is specified" do
119
+ it "returns the url_after_destroy value" do
120
+ Clearance.configure { |config| config.url_after_destroy = "/redirect" }
121
+
122
+ expect(Clearance.configuration.url_after_destroy).to eq "/redirect"
123
+ end
124
+ end
125
+
126
+ context "when no url_after_denied_access_when_signed_out value specified" do
127
+ it "returns nil as the default" do
128
+ expect(Clearance::Configuration.new.url_after_denied_access_when_signed_out).to be_nil
129
+ end
130
+ end
131
+
132
+ context "when url_after_denied_access_when_signed_out value is specified" do
133
+ it "returns the url_after_denied_access_when_signed_out value" do
134
+ Clearance.configure { |config| config.url_after_denied_access_when_signed_out = "/redirect" }
135
+
136
+ expect(Clearance.configuration.url_after_denied_access_when_signed_out).to eq "/redirect"
137
+ end
138
+ end
139
+
112
140
  context "when specifying sign in guards" do
113
141
  it "returns the stack with added guards" do
114
142
  DummyGuard = Class.new
@@ -33,7 +33,7 @@ describe Clearance::PasswordsController do
33
33
  }
34
34
 
35
35
  email = ActionMailer::Base.deliveries.last
36
- expect(email.subject).to match(/change your password/i)
36
+ expect(email.subject).to match(translated_string("passwords.edit.title"))
37
37
  end
38
38
 
39
39
  it "re-renders the page when turbo is enabled" do
@@ -53,7 +53,7 @@ describe Clearance::PasswordsController do
53
53
  password: {},
54
54
  }
55
55
 
56
- expect(flash.now[:alert]).to match(/email can't be blank/i)
56
+ expect(flash.now[:alert]).to match(translated_string("flashes.failure_when_missing_email"))
57
57
  expect(response).to render_template(:new)
58
58
  end
59
59
 
@@ -74,7 +74,7 @@ describe Clearance::PasswordsController do
74
74
  },
75
75
  }
76
76
 
77
- expect(flash.now[:alert]).to match(/email can't be blank/i)
77
+ expect(flash.now[:alert]).to match(translated_string("flashes.failure_when_missing_email"))
78
78
  expect(response).to render_template(:new)
79
79
  end
80
80
 
@@ -164,7 +164,7 @@ describe Clearance::PasswordsController do
164
164
  }
165
165
 
166
166
  expect(response).to render_template(:new)
167
- expect(flash.now[:alert]).to match(/double check the URL/i)
167
+ expect(flash.now[:alert]).to match(translated_string("flashes.failure_when_forbidden"))
168
168
  end
169
169
  end
170
170
 
@@ -178,7 +178,7 @@ describe Clearance::PasswordsController do
178
178
  }
179
179
 
180
180
  expect(response).to render_template(:new)
181
- expect(flash.now[:alert]).to match(/double check the URL/i)
181
+ expect(flash.now[:alert]).to match(translated_string("flashes.failure_when_forbidden"))
182
182
  end
183
183
  end
184
184
 
@@ -278,7 +278,7 @@ describe Clearance::PasswordsController do
278
278
  new_password: "",
279
279
  )
280
280
 
281
- expect(flash.now[:alert]).to match(/password can't be blank/i)
281
+ expect(flash.now[:alert]).to match(translated_string("flashes.failure_after_update"))
282
282
  expect(response).to have_http_status(:unprocessable_entity)
283
283
  expect(response).to render_template(:edit)
284
284
  end
@@ -58,7 +58,7 @@ describe PermissionsController do
58
58
  it "denies access to show and display a flash message" do
59
59
  get :show
60
60
 
61
- expect(flash[:alert]).to match(/^Please sign in to continue/)
61
+ expect(flash[:alert]).to match(translated_string("flashes.failure_when_not_signed_in"))
62
62
  end
63
63
  end
64
64
 
@@ -41,7 +41,7 @@ describe Clearance::SessionsController do
41
41
  }
42
42
 
43
43
  expect(response).to render_template(:new)
44
- expect(flash[:alert]).to match(/^Bad email or password/)
44
+ expect(flash[:alert]).to match(translated_string("flashes.failure_after_create"))
45
45
  end
46
46
  end
47
47
 
@@ -118,6 +118,12 @@ describe Clearance::SessionsController do
118
118
  end
119
119
 
120
120
  describe "on DELETE to #destroy" do
121
+ let(:configured_redirect_url) { nil }
122
+
123
+ before do
124
+ Clearance.configure { |config| config.url_after_destroy = configured_redirect_url }
125
+ end
126
+
121
127
  context "given a signed out user" do
122
128
  before do
123
129
  sign_out
@@ -126,6 +132,12 @@ describe Clearance::SessionsController do
126
132
 
127
133
  it { should redirect_to_url_after_destroy }
128
134
  it { expect(response).to have_http_status(:see_other) }
135
+
136
+ context "when the custom redirect URL is set" do
137
+ let(:configured_redirect_url) { "/redirected" }
138
+
139
+ it { should redirect_to(configured_redirect_url) }
140
+ end
129
141
  end
130
142
 
131
143
  context "with a cookie" do
@@ -145,6 +157,12 @@ describe Clearance::SessionsController do
145
157
  it "should unset the current user" do
146
158
  expect(request.env[:clearance].current_user).to be_nil
147
159
  end
160
+
161
+ context "when the custom redirect URL is set" do
162
+ let(:configured_redirect_url) { "/redirected" }
163
+
164
+ it { should redirect_to(configured_redirect_url) }
165
+ end
148
166
  end
149
167
  end
150
168
  end
@@ -0,0 +1,13 @@
1
+ module HTMLEscapeHelper
2
+ def translated_string(key)
3
+ if Rails.version >= "7.0"
4
+ ERB::Util.html_escape_once(I18n.t(key))
5
+ else
6
+ I18n.t(key)
7
+ end
8
+ end
9
+ end
10
+
11
+ RSpec.configure do |config|
12
+ config.include HTMLEscapeHelper
13
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clearance
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.2
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Croak
@@ -26,7 +26,7 @@ authors:
26
26
  autorequire:
27
27
  bindir: bin
28
28
  cert_chain: []
29
- date: 2024-01-15 00:00:00.000000000 Z
29
+ date: 2024-04-19 00:00:00.000000000 Z
30
30
  dependencies:
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: bcrypt
@@ -146,6 +146,7 @@ extra_rdoc_files:
146
146
  - README.md
147
147
  files:
148
148
  - ".erb-lint.yml"
149
+ - ".github/workflows/dynamic-readme.yml"
149
150
  - ".github/workflows/tests.yml"
150
151
  - ".gitignore"
151
152
  - ".yardopts"
@@ -182,10 +183,6 @@ files:
182
183
  - config/routes.rb
183
184
  - db/migrate/20110111224543_create_clearance_users.rb
184
185
  - db/schema.rb
185
- - gemfiles/rails_5.0.gemfile
186
- - gemfiles/rails_5.1.gemfile
187
- - gemfiles/rails_5.2.gemfile
188
- - gemfiles/rails_6.0.gemfile
189
186
  - gemfiles/rails_6.1.gemfile
190
187
  - gemfiles/rails_7.0.gemfile
191
188
  - gemfiles/rails_7.1.gemfile
@@ -294,6 +291,7 @@ files:
294
291
  - spec/support/fake_model_with_password_strategy.rb
295
292
  - spec/support/fake_model_without_password_strategy.rb
296
293
  - spec/support/generator_spec_helpers.rb
294
+ - spec/support/html_escape_helper.rb
297
295
  - spec/support/request_with_remember_token.rb
298
296
  - spec/views/view_helpers_spec.rb
299
297
  homepage: https://github.com/thoughtbot/clearance
@@ -316,7 +314,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
316
314
  - !ruby/object:Gem::Version
317
315
  version: '0'
318
316
  requirements: []
319
- rubygems_version: 3.1.6
317
+ rubygems_version: 3.3.7
320
318
  signing_key:
321
319
  specification_version: 4
322
320
  summary: Rails authentication & authorization with email & password.
@@ -1,21 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "addressable"
6
- gem "ammeter"
7
- gem "appraisal"
8
- gem "capybara", ">= 2.6.2", "< 3.33.0"
9
- gem "database_cleaner"
10
- gem "erb_lint", require: false
11
- gem "factory_bot_rails"
12
- gem "nokogiri"
13
- gem "pry", require: false
14
- gem "rails-controller-testing"
15
- gem "rspec-rails", "~> 3.1"
16
- gem "shoulda-matchers"
17
- gem "sqlite3", "~> 1.3.13"
18
- gem "timecop"
19
- gem "railties", "~> 5.0"
20
-
21
- gemspec path: "../"
@@ -1,21 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "addressable"
6
- gem "ammeter"
7
- gem "appraisal"
8
- gem "capybara"
9
- gem "database_cleaner"
10
- gem "erb_lint", require: false
11
- gem "factory_bot_rails"
12
- gem "nokogiri"
13
- gem "pry", require: false
14
- gem "rails-controller-testing"
15
- gem "rspec-rails"
16
- gem "shoulda-matchers"
17
- gem "sqlite3"
18
- gem "timecop"
19
- gem "railties", "~> 5.1"
20
-
21
- gemspec path: "../"
@@ -1,21 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "addressable"
6
- gem "ammeter"
7
- gem "appraisal"
8
- gem "capybara"
9
- gem "database_cleaner"
10
- gem "erb_lint", require: false
11
- gem "factory_bot_rails"
12
- gem "nokogiri"
13
- gem "pry", require: false
14
- gem "rails-controller-testing"
15
- gem "rspec-rails"
16
- gem "shoulda-matchers"
17
- gem "sqlite3"
18
- gem "timecop"
19
- gem "railties", "~> 5.2"
20
-
21
- gemspec path: "../"
@@ -1,23 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "addressable"
6
- gem "ammeter"
7
- gem "appraisal"
8
- gem "capybara"
9
- gem "database_cleaner"
10
- gem "erb_lint", require: false
11
- gem "factory_bot_rails"
12
- gem "nokogiri"
13
- gem "pry", require: false
14
- gem "rails-controller-testing"
15
- gem "rspec-rails"
16
- gem "shoulda-matchers"
17
- gem "sqlite3"
18
- gem "timecop"
19
- gem "railties", "~> 6.0.0"
20
- gem "net-smtp", require: false
21
- gem "psych", "< 4"
22
-
23
- gemspec path: "../"