pebblebed 0.0.45 → 0.0.46
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/README.md +11 -11
- data/lib/pebblebed/sinatra.rb +3 -2
- data/lib/pebblebed/version.rb +1 -1
- data/spec/sinatra_spec.rb +40 -0
- metadata +4 -4
data/README.md
CHANGED
@@ -48,17 +48,17 @@ This exception has the fields `status` and `message`.
|
|
48
48
|
|
49
49
|
Other helper methods provided by this extension:
|
50
50
|
|
51
|
-
part(partspec, params = {})
|
52
|
-
parts_script_include_tags
|
53
|
-
parts_stylesheet_include_tags
|
54
|
-
current_session
|
55
|
-
pebbles
|
56
|
-
current_identity
|
57
|
-
require_identity
|
58
|
-
require_god
|
59
|
-
require_access_to_path(path)
|
60
|
-
require_action_allowed(action, uid)
|
61
|
-
require_parameters(parameters, *keys)
|
51
|
+
part(partspec, params = {}) # Include a part from a kit (See https://github.com/benglerpebbles/kits)
|
52
|
+
parts_script_include_tags # All script tags required by the kits
|
53
|
+
parts_stylesheet_include_tags # All stylesheet-tags required by the kits
|
54
|
+
current_session # The hash string that identifies the current browser session
|
55
|
+
pebbles # Common entrypoint for the Pebblebed::Connector
|
56
|
+
current_identity # Returns the a DeepStruct record with the vital data for the current user
|
57
|
+
require_identity # Halts with 403 if there is no current user
|
58
|
+
require_god # Halts with 403 if the current user is not a god
|
59
|
+
require_access_to_path(path) # Halts with 403 if the current user is not a member of a checkpoint access group with privileged access to that path
|
60
|
+
require_action_allowed(action, uid, options={}) # Halts with 403 if the current user is not allowed by checkpoint to perform this action for that uid. If a response :allowed => "default" (no policy found) is returned from checkpoint, options[:default] => [bool] is evaluated. options[:default] => true will allow the action on 'default'. Bool false will halt by 403. If no options is given, the method will halt 403 on everything but true.
|
61
|
+
require_parameters(parameters, *keys) # Halts with 409 if the at least one of the provided keys is not in the params-hash
|
62
62
|
|
63
63
|
### Testing Sinatra APIs
|
64
64
|
|
data/lib/pebblebed/sinatra.rb
CHANGED
@@ -93,12 +93,13 @@ module Sinatra
|
|
93
93
|
halt 403, "Access denied."
|
94
94
|
end
|
95
95
|
|
96
|
-
def require_action_allowed(action, uid)
|
96
|
+
def require_action_allowed(action, uid, options={})
|
97
97
|
require_identity
|
98
98
|
uid = ::Pebblebed::Uid.new(uid) if uid.is_a?(String)
|
99
99
|
return if current_identity.god and uid.path.split(".")[0] == current_identity.realm
|
100
100
|
res = pebbles.checkpoint.get("/callbacks/allowed/#{action}/#{uid}")
|
101
|
-
return res['allowed'] if res['allowed']
|
101
|
+
return res['allowed'] if res['allowed'] == true or
|
102
|
+
(res['allowed'] == "default" and options[:default])
|
102
103
|
halt 403, ":#{action} denied for #{uid} : #{res['reason']}"
|
103
104
|
end
|
104
105
|
|
data/lib/pebblebed/version.rb
CHANGED
data/spec/sinatra_spec.rb
CHANGED
@@ -39,6 +39,16 @@ class TestApp < Sinatra::Base
|
|
39
39
|
"You are creative"
|
40
40
|
end
|
41
41
|
|
42
|
+
post '/create2/:uid' do |uid|
|
43
|
+
require_action_allowed(:create, uid, :default => false)
|
44
|
+
"You are creative"
|
45
|
+
end
|
46
|
+
|
47
|
+
post '/create3/:uid' do |uid|
|
48
|
+
require_action_allowed(:create, uid, :default => true)
|
49
|
+
"You are creative"
|
50
|
+
end
|
51
|
+
|
42
52
|
get '/nonexistant' do
|
43
53
|
raise Pebblebed::HttpNotFoundError, "Not found /nonexistant"
|
44
54
|
end
|
@@ -199,6 +209,36 @@ describe Sinatra::Pebblebed do
|
|
199
209
|
post '/create/post.foo:testrealm'
|
200
210
|
last_response.body.should == "You are creative"
|
201
211
|
end
|
212
|
+
context "with options[:default] => false" do
|
213
|
+
specify "is disallowed" do
|
214
|
+
user!
|
215
|
+
checkpoint.should_receive(:get).with("/identities/me").and_return(DeepStruct.wrap(:identity => {:realm => 'testrealm', :id => 1, :god => false}))
|
216
|
+
checkpoint.should_receive(:get).with("/callbacks/allowed/create/post.foo:testrealm").and_return(DeepStruct.wrap(:allowed => "default"))
|
217
|
+
Pebblebed::Connector.any_instance.stub(:checkpoint => checkpoint)
|
218
|
+
post '/create2/post.foo:testrealm'
|
219
|
+
last_response.status.should == 403
|
220
|
+
end
|
221
|
+
end
|
222
|
+
context "with no options given and allowed = default" do
|
223
|
+
specify "is disallowed" do
|
224
|
+
user!
|
225
|
+
checkpoint.should_receive(:get).with("/identities/me").and_return(DeepStruct.wrap(:identity => {:realm => 'testrealm', :id => 1, :god => false}))
|
226
|
+
checkpoint.should_receive(:get).with("/callbacks/allowed/create/post.foo:testrealm").and_return(DeepStruct.wrap(:allowed => "default"))
|
227
|
+
Pebblebed::Connector.any_instance.stub(:checkpoint => checkpoint)
|
228
|
+
post '/create/post.foo:testrealm'
|
229
|
+
last_response.status.should == 403
|
230
|
+
end
|
231
|
+
end
|
232
|
+
context "with options[:default] => true" do
|
233
|
+
specify "is allowed" do
|
234
|
+
user!
|
235
|
+
checkpoint.should_receive(:get).with("/identities/me").and_return(DeepStruct.wrap(:identity => {:realm => 'testrealm', :id => 1, :god => false}))
|
236
|
+
checkpoint.should_receive(:get).with("/callbacks/allowed/create/post.foo:testrealm").and_return(DeepStruct.wrap(:allowed => "default"))
|
237
|
+
Pebblebed::Connector.any_instance.stub(:checkpoint => checkpoint)
|
238
|
+
post '/create3/post.foo:testrealm'
|
239
|
+
last_response.body.should == "You are creative"
|
240
|
+
end
|
241
|
+
end
|
202
242
|
end
|
203
243
|
end
|
204
244
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pebblebed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.46
|
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: 2013-02-
|
13
|
+
date: 2013-02-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
@@ -329,7 +329,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
329
329
|
version: '0'
|
330
330
|
segments:
|
331
331
|
- 0
|
332
|
-
hash:
|
332
|
+
hash: 1194197050294638142
|
333
333
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
334
334
|
none: false
|
335
335
|
requirements:
|
@@ -338,7 +338,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
338
338
|
version: '0'
|
339
339
|
segments:
|
340
340
|
- 0
|
341
|
-
hash:
|
341
|
+
hash: 1194197050294638142
|
342
342
|
requirements: []
|
343
343
|
rubyforge_project: pebblebed
|
344
344
|
rubygems_version: 1.8.25
|