cf-uaac 1.3.0

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/spec/info_spec.rb ADDED
@@ -0,0 +1,74 @@
1
+ #--
2
+ # Cloud Foundry 2012.02.03 Beta
3
+ # Copyright (c) [2009-2012] VMware, Inc. All Rights Reserved.
4
+ #
5
+ # This product is licensed to you under the Apache License, Version 2.0 (the "License").
6
+ # You may not use this product except in compliance with the License.
7
+ #
8
+ # This product includes a number of subcomponents with
9
+ # separate copyright notices and license terms. Your use of these
10
+ # subcomponents is subject to the terms and conditions of the
11
+ # subcomponent's license, as noted in the LICENSE file.
12
+ #++
13
+
14
+ require 'spec_helper'
15
+ require 'cli'
16
+ require 'stub/uaa'
17
+
18
+ module CF::UAA
19
+
20
+ describe InfoCli do
21
+
22
+ include SpecHelper
23
+
24
+ before :all do
25
+ #Util.default_logger(:trace)
26
+ Cli.configure("", nil, StringIO.new, true)
27
+ if ENV["UAA_CLIENT_TARGET"]
28
+ @target, @stub_uaa = ENV["UAA_CLIENT_TARGET"], nil
29
+ @varz_secret = ENV['UAA_VARZ_SECRET']
30
+ else
31
+ @stub_uaa = StubUAA.new.run_on_thread
32
+ @target, @varz_secret = @stub_uaa.url, "varzsecret"
33
+ end
34
+ Cli.run("target #{@target}").should be
35
+ Cli.output.string.should include URI.parse(@target).host
36
+ end
37
+
38
+ after :all do @stub_uaa.stop if @stub_uaa end
39
+
40
+ it "gets server info" do
41
+ Cli.run("info").should be
42
+ Cli.output.string.should match /\d.\d.\d/
43
+ Cli.output.string.should include "prompts", "commit_id"
44
+ end
45
+
46
+ it "gets prompts" do
47
+ Cli.run("prompts").should be
48
+ Cli.output.string.should include "username", "password"
49
+ end
50
+
51
+ it "checks password strength" do
52
+ Cli.run("password strength PaSsW0rd").should be
53
+ Cli.output.string.should include "score", "requiredScore"
54
+ end
55
+
56
+ it "gets the server stats" do
57
+ pending "no UAA_VARZ_SECRET environment variable set" unless @varz_secret
58
+ Cli.run("stats -c varz -s #{@varz_secret}").should be
59
+ Cli.output.string.should include 'type: UAA', 'mem:', 'version:'
60
+ end
61
+
62
+ it "sets multiple targets to be fully qualified in config and targets output" do
63
+ Config.load("")
64
+ Cli.run("target example.com --force")
65
+ Cli.run("target example2.com --force")
66
+ uri = URI.parse(@target)
67
+ Cli.run("target #{uri.host}:#{uri.port}#{uri.path}")
68
+ Cli.run("targets").should be
69
+ Config.yaml.should include "https://example.com", "https://example2.com", @target
70
+ Cli.output.string.should include "https://example.com", "https://example2.com", @target
71
+ end
72
+
73
+ end
74
+ end
@@ -0,0 +1,87 @@
1
+ #--
2
+ # Cloud Foundry 2012.02.03 Beta
3
+ # Copyright (c) [2009-2012] VMware, Inc. All Rights Reserved.
4
+ #
5
+ # This product is licensed to you under the Apache License, Version 2.0 (the "License").
6
+ # You may not use this product except in compliance with the License.
7
+ #
8
+ # This product includes a number of subcomponents with
9
+ # separate copyright notices and license terms. Your use of these
10
+ # subcomponents is subject to the terms and conditions of the
11
+ # subcomponent's license, as noted in the LICENSE file.
12
+ #++
13
+
14
+ if ENV['COVERAGE']
15
+ require "simplecov"
16
+ if ENV['COVERAGE'] =~ /rcov/
17
+ require "simplecov-rcov"
18
+ SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
19
+ end
20
+ SimpleCov.add_filter "^#{File.dirname(__FILE__)}" if ENV['COVERAGE'] =~ /exclude-spec/
21
+ SimpleCov.add_filter "^#{File.expand_path(File.join(__FILE__, "..", "..", "vendor"))}" if ENV['COVERAGE'] =~ /exclude-vendor/
22
+ SimpleCov.start
23
+ end
24
+
25
+ require 'rspec'
26
+ require 'eventmachine'
27
+ require 'stub/uaa'
28
+
29
+ module CF::UAA
30
+
31
+ module SpecHelper
32
+
33
+ def capture_exception
34
+ yield
35
+ rescue Exception => e
36
+ e
37
+ end
38
+
39
+ # Runs given block on a thread or fiber and returns result.
40
+ # If eventmachine is running on another thread, the fiber
41
+ # must be on the same thread, hence EM.schedule and the
42
+ # restriction that the given block cannot include rspec matchers.
43
+ def frequest(on_fiber, &blk)
44
+ return capture_exception(&blk) unless on_fiber
45
+ result = nil
46
+ cthred = Thread.current
47
+ EM.schedule { Fiber.new { result = capture_exception(&blk); cthred.run }.resume }
48
+ Thread.stop
49
+ result
50
+ end
51
+
52
+ def setup_target(opts = {})
53
+ opts = { authorities: "clients.read,scim.read,scim.write,uaa.resource",
54
+ grant_types: "client_credentials,password",
55
+ scope: "openid,password.write"}.update(opts)
56
+ @admin_client = ENV["UAA_CLIENT_ID"] || "admin"
57
+ @admin_secret = ENV["UAA_CLIENT_SECRET"] || "adminsecret"
58
+ if ENV["UAA_CLIENT_TARGET"]
59
+ @target, @stub_uaa = ENV["UAA_CLIENT_TARGET"], nil
60
+ else
61
+ @stub_uaa = StubUAA.new(@admin_client, @admin_secret).run_on_thread
62
+ @target = @stub_uaa.url
63
+ end
64
+ Cli.run("target #{@target}").should be
65
+ Cli.run("token client get #{@admin_client} -s #{@admin_secret}")
66
+ Config.yaml.should include("access_token")
67
+ test_client = "test_client_#{Time.now.to_i}"
68
+ @test_secret = "+=tEsTsEcRet~!@"
69
+ Cli.run("client add #{test_client} -s #{@test_secret} " +
70
+ "--authorities #{opts[:authorities]} --scope #{opts[:scope]} " +
71
+ "--authorized_grant_types #{opts[:grant_types]}").should be
72
+ opts.each { |k, a| Util.arglist(a).each {|v| Cli.output.string.should include(v) }}
73
+ @test_client = test_client
74
+ end
75
+
76
+ def cleanup_target
77
+ Cli.run("context #{@admin_client}")
78
+ if @test_client && !@test_client.empty?
79
+ Cli.run("client delete #{@test_client}").should be
80
+ Cli.output.string.should include("deleted")
81
+ end
82
+ @stub_uaa.stop if @stub_uaa
83
+ end
84
+ end
85
+
86
+ end
87
+
@@ -0,0 +1,119 @@
1
+ #--
2
+ # Cloud Foundry 2012.02.03 Beta
3
+ # Copyright (c) [2009-2012] VMware, Inc. All Rights Reserved.
4
+ #
5
+ # This product is licensed to you under the Apache License, Version 2.0 (the "License").
6
+ # You may not use this product except in compliance with the License.
7
+ #
8
+ # This product includes a number of subcomponents with
9
+ # separate copyright notices and license terms. Your use of these
10
+ # subcomponents is subject to the terms and conditions of the
11
+ # subcomponent's license, as noted in the LICENSE file.
12
+ #++
13
+
14
+ require 'spec_helper'
15
+ require 'cli'
16
+
17
+ module CF::UAA
18
+
19
+ describe TokenCli do
20
+
21
+ include SpecHelper
22
+
23
+ before :all do
24
+ #Util.default_logger(:trace)
25
+ Cli.configure("", nil, StringIO.new, true)
26
+ setup_target(authorities: "clients.read,scim.read,scim.write,uaa.resource")
27
+ Cli.run("token client get #{@test_client} -s #{@test_secret}").should be
28
+ Config.yaml.should include("access_token")
29
+ @test_pwd = "TesTpwd$%^"
30
+ @test_user = "tEst_UseR+-#{Time.now.to_i}"
31
+ Cli.run("user add #{@test_user} -p #{@test_pwd} " +
32
+ "--emails sam@example.com,joNES@sample.com --given_name SamueL " +
33
+ "--phones 801-555-1212 --family_name jonES").should be
34
+ end
35
+
36
+ after :all do cleanup_target end
37
+
38
+ it "gets the server signing key" do
39
+ Cli.run("signing key -c #{@test_client} -s #{@test_secret}").should be
40
+ Cli.output.string.should include 'alg:', 'value:'
41
+ end
42
+
43
+ it "logs in with implicit grant & posted credentials as a user" do
44
+ Cli.run("token get #{@test_user} #{@test_pwd}").should be
45
+ Cli.output.string.should include("Successfully fetched token")
46
+ end
47
+
48
+ it "decodes the token" do
49
+ Cli.run("token decode").should be
50
+ ["user_name", "exp", "aud", "scope", "client_id", "email", "user_id"].each do |a|
51
+ Cli.output.string.should include(a)
52
+ end
53
+ Cli.output.string.should include("email: sam@example.com")
54
+ #Cli.output.string.should include("user_name: #{@test_user}")
55
+ end
56
+
57
+ it "gets authenticated user information" do
58
+ Cli.run("me").should be
59
+ Cli.output.string.should include(@test_user)
60
+ end
61
+
62
+ it "updates the user" do
63
+ Cli.run "context #{@test_client}"
64
+ Cli.run("user update #{@test_user} --emails #{@test_user}+1@example.com --phones 123-456-7890").should be
65
+ Cli.run("user get #{@test_user}").should be
66
+ Cli.output.string.should include(@test_user, "#{@test_user}+1@example.com", "123-456-7890")
67
+ end
68
+
69
+ it "gets updated information in the token" do
70
+ Cli.run("token get #{@test_user} #{@test_pwd}").should be
71
+ Cli.output.string.should include("Successfully fetched token")
72
+ Cli.run("token decode").should be
73
+ Cli.output.string.should include("email: #{@test_user}+1@example.com")
74
+ end
75
+
76
+ it "gets ids for a username" do
77
+ Cli.run("user ids #{@test_user.downcase}").should be
78
+ Cli.output.string.should include(@test_user, "id")
79
+ end
80
+
81
+ it "has multiple distinct authentication contexts" do
82
+ Cli.run("contexts").should be
83
+ Cli.output.string.should include "[admin]", "[#{@test_client}]", "[#{@test_user.downcase}]"
84
+ end
85
+
86
+ it "removes the user context" do
87
+ Cli.run("token delete #{@test_user}").should be
88
+ Cli.run "contexts"
89
+ Cli.output.string.should include "[admin]", "[#{@test_client}]"
90
+ Cli.output.string.should_not include "#{@test_user}"
91
+ end
92
+
93
+ it "logs in with owner password grant" do
94
+ Cli.run("token owner get #{@test_client} -s #{@test_secret} #{@test_user} -p #{@test_pwd}" ).should be
95
+ Cli.output.string.should include "Successfully fetched token"
96
+ end
97
+
98
+ it "decodes the owner token" do
99
+ Cli.run("token decode").should be
100
+ ["user_name", "exp", "aud", "scope", "client_id", "email", "user_id", "openid", "password.write"].each do |a|
101
+ Cli.output.string.should include a
102
+ end
103
+ end
104
+
105
+ it "uses the token endpoint given by the login server" do
106
+ pending "only saml login server returns token endpoint" if ENV["UAA_CLIENT_TARGET"]
107
+ @stub_uaa.info[:token_endpoint] = te = "#{@stub_uaa.url}/alternate"
108
+ Cli.run("target #{@target} --config")
109
+ Cli.run("token client get #{@test_client} -s #{@test_secret}").should be
110
+ Config.yaml.should include("access_token", "token_endpoint", te)
111
+ @stub_uaa.info[:token_endpoint].should be_nil
112
+ Cli.configure("", nil, StringIO.new) # clean up
113
+ Cli.run("target #{@target}").should be
114
+ Cli.run("token client get #{@admin_client} -s #{@admin_secret}").should be
115
+ end
116
+
117
+ end
118
+
119
+ end
data/spec/user_spec.rb ADDED
@@ -0,0 +1,61 @@
1
+ #--
2
+ # Cloud Foundry 2012.02.03 Beta
3
+ # Copyright (c) [2009-2012] VMware, Inc. All Rights Reserved.
4
+ #
5
+ # This product is licensed to you under the Apache License, Version 2.0 (the "License").
6
+ # You may not use this product except in compliance with the License.
7
+ #
8
+ # This product includes a number of subcomponents with
9
+ # separate copyright notices and license terms. Your use of these
10
+ # subcomponents is subject to the terms and conditions of the
11
+ # subcomponent's license, as noted in the LICENSE file.
12
+ #++
13
+
14
+ require 'spec_helper'
15
+ require 'cli'
16
+
17
+ module CF::UAA
18
+
19
+ describe UserCli do
20
+
21
+ include SpecHelper
22
+
23
+ before :all do
24
+ #Util.default_logger(:trace)
25
+ Cli.configure("", nil, StringIO.new, true)
26
+ setup_target(authorities: "clients.read,scim.read,scim.write")
27
+ Cli.run("token client get #{@test_client} -s #{@test_secret}").should be
28
+ Config.yaml.should include("access_token")
29
+ @test_pwd = "TesTpwd$%^"
30
+ @test_user = "tEst_UseR_#{Time.now.to_i}"
31
+ Cli.run("user add #{@test_user} -p #{@test_pwd} " +
32
+ "--emails sam@example.com,joNES@sample.com --given_name SamueL " +
33
+ "--phones 801-555-1212 --family_name jonES").should be
34
+ end
35
+
36
+ after :all do cleanup_target end
37
+
38
+ it "creates a user" do
39
+ Cli.output.string.should include "success"
40
+ end
41
+
42
+ it "fails to change a user's password with the wrong old pwd" do
43
+ Cli.run("password change -p newpwd --old_password not-the-password").should be_nil
44
+ end
45
+
46
+ it "changes a user's password" do
47
+ Cli.run("token get #{@test_user} #{@test_pwd}").should be
48
+ Cli.run("password change -p newpwd --old_password #{@test_pwd}").should be
49
+ Cli.run("token get #{@test_user} newpwd").should be
50
+ Cli.output.string.should include "Successfully fetched token"
51
+ end
52
+
53
+ it "preserves case in names" do
54
+ Cli.run("context #{@test_client}")
55
+ Cli.run("user get #{@test_user.upcase}").should be
56
+ Cli.output.string.should =~ /#{@test_user}/
57
+ end
58
+
59
+ end
60
+
61
+ end
metadata ADDED
@@ -0,0 +1,292 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cf-uaac
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.3.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dave Syer
9
+ - Dale Olds
10
+ - Joel D'sa
11
+ - Vidya Valmikinathan
12
+ - Luke Taylor
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+ date: 2012-12-05 00:00:00.000000000 Z
17
+ dependencies:
18
+ - !ruby/object:Gem::Dependency
19
+ name: bundler
20
+ requirement: !ruby/object:Gem::Requirement
21
+ none: false
22
+ requirements:
23
+ - - ! '>='
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ type: :development
27
+ prerelease: false
28
+ version_requirements: !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ - !ruby/object:Gem::Dependency
35
+ name: rake
36
+ requirement: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ type: :development
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ - !ruby/object:Gem::Dependency
51
+ name: rspec
52
+ requirement: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ type: :development
59
+ prerelease: false
60
+ version_requirements: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ - !ruby/object:Gem::Dependency
67
+ name: simplecov
68
+ requirement: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: simplecov-rcov
84
+ requirement: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ! '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: ci_reporter
100
+ requirement: !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ! '>='
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ type: :development
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ - !ruby/object:Gem::Dependency
115
+ name: highline
116
+ requirement: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ type: :runtime
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ - !ruby/object:Gem::Dependency
131
+ name: cf-uaa-lib
132
+ requirement: !ruby/object:Gem::Requirement
133
+ none: false
134
+ requirements:
135
+ - - ! '>='
136
+ - !ruby/object:Gem::Version
137
+ version: 1.3.0
138
+ type: :runtime
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ! '>='
144
+ - !ruby/object:Gem::Version
145
+ version: 1.3.0
146
+ - !ruby/object:Gem::Dependency
147
+ name: multi_json
148
+ requirement: !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ type: :runtime
155
+ prerelease: false
156
+ version_requirements: !ruby/object:Gem::Requirement
157
+ none: false
158
+ requirements:
159
+ - - ! '>='
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ - !ruby/object:Gem::Dependency
163
+ name: eventmachine
164
+ requirement: !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - ! '>='
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ type: :runtime
171
+ prerelease: false
172
+ version_requirements: !ruby/object:Gem::Requirement
173
+ none: false
174
+ requirements:
175
+ - - ! '>='
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ - !ruby/object:Gem::Dependency
179
+ name: launchy
180
+ requirement: !ruby/object:Gem::Requirement
181
+ none: false
182
+ requirements:
183
+ - - ! '>='
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ type: :runtime
187
+ prerelease: false
188
+ version_requirements: !ruby/object:Gem::Requirement
189
+ none: false
190
+ requirements:
191
+ - - ! '>='
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ - !ruby/object:Gem::Dependency
195
+ name: em-http-request
196
+ requirement: !ruby/object:Gem::Requirement
197
+ none: false
198
+ requirements:
199
+ - - ! '>='
200
+ - !ruby/object:Gem::Version
201
+ version: 1.0.0.beta.3
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ none: false
206
+ requirements:
207
+ - - ! '>='
208
+ - !ruby/object:Gem::Version
209
+ version: 1.0.0.beta.3
210
+ description: Client command line tools for interacting with the CloudFoundry User
211
+ Account and Authorization (UAA) server. The UAA is an OAuth2 Authorization Server
212
+ so it can be used by webapps and command line apps to obtain access tokens to act
213
+ on behalf of users. The tokens can then be used to access protected resources in
214
+ a Resource Server. This library can be used by clients (as a convenient wrapper
215
+ for mainstream oauth gems) or by resource servers.
216
+ email:
217
+ - dsyer@vmware.com
218
+ - olds@vmware.com
219
+ - jdsa@vmware.com
220
+ - vidya@vmware.com
221
+ - ltaylor@vmware.com
222
+ executables:
223
+ - completion-helper
224
+ - uaac
225
+ - uaac-completion.sh
226
+ - uaas
227
+ extensions: []
228
+ extra_rdoc_files: []
229
+ files:
230
+ - .gitignore
231
+ - Gemfile
232
+ - README.md
233
+ - Rakefile
234
+ - bin/completion-helper
235
+ - bin/uaac
236
+ - bin/uaac-completion.sh
237
+ - bin/uaas
238
+ - cf-uaac.gemspec
239
+ - lib/cli.rb
240
+ - lib/cli/base.rb
241
+ - lib/cli/client_reg.rb
242
+ - lib/cli/common.rb
243
+ - lib/cli/config.rb
244
+ - lib/cli/favicon.ico
245
+ - lib/cli/group.rb
246
+ - lib/cli/info.rb
247
+ - lib/cli/runner.rb
248
+ - lib/cli/token.rb
249
+ - lib/cli/user.rb
250
+ - lib/cli/version.rb
251
+ - lib/stub/scim.rb
252
+ - lib/stub/server.rb
253
+ - lib/stub/uaa.rb
254
+ - spec/client_reg_spec.rb
255
+ - spec/common_spec.rb
256
+ - spec/group_spec.rb
257
+ - spec/http_spec.rb
258
+ - spec/info_spec.rb
259
+ - spec/spec_helper.rb
260
+ - spec/token_spec.rb
261
+ - spec/user_spec.rb
262
+ homepage: https://github.com/cloudfoundry/cf-uaac
263
+ licenses: []
264
+ post_install_message:
265
+ rdoc_options: []
266
+ require_paths:
267
+ - lib
268
+ required_ruby_version: !ruby/object:Gem::Requirement
269
+ none: false
270
+ requirements:
271
+ - - ! '>='
272
+ - !ruby/object:Gem::Version
273
+ version: '0'
274
+ segments:
275
+ - 0
276
+ hash: -3878497912978208519
277
+ required_rubygems_version: !ruby/object:Gem::Requirement
278
+ none: false
279
+ requirements:
280
+ - - ! '>='
281
+ - !ruby/object:Gem::Version
282
+ version: '0'
283
+ segments:
284
+ - 0
285
+ hash: -3878497912978208519
286
+ requirements: []
287
+ rubyforge_project: cf-uaac
288
+ rubygems_version: 1.8.21
289
+ signing_key:
290
+ specification_version: 3
291
+ summary: Command line interface for CloudFoundry UAA
292
+ test_files: []