chef-zero 4.3.0 → 4.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +201 -201
- data/README.md +155 -155
- data/Rakefile +31 -31
- data/bin/chef-zero +100 -100
- data/lib/chef_zero.rb +10 -10
- 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 +208 -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 -94
- 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 -22
- 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 -30
- data/lib/chef_zero/endpoints/organization_authenticate_user_endpoint.rb +26 -26
- data/lib/chef_zero/endpoints/organization_endpoint.rb +46 -46
- data/lib/chef_zero/endpoints/organization_user_base.rb +15 -15
- data/lib/chef_zero/endpoints/organization_user_endpoint.rb +26 -26
- data/lib/chef_zero/endpoints/organization_users_endpoint.rb +43 -43
- data/lib/chef_zero/endpoints/organization_validator_key_endpoint.rb +20 -20
- data/lib/chef_zero/endpoints/organizations_endpoint.rb +62 -62
- data/lib/chef_zero/endpoints/policies_endpoint.rb +151 -151
- 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 -194
- data/lib/chef_zero/endpoints/searches_endpoint.rb +18 -18
- data/lib/chef_zero/endpoints/server_api_version_endpoint.rb +14 -14
- 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 -242
- data/lib/chef_zero/rest_error_response.rb +11 -11
- data/lib/chef_zero/rest_request.rb +69 -69
- data/lib/chef_zero/rest_router.rb +45 -45
- data/lib/chef_zero/rspec.rb +308 -308
- data/lib/chef_zero/server.rb +642 -642
- 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 -63
- data/spec/search_spec.rb +32 -32
- data/spec/server_spec.rb +92 -92
- data/spec/socketless_server_map_spec.rb +76 -76
- data/spec/support/oc_pedant.rb +132 -132
- data/spec/support/stickywicket.pem +27 -27
- metadata +3 -3
@@ -1,22 +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
|
+
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,30 +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
|
-
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
|
+
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,46 +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
|
-
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
|
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
|
@@ -1,15 +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
|
+
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,26 +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
|
-
# Note: post to a named org user is not permitted, alllow invalid method handling (405)
|
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/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,43 +1,43 @@
|
|
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
|
+
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
|