Class: ChefZero::Endpoints::PrincipalEndpoint

Inherits:
RestBase
  • Object
show all
Defined in:
lib/chef_zero/endpoints/principal_endpoint.rb

Overview

/principals/NAME

Constant Summary

Constants inherited from RestBase

RestBase::DEFAULT_REQUEST_VERSION, RestBase::DEFAULT_RESPONSE_VERSION

Instance Attribute Summary

Attributes inherited from RestBase

#server

Instance Method Summary collapse

Methods inherited from RestBase

#accepts?, #already_json_response, #build_uri, build_uri, #call, #check_api_version, #create_data, #create_data_dir, #data_store, #delete_data, #delete_data_dir, #error, #exists_data?, #exists_data_dir?, #get_data, #get_data_or_else, #hashify_list, #head_request, #initialize, #json_only, #json_response, #list_data, #list_data_or_else, #parse_json, #policy_name_invalid?, #populate_defaults, rfc2396_parser, #set_data, #text_response, #to_json

Constructor Details

This class inherits a constructor from ChefZero::RestBase

Instance Method Details

#get(request) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/chef_zero/endpoints/principal_endpoint.rb', line 9

def get(request)
  name = request.rest_path[-1]
  # If /organizations/ORG/users/NAME exists, use this user (only org members have precedence over clients).        hey are an org member.
  json = get_data(request, request.rest_path[0..1] + [ "users", name ], :nil)
  if json
    type = "user"
    org_member = true
  else
    # If /organizations/ORG/clients/NAME exists, use the client.
    json = get_data(request, request.rest_path[0..1] + [ "clients", name ], :nil)
    if json
      type = "client"
      org_member = true
    else
      # If there is no client with that name, check for a user (/users/NAME) and return that with
      # org_member = false.
      json = get_data(request, [ "users", name ], :nil)
      if json
        type = "user"
        org_member = false
      end
    end
  end
  if json
    principal_data = {
      "name" => name,
      "type" => type,
      "public_key" => FFI_Yajl::Parser.parse(json)["public_key"] || PUBLIC_KEY,
      "authz_id" => "0" * 32,
      "org_member" => org_member,
    }

    response_data =
      if request.api_v0?
        principal_data
      else
        { "principals" => [ principal_data ] }
      end

    json_response(200, response_data)
  else
    error(404, "Principal not found")
  end
end