chef-server-webui 0.8.16 → 0.9.0.a3
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.
- data/Rakefile +14 -10
- data/app/controllers/application.rb +111 -128
- data/app/controllers/clients.rb +10 -10
- data/app/controllers/cookbook_attributes.rb +1 -1
- data/app/controllers/cookbook_definitions.rb +1 -1
- data/app/controllers/cookbook_files.rb +1 -1
- data/app/controllers/cookbook_libraries.rb +1 -1
- data/app/controllers/cookbook_recipes.rb +1 -1
- data/app/controllers/cookbook_templates.rb +1 -1
- data/app/controllers/cookbooks.rb +21 -3
- data/app/controllers/databag_items.rb +6 -6
- data/app/controllers/databags.rb +3 -3
- data/app/controllers/main.rb +1 -1
- data/app/controllers/nodes.rb +21 -21
- data/app/controllers/openid_consumer.rb +9 -9
- data/app/controllers/roles.rb +3 -3
- data/app/controllers/search.rb +1 -1
- data/app/controllers/search_entries.rb +1 -1
- data/app/controllers/status.rb +1 -1
- data/app/controllers/users.rb +7 -7
- data/app/helpers/application_helper.rb +1 -156
- data/app/helpers/global_helpers.rb +20 -16
- data/app/helpers/nodes_helper.rb +24 -22
- data/app/helpers/openid_server_helpers.rb +13 -10
- data/app/helpers/search_helper.rb +44 -38
- data/app/helpers/status_helper.rb +10 -3
- data/app/views/clients/_navigation.html.haml +5 -5
- data/app/views/clients/edit.html.haml +1 -1
- data/app/views/clients/index.html.haml +4 -4
- data/app/views/clients/new.html.haml +1 -1
- data/app/views/cookbooks/index.html.haml +1 -1
- data/app/views/cookbooks/show.html.haml +25 -16
- data/app/views/databag_items/_form.html.haml +1 -1
- data/app/views/databag_items/_navigation.html.haml +5 -5
- data/app/views/databag_items/edit.html.haml +1 -1
- data/app/views/databag_items/new.html.haml +1 -1
- data/app/views/databags/_item_navigation.html.haml +4 -4
- data/app/views/databags/_navigation.html.haml +5 -5
- data/app/views/databags/edit.html.haml +1 -1
- data/app/views/databags/index.html.haml +3 -3
- data/app/views/databags/new.html.haml +1 -1
- data/app/views/databags/show.html.haml +3 -3
- data/app/views/layout/{chef_server_webui.html.haml → application.html.haml} +11 -11
- data/app/views/layout/login.html.haml +1 -1
- data/app/views/nodes/_form.html.haml +1 -1
- data/app/views/nodes/_navigation.html.haml +5 -5
- data/app/views/nodes/edit.html.haml +1 -1
- data/app/views/nodes/index.html.haml +6 -6
- data/app/views/nodes/new.html.haml +1 -1
- data/app/views/nodes/show.html.haml +4 -5
- data/app/views/openid_consumer/index.html.haml +2 -2
- data/app/views/openid_register/index.html.haml +4 -4
- data/app/views/openid_register/show.html.haml +1 -1
- data/app/views/roles/_form.html.haml +1 -1
- data/app/views/roles/_navigation.html.haml +5 -5
- data/app/views/roles/edit.html.haml +1 -1
- data/app/views/roles/index.html.haml +4 -4
- data/app/views/roles/new.html.haml +1 -1
- data/app/views/roles/show.html.haml +3 -4
- data/app/views/search/_search_form.html.haml +1 -1
- data/app/views/search/index.html.haml +1 -1
- data/app/views/search/show.html.haml +1 -1
- data/app/views/status/index.html.haml +9 -12
- data/app/views/users/_form.html.haml +1 -1
- data/app/views/users/_navigation.html.haml +5 -5
- data/app/views/users/edit.html.haml +1 -1
- data/app/views/users/index.html.haml +3 -3
- data/app/views/users/login.html.haml +1 -1
- data/app/views/users/new.html.haml +1 -1
- data/bin/chef-server-webui +72 -0
- data/config.ru +10 -74
- data/config/init.rb +30 -11
- data/config/rack.rb +5 -0
- data/config/router.rb +62 -5
- data/lib/chef-server-webui.rb +2 -155
- data/lib/chef-server-webui/version.rb +3 -0
- data/public/javascripts/drop_down_menu.js +22 -0
- metadata +60 -48
- data/stubs/app/controllers/application.rb +0 -2
- data/stubs/app/controllers/main.rb +0 -2
@@ -21,7 +21,7 @@ require 'chef' / 'mixin' / 'checksum'
|
|
21
21
|
require 'chef' / 'cookbook_loader'
|
22
22
|
require 'chef' / 'mixin' / 'find_preferred_file'
|
23
23
|
|
24
|
-
class
|
24
|
+
class CookbookFiles < Application
|
25
25
|
|
26
26
|
provides :html
|
27
27
|
before :login_required
|
@@ -21,7 +21,7 @@ require 'chef' / 'mixin' / 'checksum'
|
|
21
21
|
require 'chef' / 'cookbook_loader'
|
22
22
|
require 'chef' / 'mixin' / 'find_preferred_file'
|
23
23
|
|
24
|
-
class
|
24
|
+
class CookbookTemplates < Application
|
25
25
|
|
26
26
|
provides :html
|
27
27
|
before :login_required
|
@@ -20,10 +20,16 @@
|
|
20
20
|
|
21
21
|
require 'chef' / 'cookbook_loader'
|
22
22
|
|
23
|
-
class
|
23
|
+
class Cookbooks < Application
|
24
24
|
|
25
25
|
provides :html, :json
|
26
|
-
before :login_required
|
26
|
+
before :login_required
|
27
|
+
before :params_helper
|
28
|
+
|
29
|
+
attr_reader :cookbook_id
|
30
|
+
def params_helper
|
31
|
+
@cookbook_id = params[:id] || params[:cookbook_id]
|
32
|
+
end
|
27
33
|
|
28
34
|
def index
|
29
35
|
@cl = begin
|
@@ -38,7 +44,19 @@ class ChefServerWebui::Cookbooks < ChefServerWebui::Application
|
|
38
44
|
|
39
45
|
def show
|
40
46
|
begin
|
41
|
-
|
47
|
+
# array of versions, sorted from large to small e.g. ["0.20.0", "0.1.0"]
|
48
|
+
versions = Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("cookbooks/#{cookbook_id}")[cookbook_id].sort!{|x,y| y <=> x }
|
49
|
+
# if version is not specified in the url, get the most recent version, otherwise get the specified version
|
50
|
+
version = if params[:cb_version].nil? || params[:cb_version].empty?
|
51
|
+
versions.first
|
52
|
+
else
|
53
|
+
params[:cb_version]
|
54
|
+
end
|
55
|
+
|
56
|
+
@cookbook = Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("cookbooks/#{cookbook_id}/#{version}")
|
57
|
+
|
58
|
+
# by default always show the largest version number (assuming largest means most recent)
|
59
|
+
@other_versions = versions - [version]
|
42
60
|
raise NotFound unless @cookbook
|
43
61
|
display @cookbook
|
44
62
|
rescue => e
|
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
require 'chef' / 'data_bag_item'
|
20
20
|
|
21
|
-
class
|
21
|
+
class DatabagItems < Application
|
22
22
|
|
23
23
|
provides :html, :json
|
24
24
|
before :login_required
|
@@ -41,7 +41,7 @@ class ChefServerWebui::DatabagItems < ChefServerWebui::Application
|
|
41
41
|
@databag_item.raw_data = JSON.parse(params[:json_data])
|
42
42
|
raise ArgumentError, "Updating id is not allowed" unless @databag_item.raw_data['id'] == params[:id] #to be consistent with other objects, changing id is not allowed.
|
43
43
|
@databag_item.save
|
44
|
-
redirect(
|
44
|
+
redirect(url(:databag_databag_items, :databag_id => params[:databag_id], :id => @databag_item.name), :message => { :notice => "Updated Databag Item #{@databag_item.name}" })
|
45
45
|
rescue => e
|
46
46
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
47
47
|
@_message = { :error => "Could not update the databag item" }
|
@@ -63,7 +63,7 @@ class ChefServerWebui::DatabagItems < ChefServerWebui::Application
|
|
63
63
|
@databag_item.data_bag @databag_name
|
64
64
|
@databag_item.raw_data = JSON.parse(params[:json_data])
|
65
65
|
@databag_item.create
|
66
|
-
redirect(
|
66
|
+
redirect(url(:databag_databag_items, :databag_id => @databag_name), :message => { :notice => "Databag item created successfully" })
|
67
67
|
rescue => e
|
68
68
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
69
69
|
@_message = { :error => "Could not create databag item" }
|
@@ -84,7 +84,7 @@ class ChefServerWebui::DatabagItems < ChefServerWebui::Application
|
|
84
84
|
display @databag_item
|
85
85
|
rescue => e
|
86
86
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
87
|
-
redirect(
|
87
|
+
redirect(url(:databag_databag_items), {:message => { :error => "Could not show the databag item" }, :permanent => true})
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
@@ -92,10 +92,10 @@ class ChefServerWebui::DatabagItems < ChefServerWebui::Application
|
|
92
92
|
begin
|
93
93
|
@databag_item = Chef::DataBagItem.new
|
94
94
|
@databag_item.destroy(databag_id, item_id)
|
95
|
-
redirect(
|
95
|
+
redirect(url(:databag_databag_items), {:message => { :notice => "Databag item deleted successfully" }, :permanent => true})
|
96
96
|
rescue => e
|
97
97
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
98
|
-
redirect(
|
98
|
+
redirect(url(:databag_databag_items), {:message => { :error => "Could not delete databag item" }, :permanent => true})
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
data/app/controllers/databags.rb
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
require 'chef' / 'data_bag'
|
20
20
|
|
21
|
-
class
|
21
|
+
class Databags < Application
|
22
22
|
|
23
23
|
provides :html, :json
|
24
24
|
before :login_required
|
@@ -33,7 +33,7 @@ class ChefServerWebui::Databags < ChefServerWebui::Application
|
|
33
33
|
@databag = Chef::DataBag.new
|
34
34
|
@databag.name params[:name]
|
35
35
|
@databag.create
|
36
|
-
redirect(
|
36
|
+
redirect(url(:databags), :message => { :notice => "Created Databag #{@databag.name}" })
|
37
37
|
rescue => e
|
38
38
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
39
39
|
@_message = { :error => "Could not create databag" }
|
@@ -71,7 +71,7 @@ class ChefServerWebui::Databags < ChefServerWebui::Application
|
|
71
71
|
begin
|
72
72
|
r = Chef::REST.new(Chef::Config[:chef_server_url])
|
73
73
|
r.delete_rest("data/#{params[:id]}")
|
74
|
-
redirect(
|
74
|
+
redirect(absolute_url(:databags), {:message => { :notice => "Data bag #{params[:id]} deleted successfully" }, :permanent => true})
|
75
75
|
rescue => e
|
76
76
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
77
77
|
@databags = Chef::DataBag.list
|
data/app/controllers/main.rb
CHANGED
data/app/controllers/nodes.rb
CHANGED
@@ -20,32 +20,32 @@
|
|
20
20
|
|
21
21
|
require 'chef' / 'node'
|
22
22
|
|
23
|
-
class
|
23
|
+
class Nodes < Application
|
24
24
|
|
25
25
|
provides :html
|
26
26
|
|
27
27
|
before :login_required
|
28
|
-
before :authorized_node, :only => [ :update, :destroy ]
|
29
28
|
|
30
29
|
def index
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
30
|
+
begin
|
31
|
+
node_hash = Chef::Node.list
|
32
|
+
@node_list = node_hash.keys.sort_by {|a,b| node_hash[a] <=> node_hash[b]}
|
33
|
+
rescue => e
|
34
|
+
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
35
|
+
@_message = {:error => "Could not list nodes"}
|
36
|
+
@node_hash = {}
|
37
|
+
end
|
38
38
|
render
|
39
39
|
end
|
40
40
|
|
41
41
|
def show
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
42
|
+
begin
|
43
|
+
@node =Chef::Node.load(params[:id])
|
44
|
+
rescue => e
|
45
|
+
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
46
|
+
@_message = {:error => "Could not load node #{params[:id]}"}
|
47
|
+
@node = Chef::Node.new
|
48
|
+
end
|
49
49
|
render
|
50
50
|
end
|
51
51
|
|
@@ -86,14 +86,14 @@ class ChefServerWebui::Nodes < ChefServerWebui::Application
|
|
86
86
|
begin
|
87
87
|
@node = Chef::Node.new
|
88
88
|
@node.name params[:name]
|
89
|
-
@node.
|
89
|
+
@node.normal_attrs = JSON.parse(params[:attributes])
|
90
90
|
@node.run_list.reset!(params[:for_node] ? params[:for_node] : [])
|
91
91
|
raise ArgumentError, "Node name cannot be blank" if (params[:name].nil? || params[:name].length==0)
|
92
92
|
@node.create
|
93
|
-
redirect(
|
93
|
+
redirect(url(:nodes), :message => { :notice => "Created Node #{@node.name}" })
|
94
94
|
rescue => e
|
95
95
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
96
|
-
@node.
|
96
|
+
@node.normal_attrs = JSON.parse(params[:attributes])
|
97
97
|
@available_recipes = get_available_recipes
|
98
98
|
@available_roles = Chef::Role.list.keys.sort
|
99
99
|
@node.run_list params[:for_node]
|
@@ -107,7 +107,7 @@ class ChefServerWebui::Nodes < ChefServerWebui::Application
|
|
107
107
|
begin
|
108
108
|
@node = Chef::Node.load(params[:id])
|
109
109
|
@node.run_list.reset!(params[:for_node] ? params[:for_node] : [])
|
110
|
-
@node.
|
110
|
+
@node.normal_attrs = JSON.parse(params[:attributes])
|
111
111
|
@node.save
|
112
112
|
@_message = { :notice => "Updated Node" }
|
113
113
|
render :show
|
@@ -126,7 +126,7 @@ class ChefServerWebui::Nodes < ChefServerWebui::Application
|
|
126
126
|
begin
|
127
127
|
@node = Chef::Node.load(params[:id])
|
128
128
|
@node.destroy
|
129
|
-
redirect(
|
129
|
+
redirect(absolute_url(:nodes), {:message => { :notice => "Node #{params[:id]} deleted successfully" }, :permanent => true})
|
130
130
|
rescue => e
|
131
131
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
132
132
|
@node_list = Chef::Node.list()
|
@@ -22,7 +22,7 @@ require 'pathname'
|
|
22
22
|
require 'openid'
|
23
23
|
require (Chef::Config[:openid_cstore_couchdb] ? 'openid-store-couchdb' : 'openid/store/filesystem')
|
24
24
|
|
25
|
-
class
|
25
|
+
class OpenidConsumer < Application
|
26
26
|
|
27
27
|
provides :html
|
28
28
|
|
@@ -42,8 +42,8 @@ class ChefServerWebui::OpenidConsumer < ChefServerWebui::Application
|
|
42
42
|
raise BadRequest, "Discovery failed for #{oid}: #{e}"
|
43
43
|
end
|
44
44
|
|
45
|
-
return_to =
|
46
|
-
realm =
|
45
|
+
return_to = absolute_url(:openid_consumer_complete)
|
46
|
+
realm = absolute_url(:openid_consumer)
|
47
47
|
|
48
48
|
if oidreq.send_redirect?(realm, return_to, params[:immediate])
|
49
49
|
return redirect(oidreq.redirect_url(realm, return_to, params[:immediate]))
|
@@ -55,7 +55,7 @@ class ChefServerWebui::OpenidConsumer < ChefServerWebui::Application
|
|
55
55
|
|
56
56
|
def login
|
57
57
|
if session[:user]
|
58
|
-
redirect(
|
58
|
+
redirect(url(:nodes), :message => { :warning => "You've already logged in with user #{session[:user]}" })
|
59
59
|
else
|
60
60
|
oid = params[:openid_identifier]
|
61
61
|
raise(Unauthorized, "Sorry, #{oid} is not an authorized OpenID.") unless is_authorized_openid_identifier?(oid, Chef::Config[:authorized_openid_identifiers])
|
@@ -66,7 +66,7 @@ class ChefServerWebui::OpenidConsumer < ChefServerWebui::Application
|
|
66
66
|
|
67
67
|
def complete
|
68
68
|
# FIXME - url_for some action is not necessarily the current URL.
|
69
|
-
current_url =
|
69
|
+
current_url = absolute_url(:openid_consumer_complete)
|
70
70
|
parameters = params.reject{|k,v| k == "controller" || k == "action"}
|
71
71
|
oidresp = consumer.complete(parameters, current_url)
|
72
72
|
case oidresp.status
|
@@ -95,11 +95,11 @@ class ChefServerWebui::OpenidConsumer < ChefServerWebui::Application
|
|
95
95
|
end
|
96
96
|
end
|
97
97
|
if session[:user].nil?
|
98
|
-
redirect(
|
98
|
+
redirect(url(:openid_consumer), :message => { :error => "No user is associated with this OpenID." })
|
99
99
|
return "No user is associated with this OpenID."
|
100
100
|
end
|
101
101
|
#end
|
102
|
-
redirect_back_or_default(
|
102
|
+
redirect_back_or_default(absolute_url(:nodes))
|
103
103
|
return "Verification of #{oidresp.display_identifier} succeeded."
|
104
104
|
when OpenID::Consumer::SETUP_NEEDED
|
105
105
|
return "Immediate request failed - Setup Needed"
|
@@ -107,12 +107,12 @@ class ChefServerWebui::OpenidConsumer < ChefServerWebui::Application
|
|
107
107
|
return "OpenID transaction cancelled."
|
108
108
|
else
|
109
109
|
end
|
110
|
-
redirect
|
110
|
+
redirect absolute_url(:openid_consumer)
|
111
111
|
end
|
112
112
|
|
113
113
|
def logout
|
114
114
|
cleanup_session
|
115
|
-
redirect
|
115
|
+
redirect url(:top)
|
116
116
|
end
|
117
117
|
|
118
118
|
private
|
data/app/controllers/roles.rb
CHANGED
@@ -19,7 +19,7 @@
|
|
19
19
|
|
20
20
|
require 'chef/role'
|
21
21
|
|
22
|
-
class
|
22
|
+
class Roles < Application
|
23
23
|
|
24
24
|
provides :html
|
25
25
|
before :login_required
|
@@ -92,7 +92,7 @@ class ChefServerWebui::Roles < ChefServerWebui::Application
|
|
92
92
|
@role.default_attributes(JSON.parse(params[:default_attributes])) if params[:default_attributes] != ''
|
93
93
|
@role.override_attributes(JSON.parse(params[:override_attributes])) if params[:override_attributes] != ''
|
94
94
|
@role.create
|
95
|
-
redirect(
|
95
|
+
redirect(url(:roles), :message => { :notice => "Created Role #{@role.name}" })
|
96
96
|
rescue => e
|
97
97
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
98
98
|
@available_recipes = get_available_recipes
|
@@ -134,7 +134,7 @@ class ChefServerWebui::Roles < ChefServerWebui::Application
|
|
134
134
|
begin
|
135
135
|
@role = Chef::Role.load(params[:id])
|
136
136
|
@role.destroy
|
137
|
-
redirect(
|
137
|
+
redirect(absolute_url(:roles), :message => { :notice => "Role #{@role.name} deleted successfully." }, :permanent => true)
|
138
138
|
rescue => e
|
139
139
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
140
140
|
@role_list = Chef::Role.list()
|
data/app/controllers/search.rb
CHANGED
data/app/controllers/status.rb
CHANGED
data/app/controllers/users.rb
CHANGED
@@ -20,7 +20,7 @@ require 'chef'/'webui_user'
|
|
20
20
|
require 'uri'
|
21
21
|
require 'merb-param-protection'
|
22
22
|
|
23
|
-
class
|
23
|
+
class Users < Application
|
24
24
|
|
25
25
|
provides :html
|
26
26
|
before :login_required, :exclude => [:login, :login_exec, :complete]
|
@@ -114,7 +114,7 @@ class ChefServerWebui::Users < ChefServerWebui::Application
|
|
114
114
|
@user.admin = true if params[:admin]
|
115
115
|
(params[:openid].length == 0 || params[:openid].nil?) ? @user.set_openid(nil) : @user.set_openid(URI.parse(params[:openid]).normalize.to_s)
|
116
116
|
@user.create
|
117
|
-
redirect(
|
117
|
+
redirect(url(:users), :message => { :notice => "Created User #{params[:name]}" })
|
118
118
|
rescue => e
|
119
119
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
120
120
|
@_message = { :error => "Could not create user" }
|
@@ -124,7 +124,7 @@ class ChefServerWebui::Users < ChefServerWebui::Application
|
|
124
124
|
|
125
125
|
def login
|
126
126
|
@user = Chef::WebUIUser.new
|
127
|
-
session[:user] ? redirect(
|
127
|
+
session[:user] ? redirect(url(:nodes), :message => { :warning => "You've already logged in with user #{session[:user]}" }) : (render :layout => 'login')
|
128
128
|
end
|
129
129
|
|
130
130
|
def login_exec
|
@@ -143,12 +143,12 @@ class ChefServerWebui::Users < ChefServerWebui::Application
|
|
143
143
|
def complete
|
144
144
|
session[:user] = params[:name]
|
145
145
|
session[:level] = (@user.admin == true ? :admin : :user)
|
146
|
-
(@user.name == Chef::Config[:web_ui_admin_user_name] && @user.verify_password(Chef::Config[:web_ui_admin_default_password])) ? redirect(
|
146
|
+
(@user.name == Chef::Config[:web_ui_admin_user_name] && @user.verify_password(Chef::Config[:web_ui_admin_default_password])) ? redirect(url(:users_edit, :user_id => @user.name), :message => { :warning => "Please change the default password" }) : redirect_back_or_default(absolute_url(:nodes))
|
147
147
|
end
|
148
148
|
|
149
149
|
def logout
|
150
150
|
cleanup_session
|
151
|
-
redirect
|
151
|
+
redirect url(:top)
|
152
152
|
end
|
153
153
|
|
154
154
|
def destroy
|
@@ -158,7 +158,7 @@ class ChefServerWebui::Users < ChefServerWebui::Application
|
|
158
158
|
@user = Chef::WebUIUser.load(params[:user_id])
|
159
159
|
@user.destroy
|
160
160
|
logout if params[:user_id] == session[:user]
|
161
|
-
redirect(
|
161
|
+
redirect(absolute_url(:users), {:message => { :notice => "User #{params[:user_id]} deleted successfully" }, :permanent => true})
|
162
162
|
rescue => e
|
163
163
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
164
164
|
session[:level] != :admin ? set_user_and_redirect : redirect_to_list_users({ :error => $! })
|
@@ -173,7 +173,7 @@ class ChefServerWebui::Users < ChefServerWebui::Application
|
|
173
173
|
rescue
|
174
174
|
logout_and_redirect_to_login
|
175
175
|
else
|
176
|
-
redirect(
|
176
|
+
redirect(url(:users_show, :user_id => session[:user]), {:message => { :error => $! }, :permanent => true})
|
177
177
|
end
|
178
178
|
end
|
179
179
|
|
@@ -1,161 +1,6 @@
|
|
1
1
|
require 'chef/mixin/deep_merge'
|
2
2
|
|
3
3
|
module Merb
|
4
|
-
module
|
5
|
-
module ApplicationHelper
|
6
|
-
|
7
|
-
# @param *segments<Array[#to_s]> Path segments to append.
|
8
|
-
#
|
9
|
-
# @return <String>
|
10
|
-
# A path relative to the public directory, with added segments.
|
11
|
-
def image_path(*segments)
|
12
|
-
public_path_for(:image, *segments)
|
13
|
-
end
|
14
|
-
|
15
|
-
# @param *segments<Array[#to_s]> Path segments to append.
|
16
|
-
#
|
17
|
-
# @return <String>
|
18
|
-
# A path relative to the public directory, with added segments.
|
19
|
-
def javascript_path(*segments)
|
20
|
-
public_path_for(:javascript, *segments)
|
21
|
-
end
|
22
|
-
|
23
|
-
# @param *segments<Array[#to_s]> Path segments to append.
|
24
|
-
#
|
25
|
-
# @return <String>
|
26
|
-
# A path relative to the public directory, with added segments.
|
27
|
-
def stylesheet_path(*segments)
|
28
|
-
public_path_for(:stylesheet, *segments)
|
29
|
-
end
|
30
|
-
|
31
|
-
# Construct a path relative to the public directory
|
32
|
-
#
|
33
|
-
# @param <Symbol> The type of component.
|
34
|
-
# @param *segments<Array[#to_s]> Path segments to append.
|
35
|
-
#
|
36
|
-
# @return <String>
|
37
|
-
# A path relative to the public directory, with added segments.
|
38
|
-
def public_path_for(type, *segments)
|
39
|
-
::ChefServerWebui.public_path_for(type, *segments)
|
40
|
-
end
|
41
|
-
|
42
|
-
# Construct an app-level path.
|
43
|
-
#
|
44
|
-
# @param <Symbol> The type of component.
|
45
|
-
# @param *segments<Array[#to_s]> Path segments to append.
|
46
|
-
#
|
47
|
-
# @return <String>
|
48
|
-
# A path within the host application, with added segments.
|
49
|
-
def app_path_for(type, *segments)
|
50
|
-
::ChefServerWebui.app_path_for(type, *segments)
|
51
|
-
end
|
52
|
-
|
53
|
-
# Construct a slice-level path.
|
54
|
-
#
|
55
|
-
# @param <Symbol> The type of component.
|
56
|
-
# @param *segments<Array[#to_s]> Path segments to append.
|
57
|
-
#
|
58
|
-
# @return <String>
|
59
|
-
# A path within the slice source (Gem), with added segments.
|
60
|
-
def slice_path_for(type, *segments)
|
61
|
-
::ChefServerWebui.slice_path_for(type, *segments)
|
62
|
-
end
|
63
|
-
|
64
|
-
def build_tree(name, node, default={}, override={})
|
65
|
-
node = Chef::Mixin::DeepMerge.merge(default, node)
|
66
|
-
node = Chef::Mixin::DeepMerge.merge(node, override)
|
67
|
-
html = "<table id='#{name}' class='tree table'>"
|
68
|
-
html << "<tr><th class='first'>Attribute</th><th class='last'>Value</th></tr>"
|
69
|
-
count = 0
|
70
|
-
parent = 0
|
71
|
-
append_tree(name, html, node, count, parent, override)
|
72
|
-
html << "</table>"
|
73
|
-
html
|
74
|
-
end
|
75
|
-
|
76
|
-
def append_tree(name, html, node, count, parent, override)
|
77
|
-
node.sort{ |a,b| a[0] <=> b[0] }.each do |key, value|
|
78
|
-
to_send = Array.new
|
79
|
-
count += 1
|
80
|
-
is_parent = false
|
81
|
-
local_html = ""
|
82
|
-
local_html << "<tr id='#{name}-#{count}' class='collapsed #{name}"
|
83
|
-
if parent != 0
|
84
|
-
local_html << " child-of-#{name}-#{parent}' style='display: none;'>"
|
85
|
-
else
|
86
|
-
local_html << "'>"
|
87
|
-
end
|
88
|
-
local_html << "<td class='table-key'><span toggle='#{name}-#{count}'/>#{key}</td>"
|
89
|
-
case value
|
90
|
-
when Hash
|
91
|
-
is_parent = true
|
92
|
-
local_html << "<td></td>"
|
93
|
-
p = count
|
94
|
-
to_send << Proc.new { append_tree(name, html, value, count, p, override) }
|
95
|
-
when Array
|
96
|
-
is_parent = true
|
97
|
-
local_html << "<td></td>"
|
98
|
-
as_hash = {}
|
99
|
-
value.each_index { |i| as_hash[i] = value[i] }
|
100
|
-
p = count
|
101
|
-
to_send << Proc.new { append_tree(name, html, as_hash, count, p, override) }
|
102
|
-
else
|
103
|
-
local_html << "<td><div class='json-attr'>#{value}</div></td>"
|
104
|
-
end
|
105
|
-
local_html << "</tr>"
|
106
|
-
local_html.sub!(/class='collapsed/, 'class=\'collapsed parent') if is_parent
|
107
|
-
local_html.sub!(/<span/, "<span class='expander'") if is_parent
|
108
|
-
html << local_html
|
109
|
-
to_send.each { |s| count = s.call }
|
110
|
-
count += to_send.length
|
111
|
-
end
|
112
|
-
count
|
113
|
-
end
|
114
|
-
|
115
|
-
def syntax_highlight(uri)
|
116
|
-
code = Chef::REST.new(Chef::Config[:chef_server_url]).get_rest(uri)
|
117
|
-
CodeRay.encode_tokens(CodeRay.scan(code, :ruby), :span)
|
118
|
-
end
|
119
|
-
|
120
|
-
def str_to_bool(str)
|
121
|
-
str =~ /true/ ? true : false
|
122
|
-
end
|
123
|
-
|
124
|
-
#for showing search result
|
125
|
-
def determine_name(type, object)
|
126
|
-
case type
|
127
|
-
when :node, :role, :client
|
128
|
-
object.name
|
129
|
-
else
|
130
|
-
params[:id]
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
# Recursively build a tree of lists.
|
135
|
-
#def build_tree(node)
|
136
|
-
# list = "<dl>"
|
137
|
-
# list << "\n<!-- Beginning of Tree -->"
|
138
|
-
# walk = lambda do |key,value|
|
139
|
-
# case value
|
140
|
-
# when Hash, Array
|
141
|
-
# list << "\n<!-- Beginning of Enumerable obj -->"
|
142
|
-
# list << "\n<dt>#{key}</dt>"
|
143
|
-
# list << "<dd>"
|
144
|
-
# list << "\t<dl>\n"
|
145
|
-
# value.each(&walk)
|
146
|
-
# list << "\t</dl>\n"
|
147
|
-
# list << "</dd>"
|
148
|
-
# list << "\n<!-- End of Enumerable obj -->"
|
149
|
-
#
|
150
|
-
# else
|
151
|
-
# list << "\n<dt>#{key}</dt>"
|
152
|
-
# list << "<dd>#{value}</dd>"
|
153
|
-
# end
|
154
|
-
# end
|
155
|
-
# node.sort{ |a,b| a[0] <=> b[0] }.each(&walk)
|
156
|
-
# list << "</dl>"
|
157
|
-
#end
|
158
|
-
|
159
|
-
end
|
4
|
+
module ApplicationHelper
|
160
5
|
end
|
161
6
|
end
|