autosign 0.0.2 → 0.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 +13 -5
- data/.gitignore +5 -0
- data/.rspec +4 -0
- data/.travis.yml +7 -1
- data/Gemfile.lock +72 -19
- data/README.md +1 -1
- data/Rakefile +15 -9
- data/autosign.gemspec +13 -12
- data/lib/autosign.rb +15 -0
- data/lib/autosign/config.rb +5 -0
- data/lib/autosign/decoder.rb +7 -0
- data/lib/autosign/journal.rb +1 -1
- data/lib/autosign/token.rb +12 -1
- data/lib/autosign/validators/jwt.rb +37 -3
- data/lib/autosign/validators/multiplexer.rb +77 -28
- data/lib/autosign/validators/passwordlist.rb +49 -0
- data/lib/autosign/version.rb +1 -1
- data/spec/spec_helper.rb +102 -0
- data/spec/specs/config_spec.rb +20 -0
- data/spec/specs/decoder_spec.rb +16 -0
- data/spec/specs/journal_spec.rb +41 -0
- data/spec/specs/token_spec.rb +102 -0
- data/spec/specs/validators/jwt_spec.rb +69 -0
- data/spec/specs/validators/passwordlist_spec.rb +51 -0
- metadata +92 -59
- data/README.rdoc +0 -6
- data/autosign.rdoc +0 -5
- data/lib/autosign/logger.rb +0 -7
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'securerandom'
|
3
|
+
|
4
|
+
context Autosign::Validators::JWT do
|
5
|
+
let(:certname) { 'host.example.com' }
|
6
|
+
let(:validator) { Autosign::Validators::JWT.new }
|
7
|
+
|
8
|
+
let(:one_time_token) { Autosign::Token.new('foo.example.com', false, 3600, 'rspec_test', 'secret').sign }
|
9
|
+
let(:reusable_token) { Autosign::Token.new('foo.example.com', true, 3600, 'rspec_test', 'secret').sign }
|
10
|
+
let(:expired_token) { Autosign::Token.new('foo.example.com', true, -1, 'rspec_test', 'secret').sign }
|
11
|
+
|
12
|
+
before {
|
13
|
+
# stub configuration
|
14
|
+
data = { 'general' => {
|
15
|
+
'loglevel' => :debug,
|
16
|
+
'logfile' => '/tmp/autosign.log'
|
17
|
+
},
|
18
|
+
'jwt_token' => {
|
19
|
+
'secret' => 'secret',
|
20
|
+
'validity' => 3600,
|
21
|
+
'journalfile' => '/tmp/autosign.journal'
|
22
|
+
}
|
23
|
+
}
|
24
|
+
allow_any_instance_of(Autosign::Config).to receive(:settings).and_return(data)
|
25
|
+
}
|
26
|
+
|
27
|
+
|
28
|
+
context 'class methods' do
|
29
|
+
describe '.new' do
|
30
|
+
it 'requires no parameters' do
|
31
|
+
expect { Autosign::Validators::JWT.new() }.to_not raise_error
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'instance methods' do
|
37
|
+
describe '.name' do
|
38
|
+
it 'returns a string' do
|
39
|
+
expect(validator.name).to be_a(String)
|
40
|
+
end
|
41
|
+
it 'returns the string "jwt_token"' do
|
42
|
+
expect(validator.name).to eq('jwt_token')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
describe '.validate' do
|
46
|
+
it 'validates a JWT token' do
|
47
|
+
expect(validator.validate(one_time_token, 'foo.example.com', 'dummy_csr_data')).to be true
|
48
|
+
end
|
49
|
+
it 'does not validate a token with the wrong hostname' do
|
50
|
+
expect(validator.validate(one_time_token, 'wrong.example.com', 'dummy_csr_data')).to be false
|
51
|
+
end
|
52
|
+
it 'does not validate an expired token' do
|
53
|
+
expect(validator.validate(expired_token, 'foo.example.com', 'dummy_csr_data')).to be false
|
54
|
+
end
|
55
|
+
it 'does not validate an invalid token' do
|
56
|
+
expect(validator.validate(SecureRandom.urlsafe_base64(200), 'foo.example.com', 'dummy_csr_data')).to be false
|
57
|
+
end
|
58
|
+
it 'does not validate a re-used one-time token' do
|
59
|
+
expect(validator.validate(one_time_token, 'foo.example.com', 'dummy_csr_data')).to be true
|
60
|
+
expect(validator.validate(one_time_token, 'foo.example.com', 'dummy_csr_data')).to be false
|
61
|
+
end
|
62
|
+
it 'does validate a re-used re-usable token' do
|
63
|
+
expect(validator.validate(reusable_token, 'foo.example.com', 'dummy_csr_data')).to be true
|
64
|
+
expect(validator.validate(reusable_token, 'foo.example.com', 'dummy_csr_data')).to be true
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'securerandom'
|
3
|
+
|
4
|
+
context Autosign::Validators::Passwordlist do
|
5
|
+
let(:certname) { 'host.example.com' }
|
6
|
+
let(:validator) { Autosign::Validators::Passwordlist.new }
|
7
|
+
|
8
|
+
before {
|
9
|
+
# stub configuration
|
10
|
+
data = { 'general' => {
|
11
|
+
'loglevel' => :debug,
|
12
|
+
'logfile' => '/tmp/autosign.log'
|
13
|
+
},
|
14
|
+
'password_list' => {
|
15
|
+
'password' => ['hunter2', 'opensesame', 'CPE1704TKS']
|
16
|
+
}
|
17
|
+
}
|
18
|
+
allow_any_instance_of(Autosign::Config).to receive(:settings).and_return(data)
|
19
|
+
}
|
20
|
+
|
21
|
+
context 'class methods' do
|
22
|
+
describe '.new' do
|
23
|
+
it 'requires no parameters' do
|
24
|
+
expect { Autosign::Validators::Passwordlist.new() }.to_not raise_error
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'instance methods' do
|
30
|
+
describe '.name' do
|
31
|
+
it 'returns a string' do
|
32
|
+
expect(validator.name).to be_a(String)
|
33
|
+
end
|
34
|
+
it 'returns the string "password_list"' do
|
35
|
+
expect(validator.name).to eq('password_list')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
describe '.validate' do
|
39
|
+
it 'validates a request with a valid password' do
|
40
|
+
expect(validator.validate('hunter2', 'foo.example.com', 'dummy_csr_data')).to be true
|
41
|
+
expect(validator.validate('opensesame', 'foo.example.com', 'dummy_csr_data')).to be true
|
42
|
+
expect(validator.validate('CPE1704TKS', 'foo.example.com', 'dummy_csr_data')).to be true
|
43
|
+
end
|
44
|
+
it 'does not validate a request with an invalid password' do
|
45
|
+
expect(validator.validate('bad_password', 'foo.example.com', 'dummy_csr_data')).to be false
|
46
|
+
expect(validator.validate('', 'foo.example.com', 'dummy_csr_data')).to be false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
metadata
CHANGED
@@ -1,214 +1,240 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autosign
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Your Name Here
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '10'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '10'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rdoc
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '4'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '4'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: aruba
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
47
|
+
version: '0.6'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
54
|
+
version: '0.6'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: cucumber
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '2'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '2'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: puppet
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: coveralls
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
74
102
|
- !ruby/object:Gem::Version
|
75
103
|
version: '0'
|
76
104
|
type: :development
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
|
-
- -
|
108
|
+
- - ! '>='
|
81
109
|
- !ruby/object:Gem::Version
|
82
110
|
version: '0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: gli
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
86
114
|
requirements:
|
87
|
-
- -
|
115
|
+
- - ~>
|
88
116
|
- !ruby/object:Gem::Version
|
89
117
|
version: '2'
|
90
118
|
type: :runtime
|
91
119
|
prerelease: false
|
92
120
|
version_requirements: !ruby/object:Gem::Requirement
|
93
121
|
requirements:
|
94
|
-
- -
|
122
|
+
- - ~>
|
95
123
|
- !ruby/object:Gem::Version
|
96
124
|
version: '2'
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: jwt
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
100
128
|
requirements:
|
101
|
-
- -
|
129
|
+
- - ~>
|
102
130
|
- !ruby/object:Gem::Version
|
103
131
|
version: '1'
|
104
132
|
type: :runtime
|
105
133
|
prerelease: false
|
106
134
|
version_requirements: !ruby/object:Gem::Requirement
|
107
135
|
requirements:
|
108
|
-
- -
|
136
|
+
- - ~>
|
109
137
|
- !ruby/object:Gem::Version
|
110
138
|
version: '1'
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
140
|
name: iniparse
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
114
142
|
requirements:
|
115
|
-
- -
|
143
|
+
- - ~>
|
116
144
|
- !ruby/object:Gem::Version
|
117
145
|
version: '1'
|
118
146
|
type: :runtime
|
119
147
|
prerelease: false
|
120
148
|
version_requirements: !ruby/object:Gem::Requirement
|
121
149
|
requirements:
|
122
|
-
- -
|
150
|
+
- - ~>
|
123
151
|
- !ruby/object:Gem::Version
|
124
152
|
version: '1'
|
125
153
|
- !ruby/object:Gem::Dependency
|
126
154
|
name: logging
|
127
155
|
requirement: !ruby/object:Gem::Requirement
|
128
156
|
requirements:
|
129
|
-
- -
|
157
|
+
- - ~>
|
130
158
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
159
|
+
version: '2'
|
132
160
|
type: :runtime
|
133
161
|
prerelease: false
|
134
162
|
version_requirements: !ruby/object:Gem::Requirement
|
135
163
|
requirements:
|
136
|
-
- -
|
164
|
+
- - ~>
|
137
165
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
166
|
+
version: '2'
|
139
167
|
- !ruby/object:Gem::Dependency
|
140
168
|
name: json
|
141
169
|
requirement: !ruby/object:Gem::Requirement
|
142
170
|
requirements:
|
143
|
-
- -
|
171
|
+
- - ~>
|
144
172
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
173
|
+
version: '1'
|
146
174
|
type: :runtime
|
147
175
|
prerelease: false
|
148
176
|
version_requirements: !ruby/object:Gem::Requirement
|
149
177
|
requirements:
|
150
|
-
- -
|
178
|
+
- - ~>
|
151
179
|
- !ruby/object:Gem::Version
|
152
|
-
version: '
|
180
|
+
version: '1'
|
153
181
|
- !ruby/object:Gem::Dependency
|
154
182
|
name: deep_merge
|
155
183
|
requirement: !ruby/object:Gem::Requirement
|
156
184
|
requirements:
|
157
|
-
- -
|
185
|
+
- - ~>
|
158
186
|
- !ruby/object:Gem::Version
|
159
|
-
version: '
|
187
|
+
version: '1'
|
160
188
|
type: :runtime
|
161
189
|
prerelease: false
|
162
190
|
version_requirements: !ruby/object:Gem::Requirement
|
163
191
|
requirements:
|
164
|
-
- -
|
192
|
+
- - ~>
|
165
193
|
- !ruby/object:Gem::Version
|
166
|
-
version: '
|
194
|
+
version: '1'
|
167
195
|
- !ruby/object:Gem::Dependency
|
168
196
|
name: require_all
|
169
197
|
requirement: !ruby/object:Gem::Requirement
|
170
198
|
requirements:
|
171
|
-
- -
|
199
|
+
- - ~>
|
172
200
|
- !ruby/object:Gem::Version
|
173
|
-
version: '
|
201
|
+
version: '1'
|
174
202
|
type: :runtime
|
175
203
|
prerelease: false
|
176
204
|
version_requirements: !ruby/object:Gem::Requirement
|
177
205
|
requirements:
|
178
|
-
- -
|
206
|
+
- - ~>
|
179
207
|
- !ruby/object:Gem::Version
|
180
|
-
version: '
|
208
|
+
version: '1'
|
181
209
|
- !ruby/object:Gem::Dependency
|
182
210
|
name: yard
|
183
211
|
requirement: !ruby/object:Gem::Requirement
|
184
212
|
requirements:
|
185
|
-
- -
|
213
|
+
- - ~>
|
186
214
|
- !ruby/object:Gem::Version
|
187
|
-
version: '0'
|
215
|
+
version: '0.8'
|
188
216
|
type: :runtime
|
189
217
|
prerelease: false
|
190
218
|
version_requirements: !ruby/object:Gem::Requirement
|
191
219
|
requirements:
|
192
|
-
- -
|
220
|
+
- - ~>
|
193
221
|
- !ruby/object:Gem::Version
|
194
|
-
version: '0'
|
222
|
+
version: '0.8'
|
195
223
|
description:
|
196
224
|
email: your@email.address.com
|
197
225
|
executables:
|
198
226
|
- autosign
|
199
227
|
extensions: []
|
200
|
-
extra_rdoc_files:
|
201
|
-
- README.rdoc
|
202
|
-
- autosign.rdoc
|
228
|
+
extra_rdoc_files: []
|
203
229
|
files:
|
204
|
-
-
|
230
|
+
- .gitignore
|
231
|
+
- .rspec
|
232
|
+
- .travis.yml
|
205
233
|
- Gemfile
|
206
234
|
- Gemfile.lock
|
207
235
|
- README.md
|
208
|
-
- README.rdoc
|
209
236
|
- Rakefile
|
210
237
|
- autosign.gemspec
|
211
|
-
- autosign.rdoc
|
212
238
|
- bin/autosign
|
213
239
|
- bin/autosign-validator
|
214
240
|
- features/autosign.feature
|
@@ -220,38 +246,45 @@ files:
|
|
220
246
|
- lib/autosign/config.rb
|
221
247
|
- lib/autosign/decoder.rb
|
222
248
|
- lib/autosign/journal.rb
|
223
|
-
- lib/autosign/logger.rb
|
224
249
|
- lib/autosign/token.rb
|
225
250
|
- lib/autosign/validator.rb
|
226
251
|
- lib/autosign/validators/jwt.rb
|
227
252
|
- lib/autosign/validators/multiplexer.rb
|
253
|
+
- lib/autosign/validators/passwordlist.rb
|
228
254
|
- lib/autosign/version.rb
|
255
|
+
- spec/spec_helper.rb
|
256
|
+
- spec/specs/config_spec.rb
|
257
|
+
- spec/specs/decoder_spec.rb
|
258
|
+
- spec/specs/journal_spec.rb
|
259
|
+
- spec/specs/token_spec.rb
|
260
|
+
- spec/specs/validators/jwt_spec.rb
|
261
|
+
- spec/specs/validators/passwordlist_spec.rb
|
229
262
|
homepage: http://your.website.com
|
230
263
|
licenses: []
|
231
264
|
metadata: {}
|
232
265
|
post_install_message:
|
233
266
|
rdoc_options:
|
234
|
-
-
|
267
|
+
- --title
|
235
268
|
- autosign
|
236
|
-
-
|
269
|
+
- --main
|
237
270
|
- README.rdoc
|
238
|
-
-
|
271
|
+
- -ri
|
239
272
|
require_paths:
|
240
273
|
- lib
|
241
274
|
- lib
|
242
275
|
required_ruby_version: !ruby/object:Gem::Requirement
|
243
276
|
requirements:
|
244
|
-
- -
|
277
|
+
- - ! '>='
|
245
278
|
- !ruby/object:Gem::Version
|
246
279
|
version: '0'
|
247
280
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
248
281
|
requirements:
|
249
|
-
- -
|
282
|
+
- - ! '>='
|
250
283
|
- !ruby/object:Gem::Version
|
251
284
|
version: '0'
|
252
285
|
requirements: []
|
253
286
|
rubyforge_project:
|
254
|
-
rubygems_version: 2.
|
287
|
+
rubygems_version: 2.4.5
|
255
288
|
signing_key:
|
256
289
|
specification_version: 4
|
257
290
|
summary: A description of your project
|