vault-tools 0.5.12 → 0.5.13
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.
- data/Gemfile.lock +1 -1
- data/lib/vault-tools/version.rb +1 -1
- data/lib/vault-tools/web.rb +25 -5
- data/test/web_test.rb +28 -0
- metadata +2 -2
data/Gemfile.lock
CHANGED
data/lib/vault-tools/version.rb
CHANGED
data/lib/vault-tools/web.rb
CHANGED
@@ -3,10 +3,25 @@ require 'vault-tools/log'
|
|
3
3
|
module Vault
|
4
4
|
# Base class for HTTP API services.
|
5
5
|
class Web < Sinatra::Base
|
6
|
-
#
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
# List of paths that are not protected thus overriding protected!
|
7
|
+
set :unprotected_paths, []
|
8
|
+
|
9
|
+
class << self
|
10
|
+
# Store the action for logging purposes.
|
11
|
+
def route(verb, action, *)
|
12
|
+
condition { @action = action }
|
13
|
+
super
|
14
|
+
end
|
15
|
+
|
16
|
+
# Create :method:_unprotected methods for instances where default
|
17
|
+
# protect! is used
|
18
|
+
%w{get put post delete head options path link unlink}.each do |meth|
|
19
|
+
define_method "#{meth}_unprotected".to_sym do |path, opts = {}, &block|
|
20
|
+
pattern = compile!(meth.upcase, path, block, opts).first
|
21
|
+
set :unprotected_paths, settings.unprotected_paths + [pattern]
|
22
|
+
route meth.upcase, path, opts, &block
|
23
|
+
end
|
24
|
+
end
|
10
25
|
end
|
11
26
|
|
12
27
|
# HTTP Basic Auth Support
|
@@ -14,12 +29,17 @@ module Vault
|
|
14
29
|
# Protects an http method. Returns 401 Not Authorized response
|
15
30
|
# when authorized? returns false
|
16
31
|
def protected!(*passwords)
|
17
|
-
unless authorized?(passwords)
|
32
|
+
unless unprotected? || authorized?(passwords)
|
18
33
|
response['WWW-Authenticate'] = %(Basic realm="Restricted Area")
|
19
34
|
throw(:halt, [401, "Not authorized\n"])
|
20
35
|
end
|
21
36
|
end
|
22
37
|
|
38
|
+
# Check the list of unprotected_paths and see if any of them match
|
39
|
+
def unprotected?
|
40
|
+
settings.unprotected_paths.any? { |path| path.match(request.path) }
|
41
|
+
end
|
42
|
+
|
23
43
|
# Check request for HTTP Basic creds and
|
24
44
|
# password matches settings.basic_password
|
25
45
|
def authorized?(passwords)
|
data/test/web_test.rb
CHANGED
@@ -84,6 +84,34 @@ class WebTest < Vault::TestCase
|
|
84
84
|
assert_equal 'You may pass', last_response.body
|
85
85
|
end
|
86
86
|
|
87
|
+
def test_http_basic_auth_with_default_protected
|
88
|
+
app.set :basic_password, 'password'
|
89
|
+
app.before { protected! }
|
90
|
+
app.get '/protected' do
|
91
|
+
'You may pass'
|
92
|
+
end
|
93
|
+
app.get_unprotected '/unprotected/:name' do |name|
|
94
|
+
"You may pass #{name}"
|
95
|
+
end
|
96
|
+
|
97
|
+
get '/protected'
|
98
|
+
assert_equal 401, last_response.status
|
99
|
+
|
100
|
+
get '/unprotected/Bob'
|
101
|
+
assert_equal 200, last_response.status
|
102
|
+
assert_equal 'You may pass Bob', last_response.body
|
103
|
+
|
104
|
+
authorize('','password')
|
105
|
+
get '/protected'
|
106
|
+
assert_equal 200, last_response.status
|
107
|
+
assert_equal 'You may pass', last_response.body
|
108
|
+
|
109
|
+
authorize('','password')
|
110
|
+
get '/unprotected/Jill'
|
111
|
+
assert_equal 200, last_response.status
|
112
|
+
assert_equal 'You may pass Jill', last_response.body
|
113
|
+
end
|
114
|
+
|
87
115
|
# An `http_200` and an `http_2xx` log metric is written for successful
|
88
116
|
# requests.
|
89
117
|
def test_head_status_check
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vault-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.13
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-11-
|
13
|
+
date: 2014-11-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: scrolls
|