Skip to content

Commit e08bd05

Browse files
author
Nuo Yan
committed
Fixing CHEF-860, adding password masking, error handling, and fixed private key formatting
1 parent 73d3bcd commit e08bd05

11 files changed

Lines changed: 198 additions & 77 deletions

File tree

chef-server-webui/app/controllers/application.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,5 +273,9 @@ def get_available_recipes
273273
end
274274
result
275275
end
276+
277+
def convert_newline_to_br(string)
278+
string.to_s.gsub(/\n/, '<br />') unless string.nil?
279+
end
276280

277281
end

chef-server-webui/app/controllers/clients.rb

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,38 @@ class ChefServerWebui::Clients < ChefServerWebui::Application
2525

2626
# GET /clients
2727
def index
28-
@clients_list = Chef::ApiClient.list()
29-
render
28+
begin
29+
@clients_list = Chef::ApiClient.list()
30+
render
31+
rescue
32+
@clients_list = {}
33+
@_message = {:error => $!}
34+
render
35+
end
3036
end
3137

3238
# GET /clients/:id
3339
def show
34-
load_client
35-
render
40+
begin
41+
load_client
42+
render
43+
rescue => e
44+
@client = Chef::ApiClient.new
45+
@_message = e.message =~ /not found/ ? {:error => "Cannot find client '#{params[:id]}'"} : { :error => $!}
46+
render
47+
end
3648
end
3749

3850
# GET /clients/:id/edit
3951
def edit
40-
load_client
41-
render
52+
begin
53+
load_client
54+
render
55+
rescue
56+
@client = Chef::ApiClient.new
57+
@_message = e.message =~ /not found/ ? {:error => "Cannot find client '#{params[:id]}'"} : { :error => $!}
58+
render
59+
end
4260
end
4361

4462
# GET /clients/new
@@ -92,9 +110,15 @@ def update
92110

93111
# DELETE /clients/:id
94112
def destroy
95-
load_client
96-
@client.destroy
97-
redirect(absolute_slice_url(:clients), {:message => { :notice => "Client #{params[:id]} deleted successfully" }, :permanent => true})
113+
begin
114+
load_client
115+
@client.destroy
116+
redirect(absolute_slice_url(:clients), {:message => { :notice => "Client #{params[:id]} deleted successfully" }, :permanent => true})
117+
rescue
118+
@_message = {:error => $!}
119+
@clients_list = Chef::ApiClient.list()
120+
render :index
121+
end
98122
end
99123

100124
private

chef-server-webui/app/controllers/cookbooks.rb

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,28 @@ class ChefServerWebui::Cookbooks < ChefServerWebui::Application
2626
before :login_required
2727

2828
def index
29-
r = Chef::REST.new(Chef::Config[:chef_server_url])
30-
@cl = r.get_rest("cookbooks")
31-
render
29+
begin
30+
r = Chef::REST.new(Chef::Config[:chef_server_url])
31+
@cl = r.get_rest("cookbooks")
32+
render
33+
rescue
34+
@_message = {:error => $!}
35+
@cl = {}
36+
render
37+
end
3238
end
3339

3440
def show
35-
r = Chef::REST.new(Chef::Config[:chef_server_url])
36-
@cookbook = r.get_rest("cookbooks/#{params[:id]}")
37-
raise NotFound unless @cookbook
38-
display @cookbook
41+
begin
42+
r = Chef::REST.new(Chef::Config[:chef_server_url])
43+
@cookbook = r.get_rest("cookbooks/#{params[:id]}")
44+
raise NotFound unless @cookbook
45+
display @cookbook
46+
rescue
47+
@_message = {:error => $!}
48+
@cl = {}
49+
render :index
50+
end
3951
end
4052

4153
def recipe_files

chef-server-webui/app/controllers/nodes.rb

Lines changed: 57 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -28,37 +28,63 @@ class ChefServerWebui::Nodes < ChefServerWebui::Application
2828
before :authorized_node, :only => [ :update, :destroy ]
2929

3030
def index
31-
@node_list = Chef::Node.list
32-
render
31+
begin
32+
@node_list = Chef::Node.list
33+
render
34+
rescue
35+
@node_list = {}
36+
@_message = {:error => $!}
37+
render
38+
end
3339
end
3440

3541
def show
3642
begin
37-
@node = Chef::Node.load(params[:id])
38-
rescue Net::HTTPServerException => e
39-
raise NotFound, "Cannot load node #{params[:id]}"
40-
end
43+
begin
44+
@node = Chef::Node.load(params[:id])
45+
rescue Net::HTTPServerException => e
46+
raise NotFound, "Cannot load node #{params[:id]}"
47+
end
48+
rescue
49+
@node = Chef::Node.new
50+
@_message = {:error => $!}
51+
end
4152
render
4253
end
4354

4455
def new
45-
@node = Chef::Node.new
46-
@available_recipes = get_available_recipes
47-
@available_roles = Chef::Role.list.keys.sort
48-
@run_list = @node.run_list
49-
render
56+
begin
57+
@node = Chef::Node.new
58+
@available_recipes = get_available_recipes
59+
@available_roles = Chef::Role.list.keys.sort
60+
@run_list = @node.run_list
61+
render
62+
rescue
63+
@node_list = Chef::Node.list()
64+
@_message = {:error => $!}
65+
render :index
66+
end
5067
end
5168

5269
def edit
5370
begin
54-
@node = Chef::Node.load(params[:id])
55-
rescue Net::HTTPServerException => e
56-
raise NotFound, "Cannot load node #{params[:id]}"
57-
end
58-
@available_recipes = get_available_recipes
59-
@available_roles = Chef::Role.list.keys.sort
60-
@run_list = @node.run_list
61-
render
71+
begin
72+
@node = Chef::Node.load(params[:id])
73+
rescue Net::HTTPServerException => e
74+
raise NotFound, "Cannot load node #{params[:id]}"
75+
end
76+
@available_recipes = get_available_recipes
77+
@available_roles = Chef::Role.list.keys.sort
78+
@run_list = @node.run_list
79+
render
80+
rescue
81+
@node = Chef::Node.new
82+
@available_recipes = []
83+
@available_roles = []
84+
@run_list = []
85+
@_message = {:error => $!}
86+
render
87+
end
6288
end
6389

6490
def create
@@ -116,12 +142,18 @@ def update
116142

117143
def destroy
118144
begin
119-
@node = Chef::Node.load(params[:id])
120-
rescue Net::HTTPServerException => e
121-
raise NotFound, "Cannot load node #{params[:id]}"
122-
end
123-
@node.destroy
124-
redirect(absolute_slice_url(:nodes), {:message => { :notice => "Node #{params[:id]} deleted successfully" }, :permanent => true})
145+
begin
146+
@node = Chef::Node.load(params[:id])
147+
rescue Net::HTTPServerException => e
148+
raise NotFound, "Cannot load node #{params[:id]}"
149+
end
150+
@node.destroy
151+
redirect(absolute_slice_url(:nodes), {:message => { :notice => "Node #{params[:id]} deleted successfully" }, :permanent => true})
152+
rescue
153+
@node_list = Chef::Node.list()
154+
@_message = {:error => $!}
155+
render :index
156+
end
125157
end
126158

127159
end

chef-server-webui/app/controllers/roles.rb

Lines changed: 59 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -26,40 +26,67 @@ class ChefServerWebui::Roles < ChefServerWebui::Application
2626

2727
# GET /roles
2828
def index
29-
@role_list = Chef::Role.list()
30-
render
29+
begin
30+
@role_list = Chef::Role.list()
31+
render
32+
rescue
33+
@role_list = {}
34+
@_message = {:error => $!}
35+
render
36+
end
3137
end
3238

3339
# GET /roles/:id
3440
def show
3541
begin
36-
@role = Chef::Role.load(params[:id])
37-
rescue Net::HTTPServerException => e
38-
raise NotFound, "Cannot load role #{params[:id]}"
39-
end
40-
render
42+
begin
43+
@role = Chef::Role.load(params[:id])
44+
rescue Net::HTTPServerException => e
45+
raise NotFound, "Cannot load role #{params[:id]}"
46+
end
47+
render
48+
rescue
49+
@role = Chef::Role.new
50+
@_message = {:error => $!}
51+
render
52+
end
4153
end
4254

4355
# GET /roles/new
4456
def new
45-
@available_recipes = get_available_recipes
46-
@role = Chef::Role.new
47-
@available_roles = Chef::Role.list.keys.sort
48-
@run_list = @role.run_list
49-
render
57+
begin
58+
@available_recipes = get_available_recipes
59+
@role = Chef::Role.new
60+
@available_roles = Chef::Role.list.keys.sort
61+
@run_list = @role.run_list
62+
render
63+
rescue
64+
@role_list = Chef::Role.list()
65+
@_message = {:error => $!}
66+
render :index
67+
end
5068
end
5169

5270
# GET /roles/:id/edit
5371
def edit
5472
begin
55-
@role = Chef::Role.load(params[:id])
56-
rescue Net::HTTPServerException => e
57-
raise NotFound, "Cannot load role #{params[:id]}"
58-
end
59-
@available_recipes = get_available_recipes
60-
@available_roles = Chef::Role.list.keys.sort
61-
@run_list = @role.run_list
62-
render
73+
begin
74+
@role = Chef::Role.load(params[:id])
75+
rescue Net::HTTPServerException => e
76+
raise NotFound, "Cannot load role #{params[:id]}"
77+
end
78+
@available_recipes = get_available_recipes
79+
@available_roles = Chef::Role.list.keys.sort
80+
@run_list = @role.run_list
81+
render
82+
rescue
83+
@role = Chef::Role.new
84+
@available_recipes = []
85+
@available_roles = []
86+
@run_list = []
87+
@_message = {:error => $!}
88+
render
89+
end
6390
end
6491

6592
# POST /roles
@@ -120,13 +147,18 @@ def update
120147
# DELETE /roles/:id
121148
def destroy
122149
begin
123-
@role = Chef::Role.load(params[:id])
124-
rescue Net::HTTPServerException => e
125-
raise NotFound, "Cannot load role #{params[:id]}"
126-
end
127-
@role.destroy
128-
129-
redirect(absolute_slice_url(:roles), :message => { :notice => "Role #{@role.name} deleted successfully." }, :permanent => true)
150+
begin
151+
@role = Chef::Role.load(params[:id])
152+
rescue Net::HTTPServerException => e
153+
raise NotFound, "Cannot load role #{params[:id]}"
154+
end
155+
@role.destroy
156+
redirect(absolute_slice_url(:roles), :message => { :notice => "Role #{@role.name} deleted successfully." }, :permanent => true)
157+
rescue
158+
@role_list = Chef::Role.list()
159+
@_message = {:error => $!}
160+
render :index
161+
end
130162
end
131163

132164
end

chef-server-webui/app/controllers/search.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,15 @@ class ChefServerWebui::Search < ChefServerWebui::Application
2424
before :login_required
2525

2626
def index
27-
@s = Chef::Search::Query.new
28-
@search_indexes = @s.list_indexes
29-
render
27+
begin
28+
@s = Chef::Search::Query.new
29+
@search_indexes = @s.list_indexes
30+
render
31+
rescue
32+
@search_indexes = {}
33+
@_message = {:error => $!}
34+
render
35+
end
3036
end
3137

3238
def show

chef-server-webui/app/controllers/status.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,14 @@ class ChefServerWebui::Status < ChefServerWebui::Application
2525
before :login_required
2626

2727
def index
28-
@status = Chef::Node.list(true)
29-
render
28+
begin
29+
@status = Chef::Node.list(true)
30+
render
31+
rescue
32+
@status = {}
33+
@_message = {:error => $!}
34+
render
35+
end
3036
end
3137

3238
end

chef-server-webui/app/controllers/users.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818

1919
require 'chef'/'webui_user'
2020
require 'uri'
21+
require 'merb-param-protection'
2122

2223
class ChefServerWebui::Users < ChefServerWebui::Application
2324

2425
provides :html
2526
before :login_required, :exclude => [:login, :login_exec, :complete]
27+
log_params_filtered :password, :password2, :new_password, :confirm_new_password
2628

2729
# List users, only if the user is admin.
2830
def index

chef-server-webui/app/views/clients/show.html.haml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
= @client.admin
1111
.left
1212
%h3 Public Key
13-
%pre= @client.public_key
13+
%pre= convert_newline_to_br(@client.public_key)
1414
-unless @private_key.nil?
1515
.left
1616
%h3 Private Key (Will not show again, Please copy!)
1717
%h4.bold Please copy and save as the client's validation key (e.g. client.pem)
18-
%pre= @private_key.to_s
18+
%pre= convert_newline_to_br(@private_key)
1919

2020

0 commit comments

Comments
 (0)