devise_invitable 2.0.7 → 2.0.9

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: f2a7d1c4ae3cc61e2992fa9920ddd35e6626745dd32333a88e8231fb267e2cb0
4
- data.tar.gz: ee68fbb505a629c391934bee8c644c0ade499333d5c7065745426fd6e419642a
3
+ metadata.gz: b8ff92d4a82378780e01c6d3cfe57ff0808b08d49a619e3a899e94a86e7ec46c
4
+ data.tar.gz: 174e7982212230032987ad9b6b1ed572b98fda73fc0652e095ae71c1b6282436
5
5
  SHA512:
6
- metadata.gz: fd3ead62e8c2246f9246fbac3a2138ea6ff4f1abcf3c577faad920b339f1c1795b54497d03b34f4bc685be6131f62692d2497fbc5d1081e740e0a85d7e1a25c2
7
- data.tar.gz: 0453554d47731a99e931c81dbd44e77eca935ff6ca453172f40f394da84bd1d5a92507aafa881ab491202cee5fa534aef4ba9b2a4ac1fa37327a664c7ceb8e61
6
+ metadata.gz: 25a25c7ec4df1183ef43d399f73cb7a4b661cc33df172d660dd551f658bebce01ac552c837608affeac59aeaaa85b137ad56247278fbe5a436ea15d03131b1e3
7
+ data.tar.gz: 07a394b356fb623ab7a8ca48486acd935ea5c69b86969ccae667d414bc6d7319ec2e5fe90c0cdc8ff2a9f46eace35bfd517df659fc445088f4e43a0f6536590c
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 2.0.9
2
+ - Do not accept expired invitation on password reset ([#897](https://github.com/scambra/devise_invitable/pull/897))
3
+
4
+ ## 2.0.8
5
+ - Fix for turbo stream
6
+
7
+ ## 2.0.7
1
8
  - Allow customizing invalid_token_path_for, the path to redirect users who try to accept with invalid token
2
9
  - Don't override registrations controller in routes if module option is used
3
10
  - Fix typo in spanish translation, add Catalan translation ([#857](https://github.com/scambra/devise_invitable/pull/857))
data/README.rdoc CHANGED
@@ -341,7 +341,7 @@ To accept an invitation with a token use the <tt>accept_invitation!</tt> class m
341
341
  === Callbacks
342
342
 
343
343
  A callback event is fired before and after an invitation is created (User#invite!) or accepted (User#accept_invitation!). For example, in your resource model you can add:
344
-
344
+ # Note: callbacks should be placed after devise: :invitable is specified.
345
345
  before_invitation_created :email_admins
346
346
  after_invitation_accepted :email_invited_by
347
347
 
@@ -31,7 +31,7 @@ class Devise::InvitationsController < DeviseController
31
31
  respond_with resource, location: after_invite_path_for(current_inviter, resource)
32
32
  end
33
33
  else
34
- respond_with_navigational(resource) { render :new, status: :unprocessable_entity }
34
+ respond_with(resource)
35
35
  end
36
36
  end
37
37
 
@@ -63,7 +63,7 @@ class Devise::InvitationsController < DeviseController
63
63
  end
64
64
  else
65
65
  resource.invitation_token = raw_invitation_token
66
- respond_with_navigational(resource) { render :edit, status: :unprocessable_entity }
66
+ respond_with(resource)
67
67
  end
68
68
  end
69
69
 
@@ -14,10 +14,8 @@ fr:
14
14
  legend: Envoyer l’invitation
15
15
  submit_button: Envoyer
16
16
  edit:
17
- header: Confirmation
18
- submit_button: Confirmer
19
- new_password: Mot de passe
20
- new_password_confirmation: Confirmation du mot de passe
17
+ header: Définissez votre mot de passe
18
+ submit_button: Définir mon mot de passe
21
19
  mailer:
22
20
  invitation_instructions:
23
21
  subject: 'Vous avez reçu une invitation'
@@ -31,4 +29,4 @@ fr:
31
29
  devise:
32
30
  mailer:
33
31
  invitation_instructions:
34
- accept_until_format: "%B %d, %Y %I:%M %p"
32
+ accept_until_format: "%B %d, %Y %I:%M %p"
@@ -0,0 +1,31 @@
1
+ id:
2
+ devise:
3
+ failure:
4
+ invited: "Anda memiliki undangan yang tertunda, harap terima undangan tersebut untuk menyelesaikan pembuatan akun Anda."
5
+ invitations:
6
+ send_instructions: "Email undangan telah dikirim ke %{email}."
7
+ invitation_token_invalid: "Token undangan yang diberikan tidak valid!"
8
+ updated: "Kata sandi Anda telah berhasil diatur. Anda sudah masuk."
9
+ updated_not_active: "Kata sandi Anda telah berhasil diatur."
10
+ no_invitations_remaining: "Tidak ada undangan tersisa."
11
+ invitation_removed: "Undangan Anda telah dihapus."
12
+ new:
13
+ header: "Kirim Undangan"
14
+ submit_button: "Kirim undangan"
15
+ edit:
16
+ header: "Atur kata sandi Anda"
17
+ submit_button: "Atur kata sandi"
18
+ mailer:
19
+ invitation_instructions:
20
+ subject: "Instruksi Undangan"
21
+ hello: "Halo %{email}"
22
+ someone_invited_you: "Seseorang telah mengundang Anda ke %{url}. Anda dapat menerima undangan ini melalui tautan di bawah ini."
23
+ accept: "Terima Undangan"
24
+ accept_until: "Undangan ini akan berakhir pada %{due_date}."
25
+ ignore: "Jika Anda tidak ingin menerima undangan ini, silakan abaikan email ini. Akun Anda tidak akan dibuat sampai Anda mengakses tautan di atas dan mengatur kata sandi Anda."
26
+ time:
27
+ formats:
28
+ devise:
29
+ mailer:
30
+ invitation_instructions:
31
+ accept_until_format: "%d %B %Y %H:%M:%S"
@@ -195,7 +195,7 @@ module Devise
195
195
  def clear_reset_password_token
196
196
  reset_password_token_present = reset_password_token.present?
197
197
  super
198
- accept_invitation! if reset_password_token_present && invited_to_sign_up?
198
+ accept_invitation! if reset_password_token_present && valid_invitation?
199
199
  end
200
200
 
201
201
  def clear_errors_on_valid_keys
@@ -231,7 +231,7 @@ module Devise
231
231
  def add_taken_error(key)
232
232
  errors.add(key, :taken)
233
233
  end
234
-
234
+
235
235
  def invitation_taken?
236
236
  !invited_to_sign_up?
237
237
  end
@@ -1,3 +1,3 @@
1
1
  module DeviseInvitable
2
- VERSION = '2.0.7'.freeze
2
+ VERSION = '2.0.9'.freeze
3
3
  end
@@ -98,7 +98,7 @@ class InvitationTest < ActionDispatch::IntegrationTest
98
98
  fill_in 'Password confirmation', with: 'other_password'
99
99
  end
100
100
  assert_equal user_invitation_path, current_path
101
- assert page.has_css?('#error_explanation li', text: /Password .*doesn\'t match/)
101
+ assert page.has_css?('#error_explanation li', text: /Password .*doesn['’]t match/)
102
102
  assert !user.confirmed?
103
103
  end
104
104
 
@@ -279,6 +279,23 @@ class InvitableTest < ActiveSupport::TestCase
279
279
  refute_predicate user, :invited_to_sign_up?
280
280
  end
281
281
 
282
+ test 'should not accept expired invitation while resetting the password' do
283
+ User.stubs(:invite_for).returns(1.day)
284
+ user = User.invite!(email: 'valid@email.com')
285
+ assert user.invited_to_sign_up?
286
+ user.invitation_created_at = Time.now.utc - 2.days
287
+ token, user.reset_password_token = Devise.token_generator.generate(User, :reset_password_token)
288
+ user.reset_password_sent_at = Time.now.utc
289
+ user.save
290
+
291
+ assert user.reset_password_token.present?
292
+ assert user.invitation_token.present?
293
+ User.reset_password_by_token(reset_password_token: token, password: '123456789', password_confirmation: '123456789')
294
+ assert_nil user.reload.reset_password_token
295
+ assert user.reload.invitation_token.present?
296
+ assert user.reload.invited_to_sign_up?
297
+ end
298
+
282
299
  test 'should not accept invitation on failing to reset the password' do
283
300
  user = User.invite!(email: 'valid@email.com')
284
301
  assert user.invited_to_sign_up?
@@ -366,15 +383,51 @@ class InvitableTest < ActiveSupport::TestCase
366
383
  User.validate_on_invite = validate_on_invite
367
384
  end
368
385
 
386
+ test 'should not validate other attributes when validate_on_invite is disabled (for instance method)' do
387
+ validate_on_invite = User.validate_on_invite
388
+ User.validate_on_invite = false
389
+ user = new_user(email: 'valid@email.com', username: 'a' * 50)
390
+ user.invite!(nil, validate: false)
391
+ assert_empty user.errors
392
+ User.validate_on_invite = validate_on_invite
393
+ end
394
+
395
+ test 'should validate other attributes when validate_on_invite is disabled and validate option is enabled (for instance method)' do
396
+ validate_on_invite = User.validate_on_invite
397
+ User.validate_on_invite = false
398
+ user = new_user(email: 'valid@email.com', username: 'a' * 50)
399
+ user.invite!(nil, validate: true)
400
+ refute_empty user.errors[:username]
401
+ User.validate_on_invite = validate_on_invite
402
+ end
403
+
404
+ test 'should validate other attributes when validate_on_invite is enabled and validate option is disabled (for instance method)' do
405
+ validate_on_invite = User.validate_on_invite
406
+ User.validate_on_invite = true
407
+ user = new_user(email: 'valid@email.com', username: 'a' * 50)
408
+ user.invite!
409
+ refute_empty user.errors[:username]
410
+ User.validate_on_invite = validate_on_invite
411
+ end
412
+
413
+ test 'should validate other attributes when validate_on_invite is enabled and validate option is disabled explicitly (for instance method)' do
414
+ validate_on_invite = User.validate_on_invite
415
+ User.validate_on_invite = true
416
+ user = new_user(email: 'valid@email.com', username: 'a' * 50)
417
+ user.invite!(nil, validate: false)
418
+ assert_empty user.errors
419
+ User.validate_on_invite = validate_on_invite
420
+ end
421
+
369
422
  test 'should return a record with errors if user was found by e-mail' do
370
423
  existing_user = User.new(email: 'valid@email.com')
371
424
  existing_user.save(validate: false)
372
425
  user = User.invite!(email: 'valid@email.com')
373
426
  assert_equal user, existing_user
374
- assert_equal ['has already been taken'], user.errors[:email]
427
+ assert_equal [{error: :taken}], user.errors.details[:email]
375
428
  same_user = User.invite!(email: 'valid@email.com')
376
429
  assert_equal same_user, existing_user
377
- assert_equal ['has already been taken'], same_user.errors[:email]
430
+ assert_equal [{error: :taken}], same_user.errors.details[:email]
378
431
  end
379
432
 
380
433
  test 'should return a record with errors if user with pending invitation was found by e-mail' do
@@ -388,7 +441,7 @@ class InvitableTest < ActiveSupport::TestCase
388
441
 
389
442
  user = User.invite!(email: 'valid@email.com')
390
443
  assert_equal user, existing_user
391
- assert_equal ['has already been taken'], user.errors[:email]
444
+ assert_equal [{error: :taken}], user.errors.details[:email]
392
445
  ensure
393
446
  User.resend_invitation = resend_invitation
394
447
  end
@@ -402,7 +455,7 @@ class InvitableTest < ActiveSupport::TestCase
402
455
  existing_user.save(validate: false)
403
456
  user = User.invite!(email: 'valid@email.com', username: 'a' * 50)
404
457
  assert_equal user, existing_user
405
- assert_equal ['has already been taken'], user.errors[:email]
458
+ assert_equal [{error: :taken}], user.errors.details[:email]
406
459
  refute_empty user.errors[:username]
407
460
  ensure
408
461
  User.validate_on_invite = validate_on_invite
@@ -412,13 +465,13 @@ class InvitableTest < ActiveSupport::TestCase
412
465
  test 'should return a new record with errors if e-mail is blank' do
413
466
  invited_user = User.invite!(email: '')
414
467
  assert invited_user.new_record?
415
- assert_equal ["can't be blank"], invited_user.errors[:email]
468
+ assert_equal [{error: :blank}], invited_user.errors.details[:email]
416
469
  end
417
470
 
418
471
  test 'should return a new record with errors if e-mail is invalid' do
419
472
  invited_user = User.invite!(email: 'invalid_email')
420
473
  assert invited_user.new_record?
421
- assert_equal ['is invalid'], invited_user.errors[:email]
474
+ assert_equal [{error: :invalid}], invited_user.errors.details[:email]
422
475
  end
423
476
 
424
477
  test 'should set all attributes with errors if e-mail is invalid' do
@@ -438,13 +491,13 @@ class InvitableTest < ActiveSupport::TestCase
438
491
  test 'should return a new record with errors if no invitation_token is found' do
439
492
  invited_user = User.accept_invitation!(invitation_token: 'invalid_token')
440
493
  assert invited_user.new_record?
441
- assert_equal ['is invalid'], invited_user.errors[:invitation_token]
494
+ assert_equal [{error: :invalid}], invited_user.errors.details[:invitation_token]
442
495
  end
443
496
 
444
497
  test 'should return a new record with errors if invitation_token is blank' do
445
498
  invited_user = User.accept_invitation!(invitation_token: '')
446
499
  assert invited_user.new_record?
447
- assert_equal ["can't be blank"], invited_user.errors[:invitation_token]
500
+ assert_equal [{error: :blank}], invited_user.errors.details[:invitation_token]
448
501
  end
449
502
 
450
503
  test 'should return record with errors if invitation_token has expired' do
@@ -454,7 +507,7 @@ class InvitableTest < ActiveSupport::TestCase
454
507
  invited_user.save(validate: false)
455
508
  user = User.accept_invitation!(invitation_token: Thread.current[:token])
456
509
  assert_equal user, invited_user
457
- assert_equal ['is invalid'], user.errors[:invitation_token]
510
+ assert_equal [{error: :invalid}], user.errors.details[:invitation_token]
458
511
  end
459
512
 
460
513
  test 'should allow record modification using block' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise_invitable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.7
4
+ version: 2.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergio Cambra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-09 00:00:00.000000000 Z
11
+ date: 2023-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionmailer
@@ -78,6 +78,7 @@ files:
78
78
  - config/locales/et.yml
79
79
  - config/locales/fa.yml
80
80
  - config/locales/fr.yml
81
+ - config/locales/id.yml
81
82
  - config/locales/it.yml
82
83
  - config/locales/ja.yml
83
84
  - config/locales/ko.yml