pebblebed 0.0.42 → 0.0.43
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 +2 -1
- data/lib/pebblebed/sinatra.rb +8 -0
- data/lib/pebblebed/version.rb +1 -1
- data/spec/sinatra_spec.rb +47 -0
- metadata +121 -36
data/README.md
CHANGED
@@ -49,13 +49,14 @@ This exception has the fields `status` and `message`.
|
|
49
49
|
Other helper methods provided by this extension:
|
50
50
|
|
51
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
|
52
|
+
parts_script_include_tags # All script tags required by the kits
|
53
53
|
parts_stylesheet_include_tags # All stylesheet-tags required by the kits
|
54
54
|
current_session # The hash string that identifies the current browser session
|
55
55
|
pebbles # Common entrypoint for the Pebblebed::Connector
|
56
56
|
current_identity # Returns the a DeepStruct record with the vital data for the current user
|
57
57
|
require_identity # Halts with 403 if there is no current user
|
58
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
|
59
60
|
require_parameters(parameters, *keys) # Halts with 409 if the at least one of the provided keys is not in the params-hash
|
60
61
|
|
61
62
|
### Testing Sinatra APIs
|
data/lib/pebblebed/sinatra.rb
CHANGED
@@ -85,6 +85,14 @@ module Sinatra
|
|
85
85
|
halt 409, "missing parameters: #{missing.join(', ')}" unless missing.empty?
|
86
86
|
end
|
87
87
|
|
88
|
+
def require_access_to_path(path)
|
89
|
+
require_identity
|
90
|
+
return if current_identity.god and path.split(".")[0] == current_identity.realm
|
91
|
+
res = pebbles.checkpoint.get("/identities/#{current_identity.id}/access_to/#{path}")
|
92
|
+
return if res['access'] and res['access']['granted'] == true
|
93
|
+
halt 403, "Access denied."
|
94
|
+
end
|
95
|
+
|
88
96
|
def limit_offset_collection(collection, options)
|
89
97
|
limit = (options[:limit] || 20).to_i
|
90
98
|
offset = (options[:offset] || 0).to_i
|
data/lib/pebblebed/version.rb
CHANGED
data/spec/sinatra_spec.rb
CHANGED
@@ -24,6 +24,11 @@ class TestApp < Sinatra::Base
|
|
24
24
|
"You are logged in"
|
25
25
|
end
|
26
26
|
|
27
|
+
get '/group' do
|
28
|
+
require_access_to_path("testrealm.specialgroup.123")
|
29
|
+
"You are granted access to this content"
|
30
|
+
end
|
31
|
+
|
27
32
|
get '/root' do
|
28
33
|
require_god
|
29
34
|
"You are most powerful"
|
@@ -107,6 +112,48 @@ describe Sinatra::Pebblebed do
|
|
107
112
|
end
|
108
113
|
end
|
109
114
|
|
115
|
+
describe "with access groups control" do
|
116
|
+
let(:checkpoint) {
|
117
|
+
checkpoint = stub
|
118
|
+
checkpoint.stub!(:service_url => 'http://example.com')
|
119
|
+
checkpoint
|
120
|
+
}
|
121
|
+
context "as a guest" do
|
122
|
+
specify "not allowed" do
|
123
|
+
guest!
|
124
|
+
get '/group'
|
125
|
+
last_response.status.should == 403
|
126
|
+
end
|
127
|
+
end
|
128
|
+
context "as a god" do
|
129
|
+
specify "allowed without policy check" do
|
130
|
+
god!(:session => random_session)
|
131
|
+
get '/group'
|
132
|
+
last_response.body.should == "You are granted access to this content"
|
133
|
+
end
|
134
|
+
end
|
135
|
+
context "as user without grants" do
|
136
|
+
specify "is disallowed" do
|
137
|
+
user!
|
138
|
+
checkpoint.should_receive(:get).with("/identities/me").and_return(DeepStruct.wrap(:identity => {:realm => 'testrealm', :id => 1, :god => false}))
|
139
|
+
checkpoint.should_receive(:get).with("/identities/1/access_to/testrealm.specialgroup.123").and_return(DeepStruct.wrap(:access => {:granted => false}))
|
140
|
+
Pebblebed::Connector.any_instance.stub(:checkpoint => checkpoint)
|
141
|
+
get '/group'
|
142
|
+
last_response.status.should == 403
|
143
|
+
end
|
144
|
+
end
|
145
|
+
context "as user with grants" do
|
146
|
+
specify "is allowed" do
|
147
|
+
user!
|
148
|
+
checkpoint.should_receive(:get).with("/identities/me").and_return(DeepStruct.wrap(:identity => {:realm => 'testrealm', :id => 1, :god => false}))
|
149
|
+
checkpoint.should_receive(:get).with("/identities/1/access_to/testrealm.specialgroup.123").and_return(DeepStruct.wrap(:access => {:granted => true}))
|
150
|
+
Pebblebed::Connector.any_instance.stub(:checkpoint => checkpoint)
|
151
|
+
get '/group'
|
152
|
+
last_response.body.should == "You are granted access to this content"
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
110
157
|
describe "error handling" do
|
111
158
|
before(:each) { guest! }
|
112
159
|
|
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.43
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-02-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
17
|
-
requirement:
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,15 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements:
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
26
31
|
- !ruby/object:Gem::Dependency
|
27
32
|
name: rake
|
28
|
-
requirement:
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
29
34
|
none: false
|
30
35
|
requirements:
|
31
36
|
- - ! '>='
|
@@ -33,10 +38,15 @@ dependencies:
|
|
33
38
|
version: '0'
|
34
39
|
type: :development
|
35
40
|
prerelease: false
|
36
|
-
version_requirements:
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
37
47
|
- !ruby/object:Gem::Dependency
|
38
48
|
name: simplecov
|
39
|
-
requirement:
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
40
50
|
none: false
|
41
51
|
requirements:
|
42
52
|
- - ! '>='
|
@@ -44,10 +54,15 @@ dependencies:
|
|
44
54
|
version: '0'
|
45
55
|
type: :development
|
46
56
|
prerelease: false
|
47
|
-
version_requirements:
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
48
63
|
- !ruby/object:Gem::Dependency
|
49
64
|
name: sinatra
|
50
|
-
requirement:
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
51
66
|
none: false
|
52
67
|
requirements:
|
53
68
|
- - ! '>='
|
@@ -55,10 +70,15 @@ dependencies:
|
|
55
70
|
version: '0'
|
56
71
|
type: :development
|
57
72
|
prerelease: false
|
58
|
-
version_requirements:
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
59
79
|
- !ruby/object:Gem::Dependency
|
60
80
|
name: rack-test
|
61
|
-
requirement:
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
62
82
|
none: false
|
63
83
|
requirements:
|
64
84
|
- - ! '>='
|
@@ -66,10 +86,15 @@ dependencies:
|
|
66
86
|
version: '0'
|
67
87
|
type: :development
|
68
88
|
prerelease: false
|
69
|
-
version_requirements:
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
70
95
|
- !ruby/object:Gem::Dependency
|
71
96
|
name: memcache_mock
|
72
|
-
requirement:
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
73
98
|
none: false
|
74
99
|
requirements:
|
75
100
|
- - ! '>='
|
@@ -77,10 +102,15 @@ dependencies:
|
|
77
102
|
version: '0'
|
78
103
|
type: :development
|
79
104
|
prerelease: false
|
80
|
-
version_requirements:
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
81
111
|
- !ruby/object:Gem::Dependency
|
82
112
|
name: deepstruct
|
83
|
-
requirement:
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
84
114
|
none: false
|
85
115
|
requirements:
|
86
116
|
- - ! '>='
|
@@ -88,10 +118,15 @@ dependencies:
|
|
88
118
|
version: 0.0.4
|
89
119
|
type: :runtime
|
90
120
|
prerelease: false
|
91
|
-
version_requirements:
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: 0.0.4
|
92
127
|
- !ruby/object:Gem::Dependency
|
93
128
|
name: curb
|
94
|
-
requirement:
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
95
130
|
none: false
|
96
131
|
requirements:
|
97
132
|
- - ! '>='
|
@@ -99,10 +134,15 @@ dependencies:
|
|
99
134
|
version: 0.7.14
|
100
135
|
type: :runtime
|
101
136
|
prerelease: false
|
102
|
-
version_requirements:
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 0.7.14
|
103
143
|
- !ruby/object:Gem::Dependency
|
104
144
|
name: yajl-ruby
|
105
|
-
requirement:
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
106
146
|
none: false
|
107
147
|
requirements:
|
108
148
|
- - ! '>='
|
@@ -110,10 +150,15 @@ dependencies:
|
|
110
150
|
version: '0'
|
111
151
|
type: :runtime
|
112
152
|
prerelease: false
|
113
|
-
version_requirements:
|
153
|
+
version_requirements: !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
155
|
+
requirements:
|
156
|
+
- - ! '>='
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
114
159
|
- !ruby/object:Gem::Dependency
|
115
160
|
name: queryparams
|
116
|
-
requirement:
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
117
162
|
none: false
|
118
163
|
requirements:
|
119
164
|
- - ! '>='
|
@@ -121,10 +166,15 @@ dependencies:
|
|
121
166
|
version: '0'
|
122
167
|
type: :runtime
|
123
168
|
prerelease: false
|
124
|
-
version_requirements:
|
169
|
+
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
none: false
|
171
|
+
requirements:
|
172
|
+
- - ! '>='
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
125
175
|
- !ruby/object:Gem::Dependency
|
126
176
|
name: futurevalue
|
127
|
-
requirement:
|
177
|
+
requirement: !ruby/object:Gem::Requirement
|
128
178
|
none: false
|
129
179
|
requirements:
|
130
180
|
- - ! '>='
|
@@ -132,10 +182,15 @@ dependencies:
|
|
132
182
|
version: '0'
|
133
183
|
type: :runtime
|
134
184
|
prerelease: false
|
135
|
-
version_requirements:
|
185
|
+
version_requirements: !ruby/object:Gem::Requirement
|
186
|
+
none: false
|
187
|
+
requirements:
|
188
|
+
- - ! '>='
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
version: '0'
|
136
191
|
- !ruby/object:Gem::Dependency
|
137
192
|
name: pathbuilder
|
138
|
-
requirement:
|
193
|
+
requirement: !ruby/object:Gem::Requirement
|
139
194
|
none: false
|
140
195
|
requirements:
|
141
196
|
- - ! '>='
|
@@ -143,10 +198,15 @@ dependencies:
|
|
143
198
|
version: '0'
|
144
199
|
type: :runtime
|
145
200
|
prerelease: false
|
146
|
-
version_requirements:
|
201
|
+
version_requirements: !ruby/object:Gem::Requirement
|
202
|
+
none: false
|
203
|
+
requirements:
|
204
|
+
- - ! '>='
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
147
207
|
- !ruby/object:Gem::Dependency
|
148
208
|
name: nokogiri
|
149
|
-
requirement:
|
209
|
+
requirement: !ruby/object:Gem::Requirement
|
150
210
|
none: false
|
151
211
|
requirements:
|
152
212
|
- - ! '>='
|
@@ -154,10 +214,15 @@ dependencies:
|
|
154
214
|
version: '0'
|
155
215
|
type: :runtime
|
156
216
|
prerelease: false
|
157
|
-
version_requirements:
|
217
|
+
version_requirements: !ruby/object:Gem::Requirement
|
218
|
+
none: false
|
219
|
+
requirements:
|
220
|
+
- - ! '>='
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
158
223
|
- !ruby/object:Gem::Dependency
|
159
224
|
name: i18n
|
160
|
-
requirement:
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
161
226
|
none: false
|
162
227
|
requirements:
|
163
228
|
- - ! '>='
|
@@ -165,10 +230,15 @@ dependencies:
|
|
165
230
|
version: '0'
|
166
231
|
type: :runtime
|
167
232
|
prerelease: false
|
168
|
-
version_requirements:
|
233
|
+
version_requirements: !ruby/object:Gem::Requirement
|
234
|
+
none: false
|
235
|
+
requirements:
|
236
|
+
- - ! '>='
|
237
|
+
- !ruby/object:Gem::Version
|
238
|
+
version: '0'
|
169
239
|
- !ruby/object:Gem::Dependency
|
170
240
|
name: activesupport
|
171
|
-
requirement:
|
241
|
+
requirement: !ruby/object:Gem::Requirement
|
172
242
|
none: false
|
173
243
|
requirements:
|
174
244
|
- - ! '>='
|
@@ -176,10 +246,15 @@ dependencies:
|
|
176
246
|
version: '0'
|
177
247
|
type: :runtime
|
178
248
|
prerelease: false
|
179
|
-
version_requirements:
|
249
|
+
version_requirements: !ruby/object:Gem::Requirement
|
250
|
+
none: false
|
251
|
+
requirements:
|
252
|
+
- - ! '>='
|
253
|
+
- !ruby/object:Gem::Version
|
254
|
+
version: '0'
|
180
255
|
- !ruby/object:Gem::Dependency
|
181
256
|
name: bunny
|
182
|
-
requirement:
|
257
|
+
requirement: !ruby/object:Gem::Requirement
|
183
258
|
none: false
|
184
259
|
requirements:
|
185
260
|
- - ! '>='
|
@@ -187,7 +262,12 @@ dependencies:
|
|
187
262
|
version: '0'
|
188
263
|
type: :runtime
|
189
264
|
prerelease: false
|
190
|
-
version_requirements:
|
265
|
+
version_requirements: !ruby/object:Gem::Requirement
|
266
|
+
none: false
|
267
|
+
requirements:
|
268
|
+
- - ! '>='
|
269
|
+
- !ruby/object:Gem::Version
|
270
|
+
version: '0'
|
191
271
|
description: Development tools for working with Pebblebed
|
192
272
|
email:
|
193
273
|
- katrina@bengler.no
|
@@ -247,15 +327,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
247
327
|
- - ! '>='
|
248
328
|
- !ruby/object:Gem::Version
|
249
329
|
version: '0'
|
330
|
+
segments:
|
331
|
+
- 0
|
332
|
+
hash: -4488871030272884545
|
250
333
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
251
334
|
none: false
|
252
335
|
requirements:
|
253
336
|
- - ! '>='
|
254
337
|
- !ruby/object:Gem::Version
|
255
338
|
version: '0'
|
339
|
+
segments:
|
340
|
+
- 0
|
341
|
+
hash: -4488871030272884545
|
256
342
|
requirements: []
|
257
343
|
rubyforge_project: pebblebed
|
258
|
-
rubygems_version: 1.8.
|
344
|
+
rubygems_version: 1.8.25
|
259
345
|
signing_key:
|
260
346
|
specification_version: 3
|
261
347
|
summary: Development tools for working with Pebblebed
|
@@ -274,4 +360,3 @@ test_files:
|
|
274
360
|
- spec/sinatra_spec.rb
|
275
361
|
- spec/spec_helper.rb
|
276
362
|
- spec/uid_spec.rb
|
277
|
-
has_rdoc:
|