clearance 2.6.2 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
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: "../"