chef-zero 4.8.0 → 4.9.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.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +8 -4
  3. data/Rakefile +20 -10
  4. data/bin/chef-zero +12 -12
  5. data/chef-zero.gemspec +24 -24
  6. data/lib/chef_zero.rb +1 -1
  7. data/lib/chef_zero/chef_data/acl_path.rb +16 -16
  8. data/lib/chef_zero/chef_data/cookbook_data.rb +24 -24
  9. data/lib/chef_zero/chef_data/data_normalizer.rb +120 -120
  10. data/lib/chef_zero/chef_data/default_creator.rb +145 -145
  11. data/lib/chef_zero/data_store/data_already_exists_error.rb +1 -1
  12. data/lib/chef_zero/data_store/data_not_found_error.rb +2 -2
  13. data/lib/chef_zero/data_store/default_facade.rb +5 -5
  14. data/lib/chef_zero/data_store/interface_v1.rb +1 -1
  15. data/lib/chef_zero/data_store/interface_v2.rb +1 -1
  16. data/lib/chef_zero/data_store/memory_store.rb +4 -4
  17. data/lib/chef_zero/data_store/memory_store_v2.rb +8 -8
  18. data/lib/chef_zero/data_store/raw_file_store.rb +10 -10
  19. data/lib/chef_zero/data_store/v1_to_v2_adapter.rb +9 -9
  20. data/lib/chef_zero/data_store/v2_to_v1_adapter.rb +5 -5
  21. data/lib/chef_zero/endpoints/acl_endpoint.rb +6 -6
  22. data/lib/chef_zero/endpoints/acls_endpoint.rb +5 -5
  23. data/lib/chef_zero/endpoints/actor_default_key_endpoint.rb +1 -1
  24. data/lib/chef_zero/endpoints/actor_endpoint.rb +20 -20
  25. data/lib/chef_zero/endpoints/actor_key_endpoint.rb +1 -1
  26. data/lib/chef_zero/endpoints/actor_keys_endpoint.rb +5 -6
  27. data/lib/chef_zero/endpoints/actors_endpoint.rb +12 -12
  28. data/lib/chef_zero/endpoints/authenticate_user_endpoint.rb +10 -10
  29. data/lib/chef_zero/endpoints/container_endpoint.rb +4 -4
  30. data/lib/chef_zero/endpoints/containers_endpoint.rb +3 -3
  31. data/lib/chef_zero/endpoints/cookbook_artifact_endpoint.rb +1 -1
  32. data/lib/chef_zero/endpoints/cookbook_artifact_identifier_endpoint.rb +1 -1
  33. data/lib/chef_zero/endpoints/cookbook_artifacts_endpoint.rb +1 -1
  34. data/lib/chef_zero/endpoints/cookbook_endpoint.rb +5 -5
  35. data/lib/chef_zero/endpoints/cookbook_version_endpoint.rb +20 -16
  36. data/lib/chef_zero/endpoints/cookbooks_base.rb +13 -13
  37. data/lib/chef_zero/endpoints/cookbooks_endpoint.rb +4 -4
  38. data/lib/chef_zero/endpoints/data_bag_endpoint.rb +12 -12
  39. data/lib/chef_zero/endpoints/data_bag_item_endpoint.rb +6 -6
  40. data/lib/chef_zero/endpoints/data_bags_endpoint.rb +5 -5
  41. data/lib/chef_zero/endpoints/dummy_endpoint.rb +0 -2
  42. data/lib/chef_zero/endpoints/environment_cookbook_endpoint.rb +6 -6
  43. data/lib/chef_zero/endpoints/environment_cookbook_versions_endpoint.rb +16 -16
  44. data/lib/chef_zero/endpoints/environment_cookbooks_endpoint.rb +6 -6
  45. data/lib/chef_zero/endpoints/environment_endpoint.rb +3 -3
  46. data/lib/chef_zero/endpoints/environment_nodes_endpoint.rb +6 -6
  47. data/lib/chef_zero/endpoints/environment_recipes_endpoint.rb +4 -4
  48. data/lib/chef_zero/endpoints/environment_role_endpoint.rb +8 -8
  49. data/lib/chef_zero/endpoints/file_store_file_endpoint.rb +2 -2
  50. data/lib/chef_zero/endpoints/group_endpoint.rb +4 -4
  51. data/lib/chef_zero/endpoints/groups_endpoint.rb +3 -3
  52. data/lib/chef_zero/endpoints/license_endpoint.rb +5 -5
  53. data/lib/chef_zero/endpoints/node_endpoint.rb +3 -4
  54. data/lib/chef_zero/endpoints/node_identifiers_endpoint.rb +7 -7
  55. data/lib/chef_zero/endpoints/nodes_endpoint.rb +3 -4
  56. data/lib/chef_zero/endpoints/not_found_endpoint.rb +2 -2
  57. data/lib/chef_zero/endpoints/organization_association_request_endpoint.rb +2 -2
  58. data/lib/chef_zero/endpoints/organization_association_requests_endpoint.rb +6 -6
  59. data/lib/chef_zero/endpoints/organization_authenticate_user_endpoint.rb +8 -8
  60. data/lib/chef_zero/endpoints/organization_endpoint.rb +10 -10
  61. data/lib/chef_zero/endpoints/organization_user_base.rb +2 -2
  62. data/lib/chef_zero/endpoints/organization_user_default_key_endpoint.rb +1 -1
  63. data/lib/chef_zero/endpoints/organization_user_endpoint.rb +5 -5
  64. data/lib/chef_zero/endpoints/organization_user_key_endpoint.rb +2 -2
  65. data/lib/chef_zero/endpoints/organization_user_keys_endpoint.rb +1 -1
  66. data/lib/chef_zero/endpoints/organization_users_endpoint.rb +12 -12
  67. data/lib/chef_zero/endpoints/organization_validator_key_endpoint.rb +6 -6
  68. data/lib/chef_zero/endpoints/organizations_endpoint.rb +12 -13
  69. data/lib/chef_zero/endpoints/policies_endpoint.rb +2 -2
  70. data/lib/chef_zero/endpoints/policy_endpoint.rb +1 -1
  71. data/lib/chef_zero/endpoints/policy_group_endpoint.rb +6 -6
  72. data/lib/chef_zero/endpoints/policy_group_policy_endpoint.rb +3 -4
  73. data/lib/chef_zero/endpoints/policy_groups_endpoint.rb +4 -4
  74. data/lib/chef_zero/endpoints/policy_revision_endpoint.rb +1 -1
  75. data/lib/chef_zero/endpoints/policy_revisions_endpoint.rb +1 -1
  76. data/lib/chef_zero/endpoints/principal_endpoint.rb +15 -15
  77. data/lib/chef_zero/endpoints/rest_list_endpoint.rb +4 -4
  78. data/lib/chef_zero/endpoints/rest_object_endpoint.rb +4 -4
  79. data/lib/chef_zero/endpoints/role_endpoint.rb +3 -3
  80. data/lib/chef_zero/endpoints/role_environments_endpoint.rb +3 -3
  81. data/lib/chef_zero/endpoints/sandbox_endpoint.rb +8 -8
  82. data/lib/chef_zero/endpoints/sandboxes_endpoint.rb +9 -9
  83. data/lib/chef_zero/endpoints/search_endpoint.rb +51 -49
  84. data/lib/chef_zero/endpoints/searches_endpoint.rb +2 -2
  85. data/lib/chef_zero/endpoints/server_api_version_endpoint.rb +2 -2
  86. data/lib/chef_zero/endpoints/system_recovery_endpoint.rb +8 -8
  87. data/lib/chef_zero/endpoints/user_association_request_endpoint.rb +12 -12
  88. data/lib/chef_zero/endpoints/user_association_requests_count_endpoint.rb +4 -4
  89. data/lib/chef_zero/endpoints/user_association_requests_endpoint.rb +4 -4
  90. data/lib/chef_zero/endpoints/user_organizations_endpoint.rb +5 -5
  91. data/lib/chef_zero/endpoints/version_endpoint.rb +1 -1
  92. data/lib/chef_zero/log.rb +1 -1
  93. data/lib/chef_zero/rest_base.rb +25 -25
  94. data/lib/chef_zero/rest_request.rb +11 -11
  95. data/lib/chef_zero/rest_router.rb +30 -30
  96. data/lib/chef_zero/rspec.rb +33 -33
  97. data/lib/chef_zero/server.rb +188 -189
  98. data/lib/chef_zero/socketless_server_map.rb +2 -3
  99. data/lib/chef_zero/solr/query/binary_operator.rb +8 -8
  100. data/lib/chef_zero/solr/query/phrase.rb +1 -1
  101. data/lib/chef_zero/solr/query/range_query.rb +2 -2
  102. data/lib/chef_zero/solr/query/regexpable_query.rb +1 -0
  103. data/lib/chef_zero/solr/query/term.rb +5 -5
  104. data/lib/chef_zero/solr/query/unary_operator.rb +4 -4
  105. data/lib/chef_zero/solr/solr_doc.rb +4 -4
  106. data/lib/chef_zero/solr/solr_parser.rb +34 -33
  107. data/lib/chef_zero/version.rb +1 -1
  108. data/spec/run_oc_pedant.rb +61 -60
  109. data/spec/search_spec.rb +11 -11
  110. data/spec/server_spec.rb +35 -35
  111. data/spec/socketless_server_map_spec.rb +1 -3
  112. data/spec/support/oc_pedant.rb +20 -21
  113. metadata +2 -2
@@ -16,113 +16,113 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require 'openssl'
20
- require 'open-uri'
21
- require 'rubygems'
22
- require 'timeout'
23
- require 'stringio'
24
-
25
- require 'rack'
26
- require 'webrick'
27
- require 'webrick/https'
28
-
29
- require 'chef_zero'
30
- require 'chef_zero/socketless_server_map'
31
- require 'chef_zero/chef_data/cookbook_data'
32
- require 'chef_zero/chef_data/acl_path'
33
- require 'chef_zero/rest_router'
34
- require 'chef_zero/data_store/memory_store_v2'
35
- require 'chef_zero/data_store/v1_to_v2_adapter'
36
- require 'chef_zero/data_store/default_facade'
37
- require 'chef_zero/version'
38
-
39
- require 'chef_zero/endpoints/rest_list_endpoint'
40
- require 'chef_zero/endpoints/authenticate_user_endpoint'
41
- require 'chef_zero/endpoints/acls_endpoint'
42
- require 'chef_zero/endpoints/acl_endpoint'
43
- require 'chef_zero/endpoints/actor_endpoint'
44
- require 'chef_zero/endpoints/actors_endpoint'
45
- require 'chef_zero/endpoints/actor_key_endpoint'
46
- require 'chef_zero/endpoints/organization_user_key_endpoint'
47
- require 'chef_zero/endpoints/organization_user_default_key_endpoint'
48
- require 'chef_zero/endpoints/organization_user_keys_endpoint'
49
- require 'chef_zero/endpoints/actor_default_key_endpoint'
50
- require 'chef_zero/endpoints/actor_keys_endpoint'
51
- require 'chef_zero/endpoints/cookbooks_endpoint'
52
- require 'chef_zero/endpoints/cookbook_endpoint'
53
- require 'chef_zero/endpoints/cookbook_version_endpoint'
54
- require 'chef_zero/endpoints/cookbook_artifacts_endpoint'
55
- require 'chef_zero/endpoints/cookbook_artifact_endpoint'
56
- require 'chef_zero/endpoints/cookbook_artifact_identifier_endpoint'
57
- require 'chef_zero/endpoints/containers_endpoint'
58
- require 'chef_zero/endpoints/container_endpoint'
59
- require 'chef_zero/endpoints/controls_endpoint'
60
- require 'chef_zero/endpoints/dummy_endpoint'
61
- require 'chef_zero/endpoints/data_bags_endpoint'
62
- require 'chef_zero/endpoints/data_bag_endpoint'
63
- require 'chef_zero/endpoints/data_bag_item_endpoint'
64
- require 'chef_zero/endpoints/groups_endpoint'
65
- require 'chef_zero/endpoints/group_endpoint'
66
- require 'chef_zero/endpoints/environment_endpoint'
67
- require 'chef_zero/endpoints/environment_cookbooks_endpoint'
68
- require 'chef_zero/endpoints/environment_cookbook_endpoint'
69
- require 'chef_zero/endpoints/environment_cookbook_versions_endpoint'
70
- require 'chef_zero/endpoints/environment_nodes_endpoint'
71
- require 'chef_zero/endpoints/environment_recipes_endpoint'
72
- require 'chef_zero/endpoints/environment_role_endpoint'
73
- require 'chef_zero/endpoints/license_endpoint'
74
- require 'chef_zero/endpoints/node_endpoint'
75
- require 'chef_zero/endpoints/nodes_endpoint'
76
- require 'chef_zero/endpoints/node_identifiers_endpoint'
77
- require 'chef_zero/endpoints/organizations_endpoint'
78
- require 'chef_zero/endpoints/organization_endpoint'
79
- require 'chef_zero/endpoints/organization_association_requests_endpoint'
80
- require 'chef_zero/endpoints/organization_association_request_endpoint'
81
- require 'chef_zero/endpoints/organization_authenticate_user_endpoint'
82
- require 'chef_zero/endpoints/organization_users_endpoint'
83
- require 'chef_zero/endpoints/organization_user_endpoint'
84
- require 'chef_zero/endpoints/organization_validator_key_endpoint'
85
- require 'chef_zero/endpoints/policies_endpoint'
86
- require 'chef_zero/endpoints/policy_endpoint'
87
- require 'chef_zero/endpoints/policy_revisions_endpoint'
88
- require 'chef_zero/endpoints/policy_revision_endpoint'
89
- require 'chef_zero/endpoints/policy_groups_endpoint'
90
- require 'chef_zero/endpoints/policy_group_endpoint'
91
- require 'chef_zero/endpoints/policy_group_policy_endpoint'
92
- require 'chef_zero/endpoints/principal_endpoint'
93
- require 'chef_zero/endpoints/role_endpoint'
94
- require 'chef_zero/endpoints/role_environments_endpoint'
95
- require 'chef_zero/endpoints/sandboxes_endpoint'
96
- require 'chef_zero/endpoints/sandbox_endpoint'
97
- require 'chef_zero/endpoints/searches_endpoint'
98
- require 'chef_zero/endpoints/search_endpoint'
99
- require 'chef_zero/endpoints/system_recovery_endpoint'
100
- require 'chef_zero/endpoints/user_association_requests_endpoint'
101
- require 'chef_zero/endpoints/user_association_requests_count_endpoint'
102
- require 'chef_zero/endpoints/user_association_request_endpoint'
103
- require 'chef_zero/endpoints/user_organizations_endpoint'
104
- require 'chef_zero/endpoints/file_store_file_endpoint'
105
- require 'chef_zero/endpoints/not_found_endpoint'
106
- require 'chef_zero/endpoints/version_endpoint'
107
- require 'chef_zero/endpoints/server_api_version_endpoint'
19
+ require "openssl"
20
+ require "open-uri"
21
+ require "rubygems"
22
+ require "timeout"
23
+ require "stringio"
24
+
25
+ require "rack"
26
+ require "webrick"
27
+ require "webrick/https"
28
+
29
+ require "chef_zero"
30
+ require "chef_zero/socketless_server_map"
31
+ require "chef_zero/chef_data/cookbook_data"
32
+ require "chef_zero/chef_data/acl_path"
33
+ require "chef_zero/rest_router"
34
+ require "chef_zero/data_store/memory_store_v2"
35
+ require "chef_zero/data_store/v1_to_v2_adapter"
36
+ require "chef_zero/data_store/default_facade"
37
+ require "chef_zero/version"
38
+
39
+ require "chef_zero/endpoints/rest_list_endpoint"
40
+ require "chef_zero/endpoints/authenticate_user_endpoint"
41
+ require "chef_zero/endpoints/acls_endpoint"
42
+ require "chef_zero/endpoints/acl_endpoint"
43
+ require "chef_zero/endpoints/actor_endpoint"
44
+ require "chef_zero/endpoints/actors_endpoint"
45
+ require "chef_zero/endpoints/actor_key_endpoint"
46
+ require "chef_zero/endpoints/organization_user_key_endpoint"
47
+ require "chef_zero/endpoints/organization_user_default_key_endpoint"
48
+ require "chef_zero/endpoints/organization_user_keys_endpoint"
49
+ require "chef_zero/endpoints/actor_default_key_endpoint"
50
+ require "chef_zero/endpoints/actor_keys_endpoint"
51
+ require "chef_zero/endpoints/cookbooks_endpoint"
52
+ require "chef_zero/endpoints/cookbook_endpoint"
53
+ require "chef_zero/endpoints/cookbook_version_endpoint"
54
+ require "chef_zero/endpoints/cookbook_artifacts_endpoint"
55
+ require "chef_zero/endpoints/cookbook_artifact_endpoint"
56
+ require "chef_zero/endpoints/cookbook_artifact_identifier_endpoint"
57
+ require "chef_zero/endpoints/containers_endpoint"
58
+ require "chef_zero/endpoints/container_endpoint"
59
+ require "chef_zero/endpoints/controls_endpoint"
60
+ require "chef_zero/endpoints/dummy_endpoint"
61
+ require "chef_zero/endpoints/data_bags_endpoint"
62
+ require "chef_zero/endpoints/data_bag_endpoint"
63
+ require "chef_zero/endpoints/data_bag_item_endpoint"
64
+ require "chef_zero/endpoints/groups_endpoint"
65
+ require "chef_zero/endpoints/group_endpoint"
66
+ require "chef_zero/endpoints/environment_endpoint"
67
+ require "chef_zero/endpoints/environment_cookbooks_endpoint"
68
+ require "chef_zero/endpoints/environment_cookbook_endpoint"
69
+ require "chef_zero/endpoints/environment_cookbook_versions_endpoint"
70
+ require "chef_zero/endpoints/environment_nodes_endpoint"
71
+ require "chef_zero/endpoints/environment_recipes_endpoint"
72
+ require "chef_zero/endpoints/environment_role_endpoint"
73
+ require "chef_zero/endpoints/license_endpoint"
74
+ require "chef_zero/endpoints/node_endpoint"
75
+ require "chef_zero/endpoints/nodes_endpoint"
76
+ require "chef_zero/endpoints/node_identifiers_endpoint"
77
+ require "chef_zero/endpoints/organizations_endpoint"
78
+ require "chef_zero/endpoints/organization_endpoint"
79
+ require "chef_zero/endpoints/organization_association_requests_endpoint"
80
+ require "chef_zero/endpoints/organization_association_request_endpoint"
81
+ require "chef_zero/endpoints/organization_authenticate_user_endpoint"
82
+ require "chef_zero/endpoints/organization_users_endpoint"
83
+ require "chef_zero/endpoints/organization_user_endpoint"
84
+ require "chef_zero/endpoints/organization_validator_key_endpoint"
85
+ require "chef_zero/endpoints/policies_endpoint"
86
+ require "chef_zero/endpoints/policy_endpoint"
87
+ require "chef_zero/endpoints/policy_revisions_endpoint"
88
+ require "chef_zero/endpoints/policy_revision_endpoint"
89
+ require "chef_zero/endpoints/policy_groups_endpoint"
90
+ require "chef_zero/endpoints/policy_group_endpoint"
91
+ require "chef_zero/endpoints/policy_group_policy_endpoint"
92
+ require "chef_zero/endpoints/principal_endpoint"
93
+ require "chef_zero/endpoints/role_endpoint"
94
+ require "chef_zero/endpoints/role_environments_endpoint"
95
+ require "chef_zero/endpoints/sandboxes_endpoint"
96
+ require "chef_zero/endpoints/sandbox_endpoint"
97
+ require "chef_zero/endpoints/searches_endpoint"
98
+ require "chef_zero/endpoints/search_endpoint"
99
+ require "chef_zero/endpoints/system_recovery_endpoint"
100
+ require "chef_zero/endpoints/user_association_requests_endpoint"
101
+ require "chef_zero/endpoints/user_association_requests_count_endpoint"
102
+ require "chef_zero/endpoints/user_association_request_endpoint"
103
+ require "chef_zero/endpoints/user_organizations_endpoint"
104
+ require "chef_zero/endpoints/file_store_file_endpoint"
105
+ require "chef_zero/endpoints/not_found_endpoint"
106
+ require "chef_zero/endpoints/version_endpoint"
107
+ require "chef_zero/endpoints/server_api_version_endpoint"
108
108
 
109
109
  module ChefZero
110
110
 
111
111
  class Server
112
112
 
113
113
  DEFAULT_OPTIONS = {
114
- :host => ['127.0.0.1'],
114
+ :host => ["127.0.0.1"],
115
115
  :port => 8889,
116
116
  :log_level => :warn,
117
117
  :generate_real_keys => true,
118
- :single_org => 'chef',
119
- :ssl => false
118
+ :single_org => "chef",
119
+ :ssl => false,
120
120
  }.freeze
121
121
 
122
122
  GLOBAL_ENDPOINTS = [
123
- '/license',
124
- '/version',
125
- '/server_api_version'
123
+ "/license",
124
+ "/version",
125
+ "/server_api_version",
126
126
  ]
127
127
 
128
128
  def initialize(options = {})
@@ -164,9 +164,9 @@ module ChefZero
164
164
  # @return [String]
165
165
  #
166
166
  def url
167
- sch = @options[:ssl] ? 'https' : 'http'
167
+ sch = @options[:ssl] ? "https" : "http"
168
168
  hosts = Array(@options[:host])
169
- @url ||= if hosts.first.include?(':')
169
+ @url ||= if hosts.first.include?(":")
170
170
  URI("#{sch}://[#{hosts.first}]:#{port}").to_s
171
171
  else
172
172
  URI("#{sch}://#{hosts.first}:#{port}").to_s
@@ -178,7 +178,6 @@ module ChefZero
178
178
  "chefzero://localhost:#{port}"
179
179
  end
180
180
 
181
-
182
181
  #
183
182
  # The data store for this server (default is in-memory).
184
183
  #
@@ -230,7 +229,7 @@ module ChefZero
230
229
 
231
230
  if publish
232
231
  output = publish.respond_to?(:puts) ? publish : STDOUT
233
- output.puts <<-EOH.gsub(/^ {10}/, '')
232
+ output.puts <<-EOH.gsub(/^ {10}/, "")
234
233
  >> Starting Chef Zero (v#{ChefZero::VERSION})...
235
234
  EOH
236
235
  end
@@ -239,14 +238,14 @@ module ChefZero
239
238
 
240
239
  if publish
241
240
  output = publish.respond_to?(:puts) ? publish : STDOUT
242
- output.puts <<-EOH.gsub(/^ {10}/, '')
241
+ output.puts <<-EOH.gsub(/^ {10}/, "")
243
242
  >> WEBrick (v#{WEBrick::VERSION}) on Rack (v#{Rack.release}) is listening at #{url}
244
243
  >> Press CTRL+C to stop
245
244
 
246
245
  EOH
247
246
  end
248
247
 
249
- %w[INT TERM].each do |signal|
248
+ %w{INT TERM}.each do |signal|
250
249
  Signal.trap(signal) do
251
250
  puts "\n>> Stopping Chef Zero..."
252
251
  @server.shutdown
@@ -285,15 +284,15 @@ module ChefZero
285
284
  :AccessLog => [],
286
285
  :Logger => WEBrick::Log.new(StringIO.new, 7),
287
286
  :RequestTimeout => 300,
288
- :SSLEnable => options[:ssl],
289
- :SSLOptions => ssl_opts,
290
- :SSLCertName => [ [ 'CN', WEBrick::Utils::getservername ] ],
287
+ :SSLEnable => options[:ssl],
288
+ :SSLOptions => ssl_opts,
289
+ :SSLCertName => [ [ "CN", WEBrick::Utils.getservername ] ],
291
290
  :StartCallback => proc {
292
291
  @running = true
293
292
  }
294
293
  )
295
- ENV['HTTPS'] = 'on' if options[:ssl]
296
- @server.mount('/', Rack::Handler::WEBrick, app)
294
+ ENV["HTTPS"] = "on" if options[:ssl]
295
+ @server.mount("/", Rack::Handler::WEBrick, app)
297
296
 
298
297
  # Pick a port
299
298
  # If options[:port] can be an Enumerator, an Array, or an Integer,
@@ -377,7 +376,7 @@ module ChefZero
377
376
  if generate_real_keys?
378
377
  private_key = OpenSSL::PKey::RSA.new(2048)
379
378
  public_key = private_key.public_key.to_s
380
- public_key.sub!(/^-----BEGIN RSA PUBLIC KEY-----/, '-----BEGIN PUBLIC KEY-----')
379
+ public_key.sub!(/^-----BEGIN RSA PUBLIC KEY-----/, "-----BEGIN PUBLIC KEY-----")
381
380
  public_key.sub!(/-----END RSA PUBLIC KEY-----(\s+)$/, '-----END PUBLIC KEY-----\1')
382
381
  [private_key.to_s, public_key]
383
382
  else
@@ -418,84 +417,84 @@ module ChefZero
418
417
  # }
419
418
  def load_data(contents, org_name = nil)
420
419
  org_name ||= options[:single_org]
421
- if org_name.nil? && contents.keys != [ 'users' ]
420
+ if org_name.nil? && contents.keys != [ "users" ]
422
421
  raise "Must pass an org name to load_data or run in single_org mode"
423
422
  end
424
423
 
425
- %w(clients containers environments groups nodes roles sandboxes).each do |data_type|
424
+ %w{clients containers environments groups nodes roles sandboxes}.each do |data_type|
426
425
  if contents[data_type]
427
426
  dejsonize_children(contents[data_type]).each_pair do |name, data|
428
- data_store.set(['organizations', org_name, data_type, name], data, :create)
427
+ data_store.set(["organizations", org_name, data_type, name], data, :create)
429
428
  end
430
429
  end
431
430
  end
432
431
 
433
- if contents['users']
434
- dejsonize_children(contents['users']).each_pair do |name, data|
432
+ if contents["users"]
433
+ dejsonize_children(contents["users"]).each_pair do |name, data|
435
434
  if options[:osc_compat]
436
- data_store.set(['organizations', org_name, 'users', name], data, :create)
435
+ data_store.set(["organizations", org_name, "users", name], data, :create)
437
436
  else
438
437
  # Create the user and put them in the org
439
- data_store.set(['users', name], data, :create)
438
+ data_store.set(["users", name], data, :create)
440
439
  if org_name
441
- data_store.set(['organizations', org_name, 'users', name], '{}', :create)
440
+ data_store.set(["organizations", org_name, "users", name], "{}", :create)
442
441
  end
443
442
  end
444
443
  end
445
444
  end
446
445
 
447
- if contents['members']
448
- contents['members'].each do |name|
449
- data_store.set(['organizations', org_name, 'users', name], '{}', :create)
446
+ if contents["members"]
447
+ contents["members"].each do |name|
448
+ data_store.set(["organizations", org_name, "users", name], "{}", :create)
450
449
  end
451
450
  end
452
451
 
453
- if contents['invites']
454
- contents['invites'].each do |name|
455
- data_store.set(['organizations', org_name, 'association_requests', name], '{}', :create)
452
+ if contents["invites"]
453
+ contents["invites"].each do |name|
454
+ data_store.set(["organizations", org_name, "association_requests", name], "{}", :create)
456
455
  end
457
456
  end
458
457
 
459
- if contents['acls']
460
- dejsonize_children(contents['acls']).each do |path, acl|
461
- path = [ 'organizations', org_name ] + path.split('/')
458
+ if contents["acls"]
459
+ dejsonize_children(contents["acls"]).each do |path, acl|
460
+ path = [ "organizations", org_name ] + path.split("/")
462
461
  path = ChefData::AclPath.get_acl_data_path(path)
463
462
  ChefZero::RSpec.server.data_store.set(path, acl)
464
463
  end
465
464
  end
466
465
 
467
- if contents['data']
468
- contents['data'].each_pair do |key, data_bag|
469
- data_store.create_dir(['organizations', org_name, 'data'], key, :recursive)
466
+ if contents["data"]
467
+ contents["data"].each_pair do |key, data_bag|
468
+ data_store.create_dir(["organizations", org_name, "data"], key, :recursive)
470
469
  dejsonize_children(data_bag).each do |item_name, item|
471
- data_store.set(['organizations', org_name, 'data', key, item_name], item, :create)
470
+ data_store.set(["organizations", org_name, "data", key, item_name], item, :create)
472
471
  end
473
472
  end
474
473
  end
475
474
 
476
- if contents['policies']
477
- contents['policies'].each_pair do |policy_name, policy_struct|
475
+ if contents["policies"]
476
+ contents["policies"].each_pair do |policy_name, policy_struct|
478
477
  # data_store.create_dir(['organizations', org_name, 'policies', policy_name], "revisions", :recursive)
479
478
  dejsonize_children(policy_struct).each do |revision, policy_data|
480
- data_store.set(['organizations', org_name, 'policies', policy_name,
479
+ data_store.set(["organizations", org_name, "policies", policy_name,
481
480
  "revisions", revision], policy_data, :create, :create_dir)
482
481
  end
483
482
  end
484
483
  end
485
484
 
486
- if contents['policy_groups']
487
- contents['policy_groups'].each_pair do |group_name, group|
488
- group['policies'].each do |policy_name, policy_revision|
489
- data_store.set(['organizations', org_name, 'policy_groups', group_name, 'policies', policy_name], FFI_Yajl::Encoder.encode(policy_revision['revision_id'], :pretty => true), :create, :create_dir)
485
+ if contents["policy_groups"]
486
+ contents["policy_groups"].each_pair do |group_name, group|
487
+ group["policies"].each do |policy_name, policy_revision|
488
+ data_store.set(["organizations", org_name, "policy_groups", group_name, "policies", policy_name], FFI_Yajl::Encoder.encode(policy_revision["revision_id"], :pretty => true), :create, :create_dir)
490
489
  end
491
490
  end
492
491
  end
493
492
 
494
- %w(cookbooks cookbook_artifacts).each do |cookbook_type|
493
+ %w{cookbooks cookbook_artifacts}.each do |cookbook_type|
495
494
  if contents[cookbook_type]
496
495
  contents[cookbook_type].each_pair do |name_version, cookbook|
497
- if cookbook_type == 'cookbook_artifacts'
498
- name, dash, identifier = name_version.rpartition('-')
496
+ if cookbook_type == "cookbook_artifacts"
497
+ name, dash, identifier = name_version.rpartition("-")
499
498
  cookbook_data = ChefData::CookbookData.to_hash(cookbook, name, identifier)
500
499
  elsif name_version =~ /(.+)-(\d+\.\d+\.\d+)$/
501
500
  cookbook_data = ChefData::CookbookData.to_hash(cookbook, $1, $2)
@@ -503,12 +502,12 @@ module ChefZero
503
502
  cookbook_data = ChefData::CookbookData.to_hash(cookbook, name_version)
504
503
  end
505
504
  raise "No version specified" if !cookbook_data[:version]
506
- data_store.create_dir(['organizations', org_name, cookbook_type], cookbook_data[:cookbook_name], :recursive)
507
- data_store.set(['organizations', org_name, cookbook_type, cookbook_data[:cookbook_name], cookbook_data[:version]], FFI_Yajl::Encoder.encode(cookbook_data, :pretty => true), :create)
505
+ data_store.create_dir(["organizations", org_name, cookbook_type], cookbook_data[:cookbook_name], :recursive)
506
+ data_store.set(["organizations", org_name, cookbook_type, cookbook_data[:cookbook_name], cookbook_data[:version]], FFI_Yajl::Encoder.encode(cookbook_data, :pretty => true), :create)
508
507
  cookbook_data.values.each do |files|
509
508
  next unless files.is_a? Array
510
509
  files.each do |file|
511
- data_store.set(['organizations', org_name, 'file_store', 'checksums', file[:checksum]], get_file(cookbook, file[:path]), :create)
510
+ data_store.set(["organizations", org_name, "file_store", "checksums", file[:checksum]], get_file(cookbook, file[:path]), :create)
512
511
  end
513
512
  end
514
513
  end
@@ -536,48 +535,48 @@ module ChefZero
536
535
 
537
536
  def endpoints
538
537
  result = if options[:osc_compat]
539
- # OSC-only
540
- [
541
- [ "/organizations/*/users", ActorsEndpoint.new(self) ],
542
- [ "/organizations/*/users/*", ActorEndpoint.new(self) ],
543
- [ "/organizations/*/authenticate_user", OrganizationAuthenticateUserEndpoint.new(self) ]
544
- ]
545
- else
546
- # EC-only
547
- [
548
- [ "/organizations/*/users", OrganizationUsersEndpoint.new(self) ],
549
- [ "/organizations/*/users/*", OrganizationUserEndpoint.new(self) ],
550
- [ "/users", ActorsEndpoint.new(self, 'username') ],
551
- [ "/users/*", ActorEndpoint.new(self, 'username') ],
552
- [ "/users/*/_acl", AclsEndpoint.new(self) ],
553
- [ "/users/*/_acl/*", AclEndpoint.new(self) ],
554
- [ "/users/*/association_requests", UserAssociationRequestsEndpoint.new(self) ],
555
- [ "/users/*/association_requests/count", UserAssociationRequestsCountEndpoint.new(self) ],
556
- [ "/users/*/association_requests/*", UserAssociationRequestEndpoint.new(self) ],
557
- [ "/users/*/keys", ActorKeysEndpoint.new(self) ],
558
- [ "/users/*/keys/default", ActorDefaultKeyEndpoint.new(self) ],
559
- [ "/users/*/keys/*", ActorKeyEndpoint.new(self) ],
560
- [ "/users/*/organizations", UserOrganizationsEndpoint.new(self) ],
561
- [ "/authenticate_user", AuthenticateUserEndpoint.new(self) ],
562
- [ "/system_recovery", SystemRecoveryEndpoint.new(self) ],
563
- [ "/license", LicenseEndpoint.new(self) ],
564
- [ "/organizations", OrganizationsEndpoint.new(self) ],
565
- [ "/organizations/*", OrganizationEndpoint.new(self) ],
566
- [ "/organizations/*/_validator_key", OrganizationValidatorKeyEndpoint.new(self) ],
567
- [ "/organizations/*/association_requests", OrganizationAssociationRequestsEndpoint.new(self) ],
568
- [ "/organizations/*/association_requests/*", OrganizationAssociationRequestEndpoint.new(self) ],
569
- [ "/organizations/*/containers", ContainersEndpoint.new(self) ],
570
- [ "/organizations/*/containers/*", ContainerEndpoint.new(self) ],
571
- [ "/organizations/*/groups", GroupsEndpoint.new(self) ],
572
- [ "/organizations/*/groups/*", GroupEndpoint.new(self) ],
573
- [ "/organizations/*/organization/_acl", AclsEndpoint.new(self) ],
574
- [ "/organizations/*/organizations/_acl", AclsEndpoint.new(self) ],
575
- [ "/organizations/*/*/*/_acl", AclsEndpoint.new(self) ],
576
- [ "/organizations/*/organization/_acl/*", AclEndpoint.new(self) ],
577
- [ "/organizations/*/organizations/_acl/*", AclEndpoint.new(self) ],
578
- [ "/organizations/*/*/*/_acl/*", AclEndpoint.new(self) ]
579
- ]
580
- end
538
+ # OSC-only
539
+ [
540
+ [ "/organizations/*/users", ActorsEndpoint.new(self) ],
541
+ [ "/organizations/*/users/*", ActorEndpoint.new(self) ],
542
+ [ "/organizations/*/authenticate_user", OrganizationAuthenticateUserEndpoint.new(self) ],
543
+ ]
544
+ else
545
+ # EC-only
546
+ [
547
+ [ "/organizations/*/users", OrganizationUsersEndpoint.new(self) ],
548
+ [ "/organizations/*/users/*", OrganizationUserEndpoint.new(self) ],
549
+ [ "/users", ActorsEndpoint.new(self, "username") ],
550
+ [ "/users/*", ActorEndpoint.new(self, "username") ],
551
+ [ "/users/*/_acl", AclsEndpoint.new(self) ],
552
+ [ "/users/*/_acl/*", AclEndpoint.new(self) ],
553
+ [ "/users/*/association_requests", UserAssociationRequestsEndpoint.new(self) ],
554
+ [ "/users/*/association_requests/count", UserAssociationRequestsCountEndpoint.new(self) ],
555
+ [ "/users/*/association_requests/*", UserAssociationRequestEndpoint.new(self) ],
556
+ [ "/users/*/keys", ActorKeysEndpoint.new(self) ],
557
+ [ "/users/*/keys/default", ActorDefaultKeyEndpoint.new(self) ],
558
+ [ "/users/*/keys/*", ActorKeyEndpoint.new(self) ],
559
+ [ "/users/*/organizations", UserOrganizationsEndpoint.new(self) ],
560
+ [ "/authenticate_user", AuthenticateUserEndpoint.new(self) ],
561
+ [ "/system_recovery", SystemRecoveryEndpoint.new(self) ],
562
+ [ "/license", LicenseEndpoint.new(self) ],
563
+ [ "/organizations", OrganizationsEndpoint.new(self) ],
564
+ [ "/organizations/*", OrganizationEndpoint.new(self) ],
565
+ [ "/organizations/*/_validator_key", OrganizationValidatorKeyEndpoint.new(self) ],
566
+ [ "/organizations/*/association_requests", OrganizationAssociationRequestsEndpoint.new(self) ],
567
+ [ "/organizations/*/association_requests/*", OrganizationAssociationRequestEndpoint.new(self) ],
568
+ [ "/organizations/*/containers", ContainersEndpoint.new(self) ],
569
+ [ "/organizations/*/containers/*", ContainerEndpoint.new(self) ],
570
+ [ "/organizations/*/groups", GroupsEndpoint.new(self) ],
571
+ [ "/organizations/*/groups/*", GroupEndpoint.new(self) ],
572
+ [ "/organizations/*/organization/_acl", AclsEndpoint.new(self) ],
573
+ [ "/organizations/*/organizations/_acl", AclsEndpoint.new(self) ],
574
+ [ "/organizations/*/*/*/_acl", AclsEndpoint.new(self) ],
575
+ [ "/organizations/*/organization/_acl/*", AclEndpoint.new(self) ],
576
+ [ "/organizations/*/organizations/_acl/*", AclEndpoint.new(self) ],
577
+ [ "/organizations/*/*/*/_acl/*", AclEndpoint.new(self) ],
578
+ ]
579
+ end
581
580
  result + [
582
581
  # Both
583
582
  [ "/dummy", DummyEndpoint.new(self) ],
@@ -630,7 +629,7 @@ module ChefZero
630
629
  [ "/server_api_version", ServerAPIVersionEndpoint.new(self) ],
631
630
 
632
631
  # Internal
633
- [ "/organizations/*/file_store/**", FileStoreFileEndpoint.new(self) ]
632
+ [ "/organizations/*/file_store/**", FileStoreFileEndpoint.new(self) ],
634
633
  ]
635
634
  end
636
635
 
@@ -646,13 +645,13 @@ module ChefZero
646
645
  router.not_found = NotFoundEndpoint.new
647
646
 
648
647
  if options[:single_org]
649
- rest_base_prefix = [ 'organizations', options[:single_org] ]
648
+ rest_base_prefix = [ "organizations", options[:single_org] ]
650
649
  else
651
650
  rest_base_prefix = []
652
651
  end
653
652
  @app = proc do |env|
654
653
  begin
655
- prefix = global_endpoint?(env['PATH_INFO']) ? [] : rest_base_prefix
654
+ prefix = global_endpoint?(env["PATH_INFO"]) ? [] : rest_base_prefix
656
655
 
657
656
  request = RestRequest.new(env, prefix)
658
657
  if @on_request_proc
@@ -670,10 +669,10 @@ module ChefZero
670
669
  end
671
670
 
672
671
  # Insert Server header
673
- response[1]['Server'] = 'chef-zero'
672
+ response[1]["Server"] = "chef-zero"
674
673
 
675
674
  # Add CORS header
676
- response[1]['Access-Control-Allow-Origin'] = '*'
675
+ response[1]["Access-Control-Allow-Origin"] = "*"
677
676
 
678
677
  # Puma expects the response to be an array (chunked responses). Since
679
678
  # we are statically generating data, we won't ever have said chunked
@@ -705,7 +704,7 @@ module ChefZero
705
704
 
706
705
  def get_file(directory, path)
707
706
  value = directory
708
- path.split('/').each do |part|
707
+ path.split("/").each do |part|
709
708
  value = value[part]
710
709
  end
711
710
  value