diff options
Diffstat (limited to 'lib/chef_zero/endpoints')
-rw-r--r-- | lib/chef_zero/endpoints/organization_endpoint.rb | 37 | ||||
-rw-r--r-- | lib/chef_zero/endpoints/organization_validator_key_endpoint.rb | 20 | ||||
-rw-r--r-- | lib/chef_zero/endpoints/organizations_endpoint.rb | 55 |
3 files changed, 112 insertions, 0 deletions
diff --git a/lib/chef_zero/endpoints/organization_endpoint.rb b/lib/chef_zero/endpoints/organization_endpoint.rb new file mode 100644 index 0000000..554982f --- /dev/null +++ b/lib/chef_zero/endpoints/organization_endpoint.rb @@ -0,0 +1,37 @@ +require 'json' +require 'chef_zero/rest_base' + +module ChefZero + module Endpoints + # /organizations/NAME + class OrganizationEndpoint < RestBase + def get(request) + org = get_data(request, request.rest_path + [ 'org' ]) + already_json_response(200, populate_defaults(request, org)) + end + + def put(request) + org = JSON.parse(get_data(request, request.rest_path + [ 'org' ]), :create_additions => false) + new_org = JSON.parse(request.body, :create_additions => false) + new_org.each do |key, value| + org[key] = value + end + org = JSON.pretty_generate(org) + set_data(request, request.rest_path + [ 'org' ], org) + already_json_response(200, populate_defaults(request, org)) + end + + def delete(request) + org = get_data(request, request.rest_path + [ 'org' ]) + delete_data_dir(request, request.rest_path) + already_json_response(200, populate_defaults(request, org)) + end + + def populate_defaults(request, response_json) + org = JSON.parse(response_json, :create_additions => false) + org = DataNormalizer.normalize_organization(org, request.rest_path[1]) + JSON.pretty_generate(org) + end + end + end +end diff --git a/lib/chef_zero/endpoints/organization_validator_key_endpoint.rb b/lib/chef_zero/endpoints/organization_validator_key_endpoint.rb new file mode 100644 index 0000000..81419a6 --- /dev/null +++ b/lib/chef_zero/endpoints/organization_validator_key_endpoint.rb @@ -0,0 +1,20 @@ +require 'json' +require 'chef_zero/rest_base' +require 'uuidtools' + +module ChefZero + module Endpoints + # /organizations/NAME/_validator_key + class OrganizationValidatorKeyEndpoint < RestBase + def post(request) + org_name = request.rest_path[-2] + validator_path = [ 'organizations', org_name, 'clients', "#{org_name}-validator"] + validator = JSON.parse(get_data(request, validator_path), :create_additions => false) + private_key, public_key = server.gen_key_pair + validator['public_key'] = public_key + set_data(request, validator_path, JSON.pretty_generate(validator)) + json_response(200, { 'private_key' => private_key }) + end + end + end +end diff --git a/lib/chef_zero/endpoints/organizations_endpoint.rb b/lib/chef_zero/endpoints/organizations_endpoint.rb new file mode 100644 index 0000000..76cbfad --- /dev/null +++ b/lib/chef_zero/endpoints/organizations_endpoint.rb @@ -0,0 +1,55 @@ +require 'json' +require 'chef_zero/rest_base' +require 'uuidtools' + +module ChefZero + module Endpoints + # /organizations + class OrganizationsEndpoint < RestBase + def get(request) + result = {} + data_store.list(request.rest_path).each do |name| + result[name] = build_uri(request.base_uri, request.rest_path + [name]) + end + json_response(200, result) + end + + def post(request) + contents = request.body + name = JSON.parse(contents, :create_additions => false)['name'] + if name.nil? + error(400, "Must specify 'name' in JSON") + elsif exists_data_dir?(request, request.rest_path + [ name ]) + error(409, "Organization already exists") + else + create_data_dir(request, request.rest_path, name) + + org = { + "guid" => UUIDTools::UUID.random_create, + "assigned_at" => Time.now.to_s + } + org_path = request.rest_path + [ name ] + create_data(request, org_path, 'org', JSON.pretty_generate(org)) + + if server.generate_real_keys? + # Create the validator client + validator_name = "#{name}-validator" + validator_path = org_path + [ 'clients', validator_name ] + private_key, public_key = server.gen_key_pair + validator = JSON.pretty_generate({ + 'validator' => true, + 'public_key' => public_key + }) + set_data(request, validator_path, validator) + end + + json_response(201, { + "uri" => "#{build_uri(request.base_uri, org_path)}", + "clientname" => validator_name, + "private_key" => private_key + }) + end + end + end + end +end |