chef-server-webui 0.9.6 → 0.9.8.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -2
- data/app/controllers/application.rb +11 -17
- data/app/controllers/clients.rb +2 -0
- data/app/controllers/databags.rb +2 -1
- data/app/controllers/exceptions.rb +6 -0
- data/app/controllers/nodes.rb +1 -0
- data/app/controllers/openid_consumer.rb +5 -1
- data/app/controllers/roles.rb +5 -3
- data/app/controllers/users.rb +8 -11
- data/app/views/clients/_form.html.haml +1 -1
- data/app/views/cookbooks/index.html.haml +5 -3
- data/app/views/databags/index.html.haml +7 -5
- data/app/views/exceptions/admin_access_required.html.haml +7 -0
- data/app/views/layout/application.html.haml +3 -2
- data/app/views/layout/login.html.haml +1 -1
- data/app/views/nodes/show.html.haml +6 -4
- data/app/views/status/index.html.haml +24 -18
- data/app/views/users/_form.html.haml +31 -30
- data/app/views/users/_navigation.html.haml +7 -4
- data/app/views/users/edit.html.haml +1 -1
- data/bin/chef-server-webui +7 -0
- data/config/environments/development.rb +30 -0
- data/config/environments/production.rb +23 -0
- data/config/init.rb +15 -23
- data/config/rack.rb +18 -0
- data/config/router.rb +19 -0
- data/lib/chef-server-webui/version.rb +1 -1
- metadata +29 -36
data/Rakefile
CHANGED
@@ -21,7 +21,7 @@ spec = Gem::Specification.new do |s|
|
|
21
21
|
s.version = ChefServerWebui::VERSION
|
22
22
|
s.platform = Gem::Platform::RUBY
|
23
23
|
s.has_rdoc = true
|
24
|
-
s.extra_rdoc_files = ["README.rdoc", "LICENSE" ]
|
24
|
+
s.extra_rdoc_files = ["README.rdoc", "LICENSE", "config.ru" ]
|
25
25
|
s.summary = SUMMARY
|
26
26
|
s.description = s.summary
|
27
27
|
s.author = AUTHOR
|
@@ -29,7 +29,6 @@ spec = Gem::Specification.new do |s|
|
|
29
29
|
s.homepage = HOMEPAGE
|
30
30
|
|
31
31
|
s.add_dependency "merb-core", "~> 1.1.0"
|
32
|
-
s.add_dependency "merb-slices", "~> 1.1.0"
|
33
32
|
s.add_dependency "merb-assets", "~> 1.1.0"
|
34
33
|
s.add_dependency "merb-helpers", "~> 1.1.0"
|
35
34
|
s.add_dependency "merb-haml", "~> 1.1.0"
|
@@ -51,14 +51,17 @@ class Application < Merb::Controller
|
|
51
51
|
redirect(url(:users_login), {:message => { :error => $! }, :permanent => true})
|
52
52
|
end
|
53
53
|
|
54
|
+
def require_admin
|
55
|
+
raise AdminAccessRequired unless is_admin?
|
56
|
+
end
|
54
57
|
|
55
|
-
def is_admin
|
56
|
-
user = Chef::WebUIUser.load(
|
57
|
-
|
58
|
+
def is_admin?
|
59
|
+
user = Chef::WebUIUser.load(session[:user])
|
60
|
+
user.admin?
|
58
61
|
end
|
59
62
|
|
60
|
-
#return true if there is only one admin left, false
|
61
|
-
def is_last_admin
|
63
|
+
#return true if there is only one admin left, false otherwise
|
64
|
+
def is_last_admin?
|
62
65
|
count = 0
|
63
66
|
users = Chef::WebUIUser.list
|
64
67
|
users.each do |u, url|
|
@@ -72,18 +75,9 @@ class Application < Merb::Controller
|
|
72
75
|
end
|
73
76
|
|
74
77
|
#whether or not the user should be able to edit a user's admin status
|
75
|
-
def
|
76
|
-
is_admin
|
77
|
-
|
78
|
-
|
79
|
-
def authorized_user
|
80
|
-
if session[:level] == :admin
|
81
|
-
Chef::Log.debug("Authorized as Administrator")
|
82
|
-
true
|
83
|
-
else
|
84
|
-
Chef::Log.debug("Unauthorized")
|
85
|
-
raise Unauthorized, "The current user is not an Administrator, you can only Show and Edit the user itself. To control other users, login as an Administrator."
|
86
|
-
end
|
78
|
+
def can_edit_admin?
|
79
|
+
return false unless is_admin? && !is_last_admin?
|
80
|
+
true
|
87
81
|
end
|
88
82
|
|
89
83
|
# Store the URI of the current request in the session.
|
data/app/controllers/clients.rb
CHANGED
@@ -22,6 +22,7 @@ class Clients < Application
|
|
22
22
|
provides :json
|
23
23
|
provides :html
|
24
24
|
before :login_required
|
25
|
+
before :require_admin, :exclude => [:index, :show]
|
25
26
|
|
26
27
|
# GET /clients
|
27
28
|
def index
|
@@ -61,6 +62,7 @@ class Clients < Application
|
|
61
62
|
|
62
63
|
# GET /clients/new
|
63
64
|
def new
|
65
|
+
raise AdminAccessRequired unless params[:user_id] == session[:user] unless session[:level] == :admin
|
64
66
|
@client = Chef::ApiClient.new
|
65
67
|
render
|
66
68
|
end
|
data/app/controllers/databags.rb
CHANGED
@@ -16,4 +16,10 @@
|
|
16
16
|
# See the License for the specific language governing permissions and
|
17
17
|
# limitations under the License.
|
18
18
|
#
|
19
|
+
class AdminAccessRequired < Merb::ControllerExceptions::Forbidden; end
|
19
20
|
|
21
|
+
class Exceptions < Merb::Controller
|
22
|
+
def admin_access_required
|
23
|
+
render :layout => nil
|
24
|
+
end
|
25
|
+
end
|
data/app/controllers/nodes.rb
CHANGED
@@ -90,7 +90,11 @@ class OpenidConsumer < Application
|
|
90
90
|
user = Chef::WebUIUser.load(u)
|
91
91
|
if user.openid == oidresp.identity_url
|
92
92
|
session[:user] = user.name
|
93
|
-
|
93
|
+
if user.admin
|
94
|
+
session[:level] = :admin
|
95
|
+
else
|
96
|
+
session[:level] = :user
|
97
|
+
end
|
94
98
|
break
|
95
99
|
end
|
96
100
|
end
|
data/app/controllers/roles.rb
CHANGED
@@ -22,7 +22,8 @@ require 'chef/role'
|
|
22
22
|
class Roles < Application
|
23
23
|
|
24
24
|
provides :html
|
25
|
-
before :login_required
|
25
|
+
before :login_required
|
26
|
+
before :require_admin, :only => [:destroy]
|
26
27
|
|
27
28
|
# GET /roles
|
28
29
|
def index
|
@@ -100,7 +101,7 @@ class Roles < Application
|
|
100
101
|
@role = Chef::Role.new
|
101
102
|
@role.default_attributes(JSON.parse(params[:default_attributes])) if params[:default_attributes] != ''
|
102
103
|
@role.override_attributes(JSON.parse(params[:override_attributes])) if params[:override_attributes] != ''
|
103
|
-
@run_list = params[:for_role]
|
104
|
+
@run_list = Chef::RunList.new.reset!(Array(params[:for_role]))
|
104
105
|
@_message = { :error => "Could not create role" }
|
105
106
|
render :new
|
106
107
|
end
|
@@ -121,7 +122,8 @@ class Roles < Application
|
|
121
122
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
122
123
|
@available_recipes = get_available_recipes
|
123
124
|
@available_roles = Chef::Role.list.keys.sort
|
124
|
-
@run_list =
|
125
|
+
@run_list = Chef::RunList.new.reset!( Array(params[:for_role]))
|
126
|
+
Chef::Log.error(@run_list.inspect)
|
125
127
|
@role.default_attributes(JSON.parse(params[:default_attributes])) if params[:default_attributes] != ''
|
126
128
|
@role.override_attributes(JSON.parse(params[:override_attributes])) if params[:override_attributes] != ''
|
127
129
|
@_message = {:error => "Could not update role #{params[:id]}"}
|
data/app/controllers/users.rb
CHANGED
@@ -24,12 +24,12 @@ class Users < Application
|
|
24
24
|
|
25
25
|
provides :html
|
26
26
|
before :login_required, :exclude => [:login, :login_exec, :complete]
|
27
|
+
before :require_admin, :exclude => [:login, :login_exec, :complete, :show, :edit, :logout, :destroy]
|
27
28
|
log_params_filtered :password, :password2, :new_password, :confirm_new_password
|
28
29
|
|
29
30
|
# List users, only if the user is admin.
|
30
31
|
def index
|
31
32
|
begin
|
32
|
-
authorized_user
|
33
33
|
@users = Chef::WebUIUser.list
|
34
34
|
render
|
35
35
|
rescue => e
|
@@ -41,7 +41,6 @@ class Users < Application
|
|
41
41
|
# Edit user. Admin can edit everyone, non-admin user can only edit itself.
|
42
42
|
def edit
|
43
43
|
begin
|
44
|
-
raise Forbidden, "The current user is not an Administrator, you can only Show and Edit the user itself. To control other users, login as an Administrator." unless params[:user_id] == session[:user] unless session[:level] == :admin
|
45
44
|
@user = Chef::WebUIUser.load(params[:user_id])
|
46
45
|
render
|
47
46
|
rescue => e
|
@@ -53,7 +52,6 @@ class Users < Application
|
|
53
52
|
# Show the details of a user. If the user is not admin, only able to show itself; otherwise able to show everyone
|
54
53
|
def show
|
55
54
|
begin
|
56
|
-
raise Forbidden, "The current user is not an Administrator, you can only Show and Edit the user itself. To control other users, login as an Administrator." unless params[:user_id] == session[:user] unless session[:level] == :admin
|
57
55
|
@user = Chef::WebUIUser.load(params[:user_id])
|
58
56
|
render
|
59
57
|
rescue => e
|
@@ -67,8 +65,8 @@ class Users < Application
|
|
67
65
|
begin
|
68
66
|
@user = Chef::WebUIUser.load(params[:user_id])
|
69
67
|
|
70
|
-
if session[:level] == :admin and
|
71
|
-
@user.admin =
|
68
|
+
if session[:level] == :admin and !is_last_admin?
|
69
|
+
@user.admin = params[:admin] =~ /1/ ? true : false
|
72
70
|
end
|
73
71
|
|
74
72
|
if params[:user_id] == session[:user] && params[:admin] == 'false'
|
@@ -85,18 +83,18 @@ class Users < Application
|
|
85
83
|
@user.set_openid(URI.parse(params[:openid]).normalize.to_s)
|
86
84
|
end
|
87
85
|
@user.save
|
88
|
-
@_message = { :notice => "Updated
|
86
|
+
@_message = { :notice => "Updated user #{@user.name}." }
|
89
87
|
render :show
|
90
88
|
rescue => e
|
91
89
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
92
|
-
@
|
90
|
+
@u = Chef::WebUIUser.load(params[:user_id])
|
91
|
+
@_message = { :error => "Could not update user #{@user.name}." }
|
93
92
|
render :edit
|
94
93
|
end
|
95
94
|
end
|
96
95
|
|
97
96
|
def new
|
98
97
|
begin
|
99
|
-
authorized_user
|
100
98
|
@user = Chef::WebUIUser.new
|
101
99
|
render
|
102
100
|
rescue => e
|
@@ -107,7 +105,6 @@ class Users < Application
|
|
107
105
|
|
108
106
|
def create
|
109
107
|
begin
|
110
|
-
authorized_user
|
111
108
|
@user = Chef::WebUIUser.new
|
112
109
|
@user.name = params[:name]
|
113
110
|
@user.set_password(params[:password], params[:password2])
|
@@ -153,12 +150,12 @@ class Users < Application
|
|
153
150
|
|
154
151
|
def destroy
|
155
152
|
begin
|
156
|
-
raise Forbidden, "The last admin user cannot be deleted" if (is_admin(params[:user_id]) && is_last_admin)
|
157
153
|
raise Forbidden, "A non-admin user can only delete itself" if (params[:user_id] != session[:user] && session[:level] != :admin)
|
154
|
+
raise Forbidden, "The last admin user cannot be deleted" if (is_admin? && is_last_admin? && session[:user] == params[:user_id])
|
158
155
|
@user = Chef::WebUIUser.load(params[:user_id])
|
159
156
|
@user.destroy
|
160
157
|
logout if params[:user_id] == session[:user]
|
161
|
-
redirect(absolute_url(:users), {:message => { :notice => "User #{params[:user_id]} deleted successfully" }, :permanent => true})
|
158
|
+
redirect(absolute_url(:users), {:message => { :notice => "User #{params[:user_id]} deleted successfully." }, :permanent => true})
|
162
159
|
rescue => e
|
163
160
|
Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
|
164
161
|
session[:level] != :admin ? set_user_and_redirect : redirect_to_list_users({ :error => $! })
|
@@ -3,8 +3,10 @@
|
|
3
3
|
%h2.title Cookbooks
|
4
4
|
.inner
|
5
5
|
%table.table
|
6
|
-
%
|
7
|
-
%
|
6
|
+
%thead
|
7
|
+
%tr
|
8
|
+
%th.first Cookbook Name
|
9
|
+
%tbody
|
8
10
|
- @cl.sort.each_with_index do |cookbook, index|
|
9
11
|
%tr{:class => "#{index % 2 == 1 ? 'odd' : 'even'}"}
|
10
|
-
%td= link_to cookbook[0], url(:cookbook, { :id => cookbook[0] })
|
12
|
+
%td= link_to cookbook[0], url(:cookbook, { :id => cookbook[0] })
|
@@ -6,14 +6,16 @@
|
|
6
6
|
.content
|
7
7
|
.inner
|
8
8
|
%table.table
|
9
|
-
%
|
10
|
-
%
|
11
|
-
|
12
|
-
|
9
|
+
%thead
|
10
|
+
%tr
|
11
|
+
%th.first{:colspan => 2} Databag Name
|
12
|
+
%th
|
13
|
+
%th.last
|
14
|
+
%tbody
|
13
15
|
- @databags.sort.each_with_index do |databag, index|
|
14
16
|
%tr{:class => "#{index % 2 == 1 ? 'odd' : 'even'}"}
|
15
17
|
%td{:colspan => 2}= link_to databag[0], url(:databag, { :id => databag[0] })
|
16
18
|
%td
|
17
19
|
= link_to('Edit', url(:databag, :id => databag[0]))
|
18
20
|
|
|
19
|
-
= link_to('Delete', url(:databag, :id => databag[0]), :method => "delete", :confirm => "Really delete Databag #{databag[0]}? There is no undo.")
|
21
|
+
= link_to('Delete', url(:databag, :id => databag[0]), :method => "delete", :confirm => "Really delete Databag #{databag[0]}? There is no undo.")
|
@@ -20,7 +20,8 @@
|
|
20
20
|
#user-navigation
|
21
21
|
%ul
|
22
22
|
- if session[:user]
|
23
|
-
%li= link_to "
|
23
|
+
%li= link_to "Edit account", url(:users_edit, :user_id => session[:user]), :method => 'get'
|
24
|
+
%li= link_to "Logout #{h session[:user]} (#{session[:level].to_s})", url(:users_logout), :method => 'get', :confirm => "Are you sure you want to logout?"
|
24
25
|
- else
|
25
26
|
%li= link_to "Login", url(:users_login), :rel => "facebox"
|
26
27
|
.clear
|
@@ -49,7 +50,7 @@
|
|
49
50
|
= catch_content :for_layout
|
50
51
|
#footer
|
51
52
|
.block
|
52
|
-
%p Copyright ©
|
53
|
+
%p Copyright © 2010 Opscode
|
53
54
|
#sidebar
|
54
55
|
.block.notice#sidebar_block_notice= catch_content :sidebar_block_notice
|
55
56
|
.block#sidebar_block= catch_content :sidebar_block
|
@@ -29,7 +29,7 @@
|
|
29
29
|
= catch_content :for_layout
|
30
30
|
#footer
|
31
31
|
.block
|
32
|
-
%p Copyright ©
|
32
|
+
%p Copyright © 2010 Opscode
|
33
33
|
#sidebar
|
34
34
|
.block.notice#sidebar_block_notice= catch_content :sidebar_block_notice
|
35
35
|
.block#sidebar_block= catch_content :sidebar_block
|
@@ -9,10 +9,12 @@
|
|
9
9
|
.left
|
10
10
|
%h3 Run List
|
11
11
|
%table.table
|
12
|
-
%
|
13
|
-
%
|
14
|
-
|
15
|
-
|
12
|
+
%thead
|
13
|
+
%tr
|
14
|
+
%th.first Position
|
15
|
+
%th Name
|
16
|
+
%th.last Type
|
17
|
+
%tbody
|
16
18
|
- if @node.run_list.empty?
|
17
19
|
%tr
|
18
20
|
%td{:colspan => 2} This node has no roles or recipes applied.
|
@@ -3,14 +3,16 @@
|
|
3
3
|
%h2.title Status
|
4
4
|
.inner
|
5
5
|
%table.table
|
6
|
-
%
|
7
|
-
%
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
%thead
|
7
|
+
%tr
|
8
|
+
%th.first Node Name
|
9
|
+
%th Platform
|
10
|
+
%th FQDN
|
11
|
+
%th IP Address
|
12
|
+
%th Uptime
|
13
|
+
%th Last Check-in
|
14
|
+
%th.last Run List
|
15
|
+
%tbody
|
14
16
|
- if @status.empty?
|
15
17
|
%tr
|
16
18
|
%td{:colspan => 7}= "You appear to have no nodes - try connecting one, or creating or editing a #{link_to('client', url(:clients))}"
|
@@ -27,8 +29,9 @@
|
|
27
29
|
= link_to(node[1]["uptime"].split(" ")[0..1].join(" ") , "#", :class => 'tooltip')
|
28
30
|
.tooltip
|
29
31
|
%table.table.tooltip
|
30
|
-
%
|
31
|
-
%
|
32
|
+
%tbody
|
33
|
+
%tr
|
34
|
+
%td= node[1]["uptime"]
|
32
35
|
|
33
36
|
- unless node[1]["ohai_time"].nil?
|
34
37
|
- current_time = Time.now.to_f
|
@@ -55,10 +58,11 @@
|
|
55
58
|
= link_to(status_msg, "#", :class=> 'tooltip')
|
56
59
|
.tooltip
|
57
60
|
%table.table.tooltip
|
58
|
-
%
|
59
|
-
%
|
60
|
-
|
61
|
-
|
61
|
+
%tbody
|
62
|
+
%tr
|
63
|
+
%td
|
64
|
+
= ohai_time
|
65
|
+
%br/
|
62
66
|
- if hours == 0
|
63
67
|
= "#{minutes_text} ago"
|
64
68
|
- else
|
@@ -71,10 +75,12 @@
|
|
71
75
|
= link_to("Run List", "#", :class => 'tooltip')
|
72
76
|
.tooltip
|
73
77
|
%table.table.tooltip
|
74
|
-
%
|
75
|
-
%
|
76
|
-
|
77
|
-
|
78
|
+
%thead
|
79
|
+
%tr
|
80
|
+
%th.first Position
|
81
|
+
%th Name
|
82
|
+
%th.last Type
|
83
|
+
%tbody
|
78
84
|
- if node[1].run_list.empty?
|
79
85
|
%tr
|
80
86
|
%td{:colspan => 2} This node has no roles or recipes applied.
|
@@ -1,39 +1,40 @@
|
|
1
1
|
.content
|
2
2
|
.inner
|
3
|
-
|
4
|
-
|
5
|
-
.
|
6
|
-
|
3
|
+
= form(:action => form_url, :method => :post, :id => form_id, :class => 'form') do
|
4
|
+
-if form_for == "login"
|
5
|
+
%div.group
|
6
|
+
.text_field= text_field :id => "user_name", :name => "name", :label => "Username: ", :value => params.has_key?(:name) ? h(params[:name]) : @user.name
|
7
|
+
%br/
|
8
|
+
|
9
|
+
%div.group
|
10
|
+
.text_field= password_field :id=> "password", :name => "password", :label=>"Password: ", :class => "password_field"
|
11
|
+
%br/
|
12
|
+
=link_to("Or, log in with OpenID if you have one associated with an existing user account.", url(:openid_consumer))
|
13
|
+
%br/
|
7
14
|
|
8
|
-
|
9
|
-
.
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
- if form_for == "edit"
|
15
|
-
%div.group.form
|
16
|
-
%label.label New Password
|
17
|
-
= password_field :id=>"user_new_password", :name => "new_password", :class =>"password_field"
|
18
|
-
%span.description New password for the User. Keep blank if you do not want to change password.
|
15
|
+
- if form_for == "edit"
|
16
|
+
%div.group.form
|
17
|
+
%label.label New Password
|
18
|
+
= password_field :id=>"user_new_password", :name => "new_password", :class =>"password_field"
|
19
|
+
%span.description New password for the User. Keep blank if you do not want to change password.
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
%div.group.form
|
22
|
+
%label.label Confirm New Password
|
23
|
+
= password_field :id=>"user_confirm_new_password", :name => "confirm_new_password", :class =>"password_field"
|
24
|
+
%span.description Confirm new password for the User. Keep blank if you do not want to change password.
|
24
25
|
|
25
|
-
|
26
|
+
- if is_admin? && !is_last_admin?
|
27
|
+
%div.group.form
|
28
|
+
%label.label Admin
|
29
|
+
%input{ :type => "hidden", :name => "admin", :value => 0 }
|
30
|
+
%input{ :type => "checkbox", :name => "admin", :value => 1, :checked => @user.admin }
|
31
|
+
%span.description Whether or not the User is an admin.
|
32
|
+
|
26
33
|
%div.group.form
|
27
|
-
%label.label
|
28
|
-
= text_field :id => "
|
29
|
-
%span.description
|
30
|
-
|
31
|
-
%div.group.form
|
32
|
-
%label.label OpenID Association
|
33
|
-
= text_field :id => "openid", :name => "openid", :class => "text_field", :value => @user.openid
|
34
|
-
%span.description Associate an OpenID with the user account, leave blank if you do not want to associate one.
|
35
|
-
|
36
|
-
= form(:action => form_url, :method => :post, :id => form_id, :class => 'form') do
|
34
|
+
%label.label OpenID Association
|
35
|
+
= text_field :id => "openid", :name => "openid", :class => "text_field", :value => @user.openid
|
36
|
+
%span.description Associate an OpenID with the user account, leave blank if you do not want to associate one.
|
37
|
+
|
37
38
|
%div.group
|
38
39
|
.actions-bar
|
39
40
|
.actions= submit submit_name, :id => submit_id, :class => 'button'
|
@@ -1,9 +1,12 @@
|
|
1
1
|
.secondary-navigation
|
2
2
|
%ul
|
3
|
-
|
4
|
-
|
3
|
+
- if is_admin?
|
4
|
+
%li{ :class => "first #{active == 'index' ? "active" : ''}"}= link_to('List', url(:users))
|
5
|
+
- if is_admin?
|
6
|
+
%li{ :class => (active == 'create' ? "active" : '')}= link_to('Create', url(:users_new))
|
5
7
|
- if active != 'create' && active != 'index'
|
6
8
|
%li{ :class => (active == 'show' ? "active" : '')}= link_to('Show', url(:users_show))
|
7
|
-
|
8
|
-
|
9
|
+
- if @user.admin || @user.name == params[:user_id]
|
10
|
+
%li{ :class => (active == 'edit' ? "active" : '')}= link_to('Edit', url(:users_edit, :user_id => params[:user_id]))
|
11
|
+
%li= link_to('Delete', url(:users_delete, :user_id => params[:user_id]), :method => "delete", :confirm => "Really delete user #{params[:user_id]}? There is no undo.")
|
9
12
|
.clear
|
@@ -1,6 +1,6 @@
|
|
1
1
|
.block#block-tables
|
2
2
|
.content
|
3
|
-
%h2.title= "
|
3
|
+
%h2.title= "Edit user: #{h @user.name}"
|
4
4
|
.inner
|
5
5
|
= partial('navigation', :active => 'edit')
|
6
6
|
= partial('form', :header => "Edit User #{@user.name}", :form_id => 'edit_user', :submit_name => "Save User", :submit_id => "edit_user_button", :form_for => 'edit', :form_url => url(:users_update, @user.name) )
|
data/bin/chef-server-webui
CHANGED
@@ -30,6 +30,13 @@ require "merb-core"
|
|
30
30
|
$:.unshift(File.expand_path(File.dirname(__FILE__) + '/../../chef/lib'))
|
31
31
|
$:.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib'))
|
32
32
|
|
33
|
+
# Print the version if we have -v or --version
|
34
|
+
if ARGV.any? { |arg| arg =~ /\-v|\-\-version/ }
|
35
|
+
require 'chef-server-webui/version'
|
36
|
+
puts "Chef Server (Web UI) Version: #{ChefServerWebui::VERSION}"
|
37
|
+
exit 1
|
38
|
+
end
|
39
|
+
|
33
40
|
require 'chef'
|
34
41
|
require 'chef-server-webui'
|
35
42
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2010 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
Chef::Log.info("")
|
20
|
+
Chef::Log.info("*" * 80)
|
21
|
+
Chef::Log.info("* Starting Chef Server Web UI in Development Mode.")
|
22
|
+
Chef::Log.info("* Start the server with `-e production` for normal use")
|
23
|
+
Chef::Log.info("*" * 80)
|
24
|
+
Chef::Log.info("")
|
25
|
+
|
26
|
+
Merb::Config.use do |c|
|
27
|
+
c[:exception_details] = true
|
28
|
+
c[:reload_classes] = true
|
29
|
+
c[:reload_templates] = true
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2010 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
Merb::Config.use do |c|
|
20
|
+
c[:exception_details] = false
|
21
|
+
c[:reload_classes] = false
|
22
|
+
c[:reload_templates] = false
|
23
|
+
end
|
data/config/init.rb
CHANGED
@@ -1,24 +1,20 @@
|
|
1
1
|
#
|
2
|
-
#
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# loaded in a host application. To run your slice in standalone mode, just
|
7
|
-
# run 'slice' from its directory. The 'slice' command is very similar to
|
8
|
-
# the 'merb' command, and takes all the same options, including -i to drop
|
9
|
-
# into an irb session for example.
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
4
|
+
# Copyright:: Copyright (c) 2008-2010 Opscode, Inc.
|
5
|
+
# License:: Apache License, Version 2.0
|
10
6
|
#
|
11
|
-
#
|
12
|
-
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
13
10
|
#
|
14
|
-
#
|
15
|
-
# even create the specific environment file in config/environments/ just like
|
16
|
-
# in a regular Merb application.
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
17
12
|
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
22
18
|
#
|
23
19
|
|
24
20
|
|
@@ -39,15 +35,11 @@ require 'chef/webui_user'
|
|
39
35
|
use_template_engine :haml
|
40
36
|
|
41
37
|
Merb::Config.use do |c|
|
42
|
-
|
43
|
-
|
44
|
-
#c[:fork_for_class_load] = false
|
38
|
+
c[:name] = "chef-server-webui"
|
39
|
+
c[:fork_for_class_load] = false
|
45
40
|
c[:session_id_key] = '_chef_server_session_id'
|
46
41
|
c[:session_secret_key] = Chef::Config.manage_secret_key
|
47
42
|
c[:session_store] = 'cookie'
|
48
|
-
c[:exception_details] = true
|
49
|
-
c[:reload_classes] = true
|
50
|
-
c[:reload_templates] = true
|
51
43
|
|
52
44
|
c[:log_level] = Chef::Config[:log_level]
|
53
45
|
if Chef::Config[:log_location].kind_of?(String)
|
data/config/rack.rb
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2010 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
1
19
|
use Rack::ContentLength
|
2
20
|
use Merb::Rack::Static, Merb.dir_for(:public)
|
3
21
|
|
data/config/router.rb
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
4
|
+
# Copyright:: Copyright (c) 2008-2010 Opscode, Inc.
|
5
|
+
# License:: Apache License, Version 2.0
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
|
1
20
|
Merb::Router.prepare do
|
2
21
|
resources :nodes, :id => /[^\/]+/
|
3
22
|
resources :clients, :id => /[^\/]+/
|
metadata
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-server-webui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
4
|
+
prerelease: true
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 9
|
8
|
-
-
|
9
|
-
|
8
|
+
- 8
|
9
|
+
- beta
|
10
|
+
- 1
|
11
|
+
version: 0.9.8.beta.1
|
10
12
|
platform: ruby
|
11
13
|
authors:
|
12
14
|
- Opscode
|
@@ -14,7 +16,7 @@ autorequire:
|
|
14
16
|
bindir: bin
|
15
17
|
cert_chain: []
|
16
18
|
|
17
|
-
date: 2010-07-
|
19
|
+
date: 2010-07-23 00:00:00 -07:00
|
18
20
|
default_executable:
|
19
21
|
dependencies:
|
20
22
|
- !ruby/object:Gem::Dependency
|
@@ -33,7 +35,7 @@ dependencies:
|
|
33
35
|
prerelease: false
|
34
36
|
version_requirements: *id001
|
35
37
|
- !ruby/object:Gem::Dependency
|
36
|
-
name: merb-
|
38
|
+
name: merb-assets
|
37
39
|
requirement: &id002 !ruby/object:Gem::Requirement
|
38
40
|
none: false
|
39
41
|
requirements:
|
@@ -48,7 +50,7 @@ dependencies:
|
|
48
50
|
prerelease: false
|
49
51
|
version_requirements: *id002
|
50
52
|
- !ruby/object:Gem::Dependency
|
51
|
-
name: merb-
|
53
|
+
name: merb-helpers
|
52
54
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
55
|
none: false
|
54
56
|
requirements:
|
@@ -63,7 +65,7 @@ dependencies:
|
|
63
65
|
prerelease: false
|
64
66
|
version_requirements: *id003
|
65
67
|
- !ruby/object:Gem::Dependency
|
66
|
-
name: merb-
|
68
|
+
name: merb-haml
|
67
69
|
requirement: &id004 !ruby/object:Gem::Requirement
|
68
70
|
none: false
|
69
71
|
requirements:
|
@@ -78,7 +80,7 @@ dependencies:
|
|
78
80
|
prerelease: false
|
79
81
|
version_requirements: *id004
|
80
82
|
- !ruby/object:Gem::Dependency
|
81
|
-
name: merb-
|
83
|
+
name: merb-param-protection
|
82
84
|
requirement: &id005 !ruby/object:Gem::Requirement
|
83
85
|
none: false
|
84
86
|
requirements:
|
@@ -92,24 +94,9 @@ dependencies:
|
|
92
94
|
type: :runtime
|
93
95
|
prerelease: false
|
94
96
|
version_requirements: *id005
|
95
|
-
- !ruby/object:Gem::Dependency
|
96
|
-
name: merb-param-protection
|
97
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
|
-
requirements:
|
100
|
-
- - ~>
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
segments:
|
103
|
-
- 1
|
104
|
-
- 1
|
105
|
-
- 0
|
106
|
-
version: 1.1.0
|
107
|
-
type: :runtime
|
108
|
-
prerelease: false
|
109
|
-
version_requirements: *id006
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: json
|
112
|
-
requirement: &
|
99
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
113
100
|
none: false
|
114
101
|
requirements:
|
115
102
|
- - <=
|
@@ -121,10 +108,10 @@ dependencies:
|
|
121
108
|
version: 1.4.2
|
122
109
|
type: :runtime
|
123
110
|
prerelease: false
|
124
|
-
version_requirements: *
|
111
|
+
version_requirements: *id006
|
125
112
|
- !ruby/object:Gem::Dependency
|
126
113
|
name: thin
|
127
|
-
requirement: &
|
114
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
128
115
|
none: false
|
129
116
|
requirements:
|
130
117
|
- - ">="
|
@@ -134,10 +121,10 @@ dependencies:
|
|
134
121
|
version: "0"
|
135
122
|
type: :runtime
|
136
123
|
prerelease: false
|
137
|
-
version_requirements: *
|
124
|
+
version_requirements: *id007
|
138
125
|
- !ruby/object:Gem::Dependency
|
139
126
|
name: haml
|
140
|
-
requirement: &
|
127
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
141
128
|
none: false
|
142
129
|
requirements:
|
143
130
|
- - ">="
|
@@ -147,10 +134,10 @@ dependencies:
|
|
147
134
|
version: "0"
|
148
135
|
type: :runtime
|
149
136
|
prerelease: false
|
150
|
-
version_requirements: *
|
137
|
+
version_requirements: *id008
|
151
138
|
- !ruby/object:Gem::Dependency
|
152
139
|
name: ruby-openid
|
153
|
-
requirement: &
|
140
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
154
141
|
none: false
|
155
142
|
requirements:
|
156
143
|
- - ">="
|
@@ -160,10 +147,10 @@ dependencies:
|
|
160
147
|
version: "0"
|
161
148
|
type: :runtime
|
162
149
|
prerelease: false
|
163
|
-
version_requirements: *
|
150
|
+
version_requirements: *id009
|
164
151
|
- !ruby/object:Gem::Dependency
|
165
152
|
name: coderay
|
166
|
-
requirement: &
|
153
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
167
154
|
none: false
|
168
155
|
requirements:
|
169
156
|
- - ">="
|
@@ -173,7 +160,7 @@ dependencies:
|
|
173
160
|
version: "0"
|
174
161
|
type: :runtime
|
175
162
|
prerelease: false
|
176
|
-
version_requirements: *
|
163
|
+
version_requirements: *id010
|
177
164
|
description: A systems integration framework, built to bring the benefits of configuration management to your entire infrastructure.
|
178
165
|
email: chef@opscode.com
|
179
166
|
executables:
|
@@ -183,12 +170,15 @@ extensions: []
|
|
183
170
|
extra_rdoc_files:
|
184
171
|
- README.rdoc
|
185
172
|
- LICENSE
|
173
|
+
- config.ru
|
186
174
|
files:
|
187
175
|
- LICENSE
|
188
176
|
- README.rdoc
|
189
177
|
- Rakefile
|
190
178
|
- config.ru
|
191
179
|
- bin/chef-server-webui
|
180
|
+
- config/environments/development.rb
|
181
|
+
- config/environments/production.rb
|
192
182
|
- config/init.rb
|
193
183
|
- config/rack.rb
|
194
184
|
- config/router.rb
|
@@ -256,6 +246,7 @@ files:
|
|
256
246
|
- app/views/databags/index.html.haml
|
257
247
|
- app/views/databags/new.html.haml
|
258
248
|
- app/views/databags/show.html.haml
|
249
|
+
- app/views/exceptions/admin_access_required.html.haml
|
259
250
|
- app/views/exceptions/bad_request.json.erb
|
260
251
|
- app/views/exceptions/internal_server_error.html.erb
|
261
252
|
- app/views/exceptions/not_acceptable.html.erb
|
@@ -412,11 +403,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
412
403
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
413
404
|
none: false
|
414
405
|
requirements:
|
415
|
-
- - "
|
406
|
+
- - ">"
|
416
407
|
- !ruby/object:Gem::Version
|
417
408
|
segments:
|
418
|
-
-
|
419
|
-
|
409
|
+
- 1
|
410
|
+
- 3
|
411
|
+
- 1
|
412
|
+
version: 1.3.1
|
420
413
|
requirements: []
|
421
414
|
|
422
415
|
rubyforge_project:
|