Class: Clients

Inherits:
Application show all
Defined in:
app/controllers/clients.rb

Instance Method Summary collapse

Methods inherited from Application

#access_denied, #append_tree, #bad_request?, #binary?, #build_tree, #can_edit_admin?, #cleanup_session, #conflict?, #convert_newline_to_br, #determine_name, #forbidden?, #format_exception, #is_admin?, #is_last_admin?, #list_available_recipes_for, #load_cookbook_segment, #load_environments, #load_session_user, #login_required, #logout_and_redirect_to_login, #not_found?, #redirect_back_or_default, #require_admin, #segment_files, #show_plain_file, #store_location, #str_to_bool, #syntax_highlight

Instance Method Details

#createObject

POST /clients



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'app/controllers/clients.rb', line 71

def create
  begin  
    @client = Chef::ApiClient.new
    @client.name(params[:name])
    @client.admin(str_to_bool(params[:admin])) if params[:admin]
    response = @client.create
    @private_key = OpenSSL::PKey::RSA.new(response["private_key"])
    @_message = { :notice => "Created Client #{@client.name}. Please copy the following private key as the client's validation key." }
    @client = Chef::ApiClient.load(params[:name])
    render :show    
  rescue => e
    Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
    @_message = { :error => "Could not create client" }
    render :new
  end 
end

#destroyObject

DELETE /clients/:id



108
109
110
111
112
113
114
115
116
117
118
119
# File 'app/controllers/clients.rb', line 108

def destroy
  begin
    @client = Chef::ApiClient.load(params[:id])
    @client.destroy
    redirect(absolute_url(:clients), {:message => { :notice => "Client #{params[:id]} deleted successfully" }, :permanent => true})
  rescue => e
    Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
    @_message = {:error => "Could not delete client #{params[:id]}" }
    @clients_list = Chef::ApiClient.list()
    render :index
  end 
end

#editObject

GET /clients/:id/edit



52
53
54
55
56
57
58
59
60
61
# File 'app/controllers/clients.rb', line 52

def edit
  @client = begin
              Chef::ApiClient.load(params[:id])
            rescue => e
              Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
              @_message = { :error => "Could not load client #{params[:id]}"}
              Chef::ApiClient.new
            end  
  render
end

#indexObject

GET /clients



28
29
30
31
32
33
34
35
36
37
# File 'app/controllers/clients.rb', line 28

def index
  begin
    @clients_list = Chef::ApiClient.list().keys.sort
  rescue => e
    Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
    @_message = {:error => "Could not list clients"}
    @clients_list = []
  end
  render
end

#newObject

GET /clients/new



64
65
66
67
68
# File 'app/controllers/clients.rb', line 64

def new
  raise AdminAccessRequired unless params[:user_id] == session[:user] unless session[:level] == :admin
  @client = Chef::ApiClient.new
  render
end

#showObject

GET /clients/:id



40
41
42
43
44
45
46
47
48
49
# File 'app/controllers/clients.rb', line 40

def show
  @client = begin
              @client = Chef::ApiClient.load(params[:id])
            rescue => e
              Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
              @_message = { :error => "Could not load client #{params[:id]}"}
              Chef::ApiClient.new
            end 
  render
end

#updateObject

PUT /clients/:id



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'app/controllers/clients.rb', line 89

def update
  begin
    @client = Chef::ApiClient.load(params[:id])
    if params[:regen_private_key]
      @client.create_keys
      @private_key = @client.private_key
    end 
    params[:admin] ? @client.admin(true) : @client.admin(false)
    @client.save
    @_message = @private_key.nil? ? { :notice => "Updated Client" } : { :notice => "Created Client #{@client.name}. Please copy the following private key as the client's validation key." }
    render :show
  rescue => e
    Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
    @_message = { :error => "Could not update client" }
    render :edit
  end
end