Class: ChefServerSlice::CookbookFiles

Inherits:
Application
  • Object
show all
Includes:
Chef::Mixin::Checksum, Chef::Mixin::FindPreferredFile
Defined in:
app/controllers/cookbook_files.rb

Instance Method Summary collapse

Methods inherited from Application

#absolute_slice_url, #access_denied, #authorized_node, #escape_node_id, #expand_cookbook_deps, #fix_up_node_id, #get_available_recipes, #load_all_files, #load_cookbook_segment, #login_required, #redirect_back_or_default, #segment_files, #specific_cookbooks, #store_location

Instance Method Details

#indexObject



34
35
36
37
38
39
40
41
42
43
44
45
# File 'app/controllers/cookbook_files.rb', line 34

def index
  if params[:id]
    if params[:recursive] == "true"
      show_directory
    else
      show
    end
  else
    @remote_files = load_cookbook_files(params[:cookbook_id], :remote_file)
    display @remote_files
  end
end

#showObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'app/controllers/cookbook_files.rb', line 47

def show
  only_provides :json
  begin
    to_send = find_preferred_file(
      params[:cookbook_id], 
      :remote_file, 
      params[:id], 
      params[:fqdn], 
      params[:platform], 
      params[:version]
    )
  rescue Chef::Exceptions::FileNotFound
    raise NotFound, "Cannot find a suitable file!"
  end

  current_checksum = checksum(to_send)
  Chef::Log.debug("old sum: #{params[:checksum]}, new sum: #{current_checksum}") 
  if current_checksum == params[:checksum]
    render "File #{to_send} has not changed", :status => 304
  else
    send_file(to_send)
  end
end

#show_directoryObject



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'app/controllers/cookbook_files.rb', line 71

def show_directory
  dir_to_send = find_preferred_file(
    params[:cookbook_id], 
    :remote_file, 
    params[:id], 
    params[:fqdn], 
    params[:platform], 
    params[:version]
  )
  unless (dir_to_send && File.directory?(dir_to_send))
    raise NotFound, "Cannot find a suitable directory"
  end
  
  @directory_listing = Array.new
  Dir[::File.join(dir_to_send, '**', '*')].sort { |a,b| b <=> a }.each do |file_to_send|
    next if File.directory?(file_to_send)
    file_to_send =~ /^#{dir_to_send}\/(.+)$/
    @directory_listing << $1
  end
  
  display @directory_listing
end