chef-zero 4.2.3 → 4.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.
- checksums.yaml +4 -4
- data/LICENSE +201 -201
- data/README.md +155 -150
- data/Rakefile +31 -31
- data/bin/chef-zero +100 -100
- data/lib/chef_zero.rb +10 -7
- data/lib/chef_zero/chef_data/acl_path.rb +139 -139
- data/lib/chef_zero/chef_data/cookbook_data.rb +240 -240
- data/lib/chef_zero/chef_data/data_normalizer.rb +207 -207
- data/lib/chef_zero/chef_data/default_creator.rb +446 -446
- data/lib/chef_zero/data_store/data_already_exists_error.rb +29 -29
- data/lib/chef_zero/data_store/data_error.rb +31 -31
- data/lib/chef_zero/data_store/data_not_found_error.rb +28 -28
- data/lib/chef_zero/data_store/default_facade.rb +149 -149
- data/lib/chef_zero/data_store/interface_v1.rb +67 -67
- data/lib/chef_zero/data_store/interface_v2.rb +18 -18
- data/lib/chef_zero/data_store/memory_store.rb +33 -33
- data/lib/chef_zero/data_store/memory_store_v2.rb +155 -155
- data/lib/chef_zero/data_store/raw_file_store.rb +147 -147
- data/lib/chef_zero/data_store/v1_to_v2_adapter.rb +142 -142
- data/lib/chef_zero/data_store/v2_to_v1_adapter.rb +107 -107
- data/lib/chef_zero/endpoints/acl_endpoint.rb +38 -38
- data/lib/chef_zero/endpoints/acls_endpoint.rb +29 -29
- data/lib/chef_zero/endpoints/actor_endpoint.rb +94 -88
- data/lib/chef_zero/endpoints/actors_endpoint.rb +64 -64
- data/lib/chef_zero/endpoints/authenticate_user_endpoint.rb +31 -31
- data/lib/chef_zero/endpoints/container_endpoint.rb +22 -22
- data/lib/chef_zero/endpoints/containers_endpoint.rb +13 -13
- data/lib/chef_zero/endpoints/cookbook_endpoint.rb +39 -39
- data/lib/chef_zero/endpoints/cookbook_version_endpoint.rb +119 -119
- data/lib/chef_zero/endpoints/cookbooks_base.rb +65 -65
- data/lib/chef_zero/endpoints/cookbooks_endpoint.rb +19 -19
- data/lib/chef_zero/endpoints/data_bag_endpoint.rb +45 -45
- data/lib/chef_zero/endpoints/data_bag_item_endpoint.rb +25 -25
- data/lib/chef_zero/endpoints/data_bags_endpoint.rb +23 -23
- data/lib/chef_zero/endpoints/environment_cookbook_endpoint.rb +24 -24
- data/lib/chef_zero/endpoints/environment_cookbook_versions_endpoint.rb +123 -123
- data/lib/chef_zero/endpoints/environment_cookbooks_endpoint.rb +22 -22
- data/lib/chef_zero/endpoints/environment_endpoint.rb +33 -33
- data/lib/chef_zero/endpoints/environment_nodes_endpoint.rb +23 -23
- data/lib/chef_zero/endpoints/environment_recipes_endpoint.rb +22 -22
- data/lib/chef_zero/endpoints/environment_role_endpoint.rb +36 -36
- data/lib/chef_zero/endpoints/file_store_file_endpoint.rb +22 -22
- data/lib/chef_zero/endpoints/group_endpoint.rb +20 -20
- data/lib/chef_zero/endpoints/groups_endpoint.rb +13 -13
- data/lib/chef_zero/endpoints/license_endpoint.rb +25 -25
- data/lib/chef_zero/endpoints/node_endpoint.rb +17 -17
- data/lib/chef_zero/endpoints/node_identifiers_endpoint.rb +22 -0
- data/lib/chef_zero/endpoints/not_found_endpoint.rb +11 -11
- data/lib/chef_zero/endpoints/organization_association_request_endpoint.rb +22 -22
- data/lib/chef_zero/endpoints/organization_association_requests_endpoint.rb +30 -29
- data/lib/chef_zero/endpoints/organization_authenticate_user_endpoint.rb +26 -26
- data/lib/chef_zero/endpoints/organization_endpoint.rb +46 -41
- data/lib/chef_zero/endpoints/organization_user_base.rb +15 -0
- data/lib/chef_zero/endpoints/organization_user_endpoint.rb +26 -48
- data/lib/chef_zero/endpoints/organization_users_endpoint.rb +43 -14
- data/lib/chef_zero/endpoints/organization_validator_key_endpoint.rb +20 -20
- data/lib/chef_zero/endpoints/organizations_endpoint.rb +62 -55
- data/lib/chef_zero/endpoints/policies_endpoint.rb +151 -154
- data/lib/chef_zero/endpoints/principal_endpoint.rb +42 -42
- data/lib/chef_zero/endpoints/rest_list_endpoint.rb +42 -42
- data/lib/chef_zero/endpoints/rest_object_endpoint.rb +63 -63
- data/lib/chef_zero/endpoints/role_endpoint.rb +16 -16
- data/lib/chef_zero/endpoints/role_environments_endpoint.rb +14 -14
- data/lib/chef_zero/endpoints/sandbox_endpoint.rb +27 -27
- data/lib/chef_zero/endpoints/sandboxes_endpoint.rb +50 -50
- data/lib/chef_zero/endpoints/search_endpoint.rb +194 -192
- data/lib/chef_zero/endpoints/searches_endpoint.rb +18 -18
- data/lib/chef_zero/endpoints/server_api_version_endpoint.rb +14 -0
- data/lib/chef_zero/endpoints/system_recovery_endpoint.rb +30 -30
- data/lib/chef_zero/endpoints/user_association_request_endpoint.rb +40 -40
- data/lib/chef_zero/endpoints/user_association_requests_count_endpoint.rb +19 -19
- data/lib/chef_zero/endpoints/user_association_requests_endpoint.rb +19 -19
- data/lib/chef_zero/endpoints/user_organizations_endpoint.rb +22 -22
- data/lib/chef_zero/endpoints/version_endpoint.rb +12 -12
- data/lib/chef_zero/log.rb +7 -7
- data/lib/chef_zero/rest_base.rb +242 -214
- data/lib/chef_zero/rest_error_response.rb +11 -11
- data/lib/chef_zero/rest_request.rb +69 -65
- data/lib/chef_zero/rest_router.rb +45 -45
- data/lib/chef_zero/rspec.rb +308 -308
- data/lib/chef_zero/server.rb +642 -637
- data/lib/chef_zero/socketless_server_map.rb +92 -92
- data/lib/chef_zero/solr/query/binary_operator.rb +52 -52
- data/lib/chef_zero/solr/query/phrase.rb +23 -23
- data/lib/chef_zero/solr/query/range_query.rb +46 -46
- data/lib/chef_zero/solr/query/regexpable_query.rb +29 -29
- data/lib/chef_zero/solr/query/subquery.rb +37 -37
- data/lib/chef_zero/solr/query/term.rb +45 -45
- data/lib/chef_zero/solr/query/unary_operator.rb +43 -43
- data/lib/chef_zero/solr/solr_doc.rb +53 -53
- data/lib/chef_zero/solr/solr_parser.rb +203 -203
- data/lib/chef_zero/version.rb +3 -3
- data/spec/run_oc_pedant.rb +63 -56
- data/spec/search_spec.rb +32 -32
- data/spec/server_spec.rb +92 -91
- data/spec/socketless_server_map_spec.rb +76 -76
- data/spec/support/oc_pedant.rb +132 -134
- data/spec/support/stickywicket.pem +27 -27
- metadata +10 -15
- data/spec/run_pedant.rb +0 -103
- data/spec/support/pedant.rb +0 -129
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'ffi_yajl'
|
|
2
|
+
require 'chef_zero/rest_base'
|
|
3
|
+
require 'uuidtools'
|
|
4
|
+
|
|
5
|
+
module ChefZero
|
|
6
|
+
module Endpoints
|
|
7
|
+
# /organizations/NAME/nodes/NAME/_identifiers
|
|
8
|
+
class NodeIdentifiersEndpoint < RestBase
|
|
9
|
+
def get(request)
|
|
10
|
+
if get_data(request, request.rest_path[0..3])
|
|
11
|
+
result = {
|
|
12
|
+
:id => UUIDTools::UUID.parse_raw(request.rest_path[0..4].to_s).to_s.gsub('-',''),
|
|
13
|
+
:authz_id => '0'*32,
|
|
14
|
+
:org_id => UUIDTools::UUID.parse_raw(request.rest_path[0..1].to_s).to_s.gsub('-','') }
|
|
15
|
+
json_response(200, result)
|
|
16
|
+
else
|
|
17
|
+
raise RestErrorResponse.new(404, "Object not found: #{build_uri(request.base_uri, request.rest_path)}")
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
require 'ffi_yajl'
|
|
2
|
-
|
|
3
|
-
module ChefZero
|
|
4
|
-
module Endpoints
|
|
5
|
-
class NotFoundEndpoint
|
|
6
|
-
def call(request)
|
|
7
|
-
return [404, {"Content-Type" => "application/json"}, FFI_Yajl::Encoder.encode({"error" => ["Object not found: #{request.env['REQUEST_PATH']}"]}, :pretty => true)]
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
1
|
+
require 'ffi_yajl'
|
|
2
|
+
|
|
3
|
+
module ChefZero
|
|
4
|
+
module Endpoints
|
|
5
|
+
class NotFoundEndpoint
|
|
6
|
+
def call(request)
|
|
7
|
+
return [404, {"Content-Type" => "application/json"}, FFI_Yajl::Encoder.encode({"error" => ["Object not found: #{request.env['REQUEST_PATH']}"]}, :pretty => true)]
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
require 'ffi_yajl'
|
|
2
|
-
require 'chef_zero/rest_base'
|
|
3
|
-
|
|
4
|
-
module ChefZero
|
|
5
|
-
module Endpoints
|
|
6
|
-
# /organizations/ORG/association_requests/ID
|
|
7
|
-
class OrganizationAssociationRequestEndpoint < RestBase
|
|
8
|
-
def delete(request)
|
|
9
|
-
orgname = request.rest_path[1]
|
|
10
|
-
id = request.rest_path[3]
|
|
11
|
-
if id !~ /(.+)-#{orgname}$/
|
|
12
|
-
raise HttpErrorResponse.new(404, "Invalid ID #{id}. Must be of the form username-#{orgname}")
|
|
13
|
-
end
|
|
14
|
-
username = $1
|
|
15
|
-
path = request.rest_path[0..-2] + [username]
|
|
16
|
-
data = FFI_Yajl::Parser.parse(get_data(request, path), :create_additions => false)
|
|
17
|
-
delete_data(request, path)
|
|
18
|
-
json_response(200, { "id" => id, "username" => username })
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
1
|
+
require 'ffi_yajl'
|
|
2
|
+
require 'chef_zero/rest_base'
|
|
3
|
+
|
|
4
|
+
module ChefZero
|
|
5
|
+
module Endpoints
|
|
6
|
+
# /organizations/ORG/association_requests/ID
|
|
7
|
+
class OrganizationAssociationRequestEndpoint < RestBase
|
|
8
|
+
def delete(request)
|
|
9
|
+
orgname = request.rest_path[1]
|
|
10
|
+
id = request.rest_path[3]
|
|
11
|
+
if id !~ /(.+)-#{orgname}$/
|
|
12
|
+
raise HttpErrorResponse.new(404, "Invalid ID #{id}. Must be of the form username-#{orgname}")
|
|
13
|
+
end
|
|
14
|
+
username = $1
|
|
15
|
+
path = request.rest_path[0..-2] + [username]
|
|
16
|
+
data = FFI_Yajl::Parser.parse(get_data(request, path), :create_additions => false)
|
|
17
|
+
delete_data(request, path)
|
|
18
|
+
json_response(200, { "id" => id, "username" => username })
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -1,29 +1,30 @@
|
|
|
1
|
-
require 'ffi_yajl'
|
|
2
|
-
require 'chef_zero/rest_base'
|
|
3
|
-
|
|
4
|
-
module ChefZero
|
|
5
|
-
module Endpoints
|
|
6
|
-
# /organizations/ORG/association_requests
|
|
7
|
-
class OrganizationAssociationRequestsEndpoint < RestBase
|
|
8
|
-
def post(request)
|
|
9
|
-
json = FFI_Yajl::Parser.parse(request.body, :create_additions => false)
|
|
10
|
-
username = json['user']
|
|
11
|
-
orgname = request.rest_path[1]
|
|
12
|
-
id = "#{username}-#{orgname}"
|
|
13
|
-
|
|
14
|
-
if exists_data?(request, [ 'organizations', orgname, 'users', username ])
|
|
15
|
-
raise RestErrorResponse.new(409, "User #{username} is already in organization #{orgname}")
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
create_data(request, request.rest_path, username, '{}')
|
|
19
|
-
json_response(201, { "uri" => build_uri(request.base_uri, request.rest_path + [ id ]) })
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def get(request)
|
|
23
|
-
orgname = request.rest_path[1]
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
end
|
|
1
|
+
require 'ffi_yajl'
|
|
2
|
+
require 'chef_zero/rest_base'
|
|
3
|
+
|
|
4
|
+
module ChefZero
|
|
5
|
+
module Endpoints
|
|
6
|
+
# /organizations/ORG/association_requests
|
|
7
|
+
class OrganizationAssociationRequestsEndpoint < RestBase
|
|
8
|
+
def post(request)
|
|
9
|
+
json = FFI_Yajl::Parser.parse(request.body, :create_additions => false)
|
|
10
|
+
username = json['user']
|
|
11
|
+
orgname = request.rest_path[1]
|
|
12
|
+
id = "#{username}-#{orgname}"
|
|
13
|
+
|
|
14
|
+
if exists_data?(request, [ 'organizations', orgname, 'users', username ])
|
|
15
|
+
raise RestErrorResponse.new(409, "User #{username} is already in organization #{orgname}")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
create_data(request, request.rest_path, username, '{}')
|
|
19
|
+
json_response(201, { "uri" => build_uri(request.base_uri, request.rest_path + [ id ]) })
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def get(request)
|
|
23
|
+
orgname = request.rest_path[1]
|
|
24
|
+
ChefZero::Endpoints::OrganizationUserBase.get(self, request) do |username|
|
|
25
|
+
{ "id" => "#{username}-#{orgname}", 'username' => username }
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
require 'ffi_yajl'
|
|
2
|
-
require 'chef_zero/rest_base'
|
|
3
|
-
|
|
4
|
-
module ChefZero
|
|
5
|
-
module Endpoints
|
|
6
|
-
# /organizations/NAME/authenticate_user
|
|
7
|
-
class OrganizationAuthenticateUserEndpoint < RestBase
|
|
8
|
-
def post(request)
|
|
9
|
-
request_json = FFI_Yajl::Parser.parse(request.body, :create_additions => false)
|
|
10
|
-
name = request_json['name']
|
|
11
|
-
password = request_json['password']
|
|
12
|
-
begin
|
|
13
|
-
user = data_store.get(request.rest_path[0..-2] + ['users', name])
|
|
14
|
-
user = FFI_Yajl::Parser.parse(user, :create_additions => false)
|
|
15
|
-
verified = user['password'] == password
|
|
16
|
-
rescue DataStore::DataNotFoundError
|
|
17
|
-
verified = false
|
|
18
|
-
end
|
|
19
|
-
json_response(200, {
|
|
20
|
-
'name' => name,
|
|
21
|
-
'verified' => !!verified
|
|
22
|
-
})
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
1
|
+
require 'ffi_yajl'
|
|
2
|
+
require 'chef_zero/rest_base'
|
|
3
|
+
|
|
4
|
+
module ChefZero
|
|
5
|
+
module Endpoints
|
|
6
|
+
# /organizations/NAME/authenticate_user
|
|
7
|
+
class OrganizationAuthenticateUserEndpoint < RestBase
|
|
8
|
+
def post(request)
|
|
9
|
+
request_json = FFI_Yajl::Parser.parse(request.body, :create_additions => false)
|
|
10
|
+
name = request_json['name']
|
|
11
|
+
password = request_json['password']
|
|
12
|
+
begin
|
|
13
|
+
user = data_store.get(request.rest_path[0..-2] + ['users', name])
|
|
14
|
+
user = FFI_Yajl::Parser.parse(user, :create_additions => false)
|
|
15
|
+
verified = user['password'] == password
|
|
16
|
+
rescue DataStore::DataNotFoundError
|
|
17
|
+
verified = false
|
|
18
|
+
end
|
|
19
|
+
json_response(200, {
|
|
20
|
+
'name' => name,
|
|
21
|
+
'verified' => !!verified
|
|
22
|
+
})
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -1,41 +1,46 @@
|
|
|
1
|
-
require 'ffi_yajl'
|
|
2
|
-
require 'chef_zero/rest_base'
|
|
3
|
-
|
|
4
|
-
module ChefZero
|
|
5
|
-
module Endpoints
|
|
6
|
-
# /organizations/NAME
|
|
7
|
-
class OrganizationEndpoint < RestBase
|
|
8
|
-
def get(request)
|
|
9
|
-
org = get_data(request, request.rest_path + [ 'org' ])
|
|
10
|
-
already_json_response(200, populate_defaults(request, org))
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def put(request)
|
|
14
|
-
org = FFI_Yajl::Parser.parse(get_data(request, request.rest_path + [ 'org' ]), :create_additions => false)
|
|
15
|
-
new_org = FFI_Yajl::Parser.parse(request.body, :create_additions => false)
|
|
16
|
-
new_org.each do |key, value|
|
|
17
|
-
org[key] = value
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
if new_org['name'] != request.rest_path[-1]
|
|
21
|
-
# This is a rename
|
|
22
|
-
return error(400, "Cannot rename org #{request.rest_path[-1]} to #{new_org['name']}: rename not supported for orgs")
|
|
23
|
-
end
|
|
24
|
-
set_data(request, request.rest_path + [ 'org' ],
|
|
25
|
-
json_response(200,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
1
|
+
require 'ffi_yajl'
|
|
2
|
+
require 'chef_zero/rest_base'
|
|
3
|
+
|
|
4
|
+
module ChefZero
|
|
5
|
+
module Endpoints
|
|
6
|
+
# /organizations/NAME
|
|
7
|
+
class OrganizationEndpoint < RestBase
|
|
8
|
+
def get(request)
|
|
9
|
+
org = get_data(request, request.rest_path + [ 'org' ])
|
|
10
|
+
already_json_response(200, populate_defaults(request, org))
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def put(request)
|
|
14
|
+
org = FFI_Yajl::Parser.parse(get_data(request, request.rest_path + [ 'org' ]), :create_additions => false)
|
|
15
|
+
new_org = FFI_Yajl::Parser.parse(request.body, :create_additions => false)
|
|
16
|
+
new_org.each do |key, value|
|
|
17
|
+
org[key] = value
|
|
18
|
+
end
|
|
19
|
+
save_org = FFI_Yajl::Encoder.encode(org, :pretty => true)
|
|
20
|
+
if new_org['name'] != request.rest_path[-1]
|
|
21
|
+
# This is a rename
|
|
22
|
+
return error(400, "Cannot rename org #{request.rest_path[-1]} to #{new_org['name']}: rename not supported for orgs")
|
|
23
|
+
end
|
|
24
|
+
set_data(request, request.rest_path + [ 'org' ], save_org)
|
|
25
|
+
json_response(200, {
|
|
26
|
+
"uri" => "#{build_uri(request.base_uri, request.rest_path)}",
|
|
27
|
+
"name" => org['name'],
|
|
28
|
+
"org_type" => org['org_type'],
|
|
29
|
+
"full_name" => org['full_name']
|
|
30
|
+
})
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def delete(request)
|
|
34
|
+
org = get_data(request, request.rest_path + [ 'org' ])
|
|
35
|
+
delete_data_dir(request, request.rest_path, :recursive)
|
|
36
|
+
already_json_response(200, populate_defaults(request, org))
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def populate_defaults(request, response_json)
|
|
40
|
+
org = FFI_Yajl::Parser.parse(response_json, :create_additions => false)
|
|
41
|
+
org = ChefData::DataNormalizer.normalize_organization(org, request.rest_path[1])
|
|
42
|
+
FFI_Yajl::Encoder.encode(org, :pretty => true)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'ffi_yajl'
|
|
2
|
+
require 'chef_zero/rest_base'
|
|
3
|
+
|
|
4
|
+
module ChefZero
|
|
5
|
+
module Endpoints
|
|
6
|
+
module OrganizationUserBase
|
|
7
|
+
|
|
8
|
+
def self.get(obj, request, &block)
|
|
9
|
+
result = obj.list_data(request).map(&block)
|
|
10
|
+
obj.json_response(200, result)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -1,48 +1,26 @@
|
|
|
1
|
-
require 'ffi_yajl'
|
|
2
|
-
require 'chef_zero/rest_base'
|
|
3
|
-
|
|
4
|
-
module ChefZero
|
|
5
|
-
module Endpoints
|
|
6
|
-
# /organizations/ORG/users/NAME
|
|
7
|
-
class OrganizationUserEndpoint < RestBase
|
|
8
|
-
def get(request)
|
|
9
|
-
username = request.rest_path[3]
|
|
10
|
-
get_data(request) # 404 if user is not in org
|
|
11
|
-
user = get_data(request, [ 'users', username ])
|
|
12
|
-
user = FFI_Yajl::Parser.parse(user, :create_additions => false)
|
|
13
|
-
json_response(200, ChefData::DataNormalizer.normalize_user(user, username, ['username'], server.options[:osc_compat], request.method))
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def delete(request)
|
|
17
|
-
user = get_data(request)
|
|
18
|
-
delete_data(request)
|
|
19
|
-
user = FFI_Yajl::Parser.parse(user, :create_additions => false)
|
|
20
|
-
json_response(200, ChefData::DataNormalizer.normalize_user(user, request.rest_path[3], ['username'], server.options[:osc_compat]))
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
users = get_data(request, [ 'organizations', orgname, 'groups', 'users' ])
|
|
28
|
-
users = FFI_Yajl::Parser.parse(users, :create_additions => false)
|
|
29
|
-
|
|
30
|
-
create_data(request, [ 'organizations', orgname, 'users' ], username, '{}')
|
|
31
|
-
|
|
32
|
-
# /organizations/ORG/association_requests/USERNAME-ORG
|
|
33
|
-
begin
|
|
34
|
-
delete_data(request, [ 'organizations', orgname, 'association_requests', username], :data_store_exceptions)
|
|
35
|
-
rescue DataStore::DataNotFoundError
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# Add the user to the users group if it isn't already there
|
|
39
|
-
if !users['users'] || !users['users'].include?(username)
|
|
40
|
-
users['users'] ||= []
|
|
41
|
-
users['users'] |= [ username ]
|
|
42
|
-
set_data(request, [ 'organizations', orgname, 'groups', 'users' ], FFI_Yajl::Encoder.encode(users, :pretty => true))
|
|
43
|
-
end
|
|
44
|
-
json_response(200, {})
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
1
|
+
require 'ffi_yajl'
|
|
2
|
+
require 'chef_zero/rest_base'
|
|
3
|
+
|
|
4
|
+
module ChefZero
|
|
5
|
+
module Endpoints
|
|
6
|
+
# /organizations/ORG/users/NAME
|
|
7
|
+
class OrganizationUserEndpoint < RestBase
|
|
8
|
+
def get(request)
|
|
9
|
+
username = request.rest_path[3]
|
|
10
|
+
get_data(request) # 404 if user is not in org
|
|
11
|
+
user = get_data(request, [ 'users', username ])
|
|
12
|
+
user = FFI_Yajl::Parser.parse(user, :create_additions => false)
|
|
13
|
+
json_response(200, ChefData::DataNormalizer.normalize_user(user, username, ['username'], server.options[:osc_compat], request.method))
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def delete(request)
|
|
17
|
+
user = get_data(request)
|
|
18
|
+
delete_data(request)
|
|
19
|
+
user = FFI_Yajl::Parser.parse(user, :create_additions => false)
|
|
20
|
+
json_response(200, ChefData::DataNormalizer.normalize_user(user, request.rest_path[3], ['username'], server.options[:osc_compat]))
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Note: post to a named org user is not permitted, alllow invalid method handling (405)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -1,14 +1,43 @@
|
|
|
1
|
-
require 'ffi_yajl'
|
|
2
|
-
require 'chef_zero/rest_base'
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
require 'ffi_yajl'
|
|
2
|
+
require 'chef_zero/rest_base'
|
|
3
|
+
require 'chef_zero/endpoints/organization_user_base'
|
|
4
|
+
|
|
5
|
+
module ChefZero
|
|
6
|
+
module Endpoints
|
|
7
|
+
# /organizations/ORG/users
|
|
8
|
+
class OrganizationUsersEndpoint < RestBase
|
|
9
|
+
def post(request)
|
|
10
|
+
orgname = request.rest_path[1]
|
|
11
|
+
json = FFI_Yajl::Parser.parse(request.body, :create_additions => false)
|
|
12
|
+
username = json['username']
|
|
13
|
+
|
|
14
|
+
if exists_data?(request, [ 'organizations', orgname, 'users', username ])
|
|
15
|
+
raise RestErrorResponse.new(409, "User #{username} is already in organization #{orgname}")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
users = get_data(request, [ 'organizations', orgname, 'groups', 'users' ])
|
|
19
|
+
users = FFI_Yajl::Parser.parse(users, :create_additions => false)
|
|
20
|
+
|
|
21
|
+
create_data(request, request.rest_path, username, '{}')
|
|
22
|
+
|
|
23
|
+
# /organizations/ORG/association_requests/USERNAME-ORG
|
|
24
|
+
begin
|
|
25
|
+
delete_data(request, [ 'organizations', orgname, 'association_requests', username], :data_store_exceptions)
|
|
26
|
+
rescue DataStore::DataNotFoundError
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Add the user to the users group if it isn't already there
|
|
30
|
+
if !users['users'] || !users['users'].include?(username)
|
|
31
|
+
users['users'] ||= []
|
|
32
|
+
users['users'] |= [ username ]
|
|
33
|
+
set_data(request, [ 'organizations', orgname, 'groups', 'users' ], FFI_Yajl::Encoder.encode(users, :pretty => true))
|
|
34
|
+
end
|
|
35
|
+
json_response(201, { "uri" => build_uri(request.base_uri, request.rest_path + [ username ]) })
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def get(request)
|
|
39
|
+
ChefZero::Endpoints::OrganizationUserBase.get(self, request) { |username| { "user" => { "username" => username } } }
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
require 'ffi_yajl'
|
|
2
|
-
require 'chef_zero/rest_base'
|
|
3
|
-
require 'uuidtools'
|
|
4
|
-
|
|
5
|
-
module ChefZero
|
|
6
|
-
module Endpoints
|
|
7
|
-
# /organizations/NAME/_validator_key
|
|
8
|
-
class OrganizationValidatorKeyEndpoint < RestBase
|
|
9
|
-
def post(request)
|
|
10
|
-
org_name = request.rest_path[-2]
|
|
11
|
-
validator_path = [ 'organizations', org_name, 'clients', "#{org_name}-validator"]
|
|
12
|
-
validator = FFI_Yajl::Parser.parse(get_data(request, validator_path), :create_additions => false)
|
|
13
|
-
private_key, public_key = server.gen_key_pair
|
|
14
|
-
validator['public_key'] = public_key
|
|
15
|
-
set_data(request, validator_path, FFI_Yajl::Encoder.encode(validator, :pretty => true))
|
|
16
|
-
json_response(200, { 'private_key' => private_key })
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
1
|
+
require 'ffi_yajl'
|
|
2
|
+
require 'chef_zero/rest_base'
|
|
3
|
+
require 'uuidtools'
|
|
4
|
+
|
|
5
|
+
module ChefZero
|
|
6
|
+
module Endpoints
|
|
7
|
+
# /organizations/NAME/_validator_key
|
|
8
|
+
class OrganizationValidatorKeyEndpoint < RestBase
|
|
9
|
+
def post(request)
|
|
10
|
+
org_name = request.rest_path[-2]
|
|
11
|
+
validator_path = [ 'organizations', org_name, 'clients', "#{org_name}-validator"]
|
|
12
|
+
validator = FFI_Yajl::Parser.parse(get_data(request, validator_path), :create_additions => false)
|
|
13
|
+
private_key, public_key = server.gen_key_pair
|
|
14
|
+
validator['public_key'] = public_key
|
|
15
|
+
set_data(request, validator_path, FFI_Yajl::Encoder.encode(validator, :pretty => true))
|
|
16
|
+
json_response(200, { 'private_key' => private_key })
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|