summaryrefslogtreecommitdiff
path: root/lib/chef_zero/endpoints/sandbox_endpoint.rb
blob: aedb6653008be3a064e143d7f61cea3580fec944 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
require "chef_zero/rest_base"
require "chef_zero/rest_error_response"
require "ffi_yajl"

module ChefZero
  module Endpoints
    # /sandboxes/ID
    class SandboxEndpoint < RestBase
      def put(request)
        existing_sandbox = FFI_Yajl::Parser.parse(get_data(request))
        existing_sandbox["checksums"].each do |checksum|
          unless exists_data?(request, request.rest_path[0..1] + ["file_store", "checksums", checksum])
            raise RestErrorResponse.new(503, "Checksum not uploaded: #{checksum}")
          end
        end
        delete_data(request)
        json_response(200, {
          guid: request.rest_path[3],
          name: request.rest_path[3],
          checksums: existing_sandbox["checksums"],
          create_time: existing_sandbox["create_time"],
          is_completed: true,
        })
      end
    end
  end
end