snuffleupagus 0.0.9 → 0.2.2

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: c1c6a2515a503d2226e53e92350f9c156a81afc58614a68f17247693285406d8
4
- data.tar.gz: 40111852cdb8cfd511accf2713981abf912004bb0db43f3e44a4954c7a8f8303
3
+ metadata.gz: 81c2fe0d377038f07a9bcead3e719634ed5ab03708f32d0e057ad7e79aab2cf7
4
+ data.tar.gz: 8502a478b9e5eacebf04968d7a7c3205677893264ac8402545c029d7e43c44a2
5
5
  SHA512:
6
- metadata.gz: 397d54ee616139744d8802a38fc7e32cc7ad937eb32a011fd3d9dc5bb70126673dbc678e0b10b753dc9240c0f9e260806f450d1fdbafc981210f5d9abebf9e9f
7
- data.tar.gz: e824f45b6b6e912dafd8a881ddbd2e915586033000c6f82f363aa78a8cd8d5faad83d0ae4299a9dfc2de8a3a46c7c696ced05c27b21aa0954c37942f3f7a57cd
6
+ metadata.gz: efd8380cac1395bb7c8d5c87e76c954ce82d710305095b2300879c6bdc9376d031370ec53566b6dfda0218856d3972c8953b8b0722abcb2748b672cfa89cfb38
7
+ data.tar.gz: 7ed16f47b22a43b1bfc06716f865f1ea7a9914071f93c27f5ecca7109e63b8fabd5b69c0d4f0256367b1a84bc0d5c9986d872adf1745b50af90783b48966602e
data/.rubocop.yml CHANGED
@@ -1,3 +1,7 @@
1
+ AllCops:
2
+ NewCops: enable
3
+ TargetRubyVersion: 2.5
4
+
1
5
  Metrics/BlockLength:
2
6
  Exclude:
3
7
  - 'spec/**/*'
data/.travis.yml CHANGED
@@ -1,10 +1,10 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 2.3
5
- - 2.4
6
4
  - 2.5
7
5
  - 2.6
6
+ - 2.7
7
+ - 3.0
8
8
 
9
9
  install:
10
10
  - bundle install --retry=3
data/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  ## Unreleased
4
4
  - none
5
5
 
6
+ ## [0.1.1](releases/tag/v0.1.1) - 2020-10-21
7
+ ### Updated
8
+ - Use named parameters when creating and validating tokens
9
+
10
+ ## [0.1.1](releases/tag/v0.1.1) - 2020-10-21
11
+ ### Added
12
+ - Add context to the create/check token to avoid replay in different contexts
13
+
6
14
  ## [0.0.9](releases/tag/v0.0.9) - 2020-03-01
7
15
  ### Fixed
8
16
  - Address CVE-2020-8130 - rake OS command injection vulnerability
data/README.md CHANGED
@@ -23,7 +23,7 @@ gem 'snuffleupagus'
23
23
 
24
24
  ```ruby
25
25
  snuffy = Snuffleupagus::AuthToken.new('p4ssw0rd')
26
- snuffy.create_token
26
+ snuffy.create_token context: 'my-context'
27
27
  #=> "53616c7465645f5f25dba4d4a97b238c4560ab46ffdfb77b28ad3e7121ab1917"
28
28
  ```
29
29
 
@@ -31,6 +31,6 @@ snuffy.create_token
31
31
 
32
32
  ```ruby
33
33
  snuffy = Snuffleupagus::AuthToken.new('p4ssw0rd')
34
- snuffy.check_token("53616c7465645f5f25dba4d4a97b238c4560ab46ffdfb77b28ad3e7121ab1917")
34
+ snuffy.token_valid? token: "53616c7465645f5f25dba4d4a97b238c4560ab46ffdfb77b28ad3e7121ab1917", context: 'my-context'
35
35
  #=> true
36
36
  ```
@@ -24,18 +24,18 @@ module Snuffleupagus
24
24
  class AuthToken
25
25
  def initialize(key)
26
26
  @key = key
27
- @cipher = OpenSSL::Cipher::AES256.new :CBC
27
+ @cipher = OpenSSL::Cipher.new('aes-256-cbc')
28
28
  end
29
29
 
30
- def create_token
31
- encode encrypt "#{CONSTANT}#{Time.now.to_i}"
30
+ def create_token(context:)
31
+ encode encrypt "#{CONSTANT}#{context}#{Time.now.to_i}"
32
32
  end
33
33
 
34
- def check_token(token)
35
- return false unless token&.is_a?(String)
34
+ def token_valid?(token:, context:)
35
+ return false unless token.is_a? String
36
36
 
37
37
  decoded = decrypt decode token
38
- match = /^#{CONSTANT}([0-9]+)$/.match decoded
38
+ match = /\A#{CONSTANT}#{Regexp.escape(context)}([0-9]+)\z/.match decoded
39
39
  return false unless match
40
40
 
41
41
  (match[1].to_i - Time.now.to_i).abs < MAX_VALID_TIME_DIFFERENCE
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Snuffleupagus
4
- VERSION = '0.0.9'
4
+ VERSION = '0.2.2'
5
5
  end
@@ -12,6 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.description = 'Simple auth token generator/validator'
13
13
  s.summary = "snuffleupagus-#{s.version}"
14
14
  s.required_rubygems_version = '> 1.3.6'
15
+ s.required_ruby_version = ['>= 2.5.0', '< 3.1.0']
15
16
 
16
17
  s.add_development_dependency 'rake', '~> 12.3', '>= 12.3.3'
17
18
  s.add_development_dependency 'rspec', '~> 3'
@@ -7,58 +7,73 @@ describe Snuffleupagus::AuthToken do
7
7
  let(:snuffy) { Snuffleupagus::AuthToken.new('sup3r4w3s0m3p4ssw0rd') }
8
8
 
9
9
  describe '#create_token' do
10
- subject { snuffy.create_token }
10
+ subject { snuffy.create_token context: 'my-context' }
11
11
 
12
12
  it { is_expected.to be_a String }
13
- it { expect(subject.length).to eq 64 }
14
- it { is_expected.to match(/\A[a-f0-9]{64}\z/) }
13
+ it { expect(subject.length).to eq 96 }
14
+ it { is_expected.to match(/\A[a-f0-9]{96}\z/) }
15
15
  end
16
16
 
17
- describe '#check_token' do
18
- subject { snuffy.check_token(token) }
17
+ describe '#token_valid?' do
18
+ subject { snuffy.token_valid?(token: token, context: 'my-context') }
19
19
 
20
20
  context 'with a valid token' do
21
- let(:token) { snuffy.create_token }
21
+ let(:token) { snuffy.create_token context: 'my-context' }
22
+
22
23
  it { is_expected.to be_truthy }
23
24
  end
24
25
 
26
+ context 'when the context doesnt match' do
27
+ let(:token) { snuffy.create_token context: 'another-context' }
28
+
29
+ it { is_expected.to be_falsey }
30
+ end
31
+
25
32
  context 'with an invalid token' do
26
33
  let(:token) { 'F00B44' }
34
+
27
35
  it { is_expected.to be_falsey }
28
36
  end
29
37
 
30
38
  context 'with an empty token' do
31
39
  let(:token) { '' }
40
+
32
41
  it { is_expected.to be_falsey }
33
42
  end
34
43
 
35
44
  context 'with a nil token' do
36
45
  let(:token) { nil }
46
+
37
47
  it { is_expected.to be_falsey }
38
48
  end
39
49
 
40
50
  context 'testing expired tokens' do
41
- let(:token) { snuffy.create_token }
51
+ let(:token) { snuffy.create_token context: 'my-context' }
52
+
42
53
  before { token } # pre-load the token
43
54
  after { Timecop.return }
44
55
 
45
56
  context 'just inside the time difference (expired token)' do
46
57
  before { Timecop.freeze Time.now - 119 }
58
+
47
59
  it { is_expected.to be_truthy }
48
60
  end
49
61
 
50
62
  context 'just outside the time difference (expired token)' do
51
63
  before { Timecop.freeze Time.now - 120 }
64
+
52
65
  it { is_expected.to be_falsey }
53
66
  end
54
67
 
55
68
  context 'just inside the time difference (future token)' do
56
69
  before { Timecop.freeze Time.now + 119 }
70
+
57
71
  it { is_expected.to be_truthy }
58
72
  end
59
73
 
60
74
  context 'just outside the time difference (future token)' do
61
75
  before { Timecop.freeze Time.now + 120 }
76
+
62
77
  it { is_expected.to be_falsey }
63
78
  end
64
79
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snuffleupagus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Bromwich
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-01 00:00:00.000000000 Z
11
+ date: 2021-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -95,7 +95,7 @@ files:
95
95
  homepage: https://github.com/Studiosity/snuffleupagus
96
96
  licenses: []
97
97
  metadata: {}
98
- post_install_message:
98
+ post_install_message:
99
99
  rdoc_options: []
100
100
  require_paths:
101
101
  - lib
@@ -103,15 +103,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
103
  requirements:
104
104
  - - ">="
105
105
  - !ruby/object:Gem::Version
106
- version: '0'
106
+ version: 2.5.0
107
+ - - "<"
108
+ - !ruby/object:Gem::Version
109
+ version: 3.1.0
107
110
  required_rubygems_version: !ruby/object:Gem::Requirement
108
111
  requirements:
109
112
  - - ">"
110
113
  - !ruby/object:Gem::Version
111
114
  version: 1.3.6
112
115
  requirements: []
113
- rubygems_version: 3.0.6
114
- signing_key:
116
+ rubygems_version: 3.0.9
117
+ signing_key:
115
118
  specification_version: 4
116
- summary: snuffleupagus-0.0.9
119
+ summary: snuffleupagus-0.2.2
117
120
  test_files: []