active_model-password_reset 1.0.2 → 1.0.3

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
  SHA1:
3
- metadata.gz: 350aa28e566951412752770887f4d988bf59dad6
4
- data.tar.gz: 4cbf12f0ef0fbcd628e451767b205bba26a41cd1
3
+ metadata.gz: 1efbf3bec21766c47e369871f623e9352cd876f7
4
+ data.tar.gz: 17b3c3edc0d0f61a1bfaf7cb6b74e273eb2335bd
5
5
  SHA512:
6
- metadata.gz: d0b9cad3924b13892cdc82b3b3aad53928ea73118b36cf4eec3a6d278c469d92c86a355157f9e44195acb0ad423f579e435656bde364cfd144711afa040a5492
7
- data.tar.gz: b8a08e8bdfc624ba262bfa716d0dec253e45b77925dd18ea2c321ea69551719b7a0df2478cb948b26ebcb14f590891a68b31e484bb1f2b9ebcad7025c3a80262
6
+ metadata.gz: a670a34fd8dfef77b3be3d7ae00842436926052373a37fc599773d80cb449afde1c256f207c07e1796b762b71d704efa8f8a892965105e11c1de3ae472f1eb4f
7
+ data.tar.gz: 19c3e7f1ff5e9f96f3be620a89fe2a13a342167aa6cc35fb43952b34af037aef519136c794e5652a1679af35bf4abd4bc0122f4cd5f0fdbebc3241cf200e96d5
@@ -9,12 +9,14 @@ module ActiveModel
9
9
 
10
10
  class << self
11
11
  def generate(object)
12
- instance.message_verifier.generate(object)
12
+ token = instance.message_verifier.generate(object)
13
+ Base64.urlsafe_encode64(token)
13
14
  end
14
15
 
15
16
  def verify(string)
16
- instance.message_verifier.verify(string)
17
- rescue ActiveSupport::MessageVerifier::InvalidSignature
17
+ token = Base64.urlsafe_decode64(string)
18
+ instance.message_verifier.verify(token)
19
+ rescue ActiveSupport::MessageVerifier::InvalidSignature, ArgumentError
18
20
  raise TokenInvalid
19
21
  end
20
22
  end
@@ -1,5 +1,5 @@
1
1
  module ActiveModel
2
2
  class PasswordReset
3
- VERSION = "1.0.2"
3
+ VERSION = "1.0.3"
4
4
  end
5
5
  end
@@ -25,12 +25,10 @@ module ActiveModel
25
25
  email = user.email
26
26
  digest = Digest::MD5.digest(user.password_digest)
27
27
  expires_at = Time.now.to_i + EXPIRATION_TIME
28
- token = MessageVerifier.generate([email, digest, expires_at])
29
- CGI.escape(token)
28
+ MessageVerifier.generate([email, digest, expires_at])
30
29
  end
31
30
 
32
- def self.find(escaped_token)
33
- token = CGI.unescape(escaped_token)
31
+ def self.find(token)
34
32
  email, digest, expires_at = MessageVerifier.verify(token)
35
33
  raise TokenExpired if Time.now.to_i > expires_at.to_i
36
34
  new(email: email).tap do |password_reset|
@@ -51,20 +51,24 @@ class PasswordResetTest < Test::Unit::TestCase
51
51
 
52
52
  def test_find_raises_exception_with_invalid_email
53
53
  token = ActiveModel::PasswordReset::MessageVerifier.generate(["invalid@example.com", Digest::MD5.digest("alicedigest"), Time.now.to_i + 3600])
54
- assert_raises(ActiveModel::PasswordReset::EmailInvalid) { ActiveModel::PasswordReset.find(CGI.escape(token)) }
54
+ assert_raises(ActiveModel::PasswordReset::EmailInvalid) { ActiveModel::PasswordReset.find(token) }
55
55
  end
56
56
 
57
57
  def test_find_raises_exception_with_invalid_token
58
58
  assert_raises(ActiveModel::PasswordReset::TokenInvalid) { ActiveModel::PasswordReset.find("invalidtoken") }
59
59
  end
60
60
 
61
+ def test_find_raises_exception_with_non_base64_token
62
+ assert_raises(ActiveModel::PasswordReset::TokenInvalid) { ActiveModel::PasswordReset.find("%%%%%%%%%") }
63
+ end
64
+
61
65
  def test_find_raises_exception_with_expired_token
62
66
  token = ActiveModel::PasswordReset::MessageVerifier.generate(["alice@example.com", Digest::MD5.digest("alicedigest"), Time.now.to_i - 3600])
63
- assert_raises(ActiveModel::PasswordReset::TokenExpired) { ActiveModel::PasswordReset.find(CGI.escape(token)) }
67
+ assert_raises(ActiveModel::PasswordReset::TokenExpired) { ActiveModel::PasswordReset.find(token) }
64
68
  end
65
69
 
66
70
  def test_find_raises_exception_with_changed_password
67
71
  token = ActiveModel::PasswordReset::MessageVerifier.generate(["alice@example.com", Digest::MD5.digest("anotheralicedigest"), Time.now.to_i + 3600])
68
- assert_raises(ActiveModel::PasswordReset::PasswordChanged) { ActiveModel::PasswordReset.find(CGI.escape(token)) }
72
+ assert_raises(ActiveModel::PasswordReset::PasswordChanged) { ActiveModel::PasswordReset.find(token) }
69
73
  end
70
74
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_model-password_reset
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kuba Kuźma