bandshell 1.2 → 1.3
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.
- checksums.yaml +4 -4
- data/bin/bandshell-timer.rb +8 -1
- data/bin/bandshelld +14 -1
- data/lib/bandshell/application/app.rb +61 -38
- data/lib/bandshell/application/views/{password.erb → config_password.erb} +2 -8
- data/lib/bandshell/application/views/main.erb +0 -3
- data/lib/bandshell/application/views/navbar.erb +20 -0
- data/lib/bandshell/application/views/netsettings.erb +8 -14
- data/lib/bandshell/application/views/setup.erb +2 -8
- data/lib/bandshell/application/views/system_password.erb +19 -0
- data/lib/bandshell/config_store.rb +10 -3
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2989fd086430aa0b0d8c829cc7efa755d84dbc25
|
4
|
+
data.tar.gz: f57abc11dbec2c79dd7de4aba4a7a5a5e6bbb34e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95285d42380570c16207b27b9c2e097d5bf30dd98d8c55675007d7c2680be6ea62f891d010c18f5be61da1312b5ea66b5a1fe038d9e6080f51d19226ac79b87b
|
7
|
+
data.tar.gz: e70736faa3d57667f15ffa9e5a6aa0dd0dc0b64e4064e15a209306b0c055a3046196eea2db1aa1bd43ce62c3cac3de28f841a28dc1f689e1c827517114a08654
|
data/bin/bandshell-timer.rb
CHANGED
@@ -5,6 +5,7 @@
|
|
5
5
|
# Periodically ping the bandshell web app so that background tasks
|
6
6
|
# may be performed. Called by bandshelld as a daemon.
|
7
7
|
require "net/http"
|
8
|
+
require 'bandshell/config_store'
|
8
9
|
|
9
10
|
def linestamp
|
10
11
|
"bandshell-timer.rb ("+Time.now.to_s+"): "
|
@@ -21,9 +22,15 @@ end
|
|
21
22
|
puts linestamp + "connecting to bandshell at " + BandshellURL
|
22
23
|
|
23
24
|
StatusURI = URI.parse(BandshellURL+"/background-job")
|
24
|
-
|
25
|
+
|
25
26
|
loop do
|
26
27
|
sleep(5)
|
28
|
+
#if a system password is stored as a config, we need to restart bandshelld
|
29
|
+
#to execute chpasswd and clear that config
|
30
|
+
if Bandshell::ConfigStore.config_exists?('system_password')
|
31
|
+
system("bandshelld restart")
|
32
|
+
end
|
33
|
+
|
27
34
|
begin
|
28
35
|
response = Net::HTTP.get_response(StatusURI)
|
29
36
|
rescue Errno::ECONNREFUSED
|
data/bin/bandshelld
CHANGED
@@ -5,6 +5,19 @@
|
|
5
5
|
require "rubygems"
|
6
6
|
require "daemons"
|
7
7
|
require "bandshell/application/app"
|
8
|
+
require 'bandshell/config_store'
|
9
|
+
|
10
|
+
#if the password has not been changed before during initial setup,
|
11
|
+
#read a new one and change passwords accordingly
|
12
|
+
unless Bandshell::ConfigStore.config_exists?('system_passwords_changed')
|
13
|
+
system_password = Bandshell::ConfigStore.read_config('system_password', '')
|
14
|
+
unless system_password.empty?
|
15
|
+
system("echo \"root:#{system_password}\" | chpasswd")
|
16
|
+
system("echo \"concerto:#{system_password}\" | chpasswd")
|
17
|
+
Bandshell::ConfigStore.delete_config('system_password')
|
18
|
+
Bandshell::ConfigStore.write_config('system_passwords_changed', 'true')
|
19
|
+
end
|
20
|
+
end
|
8
21
|
|
9
22
|
dir_mode = (ConcertoConfigServer.development? ? :normal : :system)
|
10
23
|
|
@@ -18,6 +31,6 @@ timer_argv = ARGV.dup
|
|
18
31
|
timer_argv << "--" unless timer_argv.include? "--"
|
19
32
|
timer_argv << bandshell_url
|
20
33
|
|
21
|
-
Daemons.run(File.join(File.dirname(__FILE__), "bandshell-timer.rb"),
|
34
|
+
Daemons.run(File.join(File.dirname(__FILE__), "bandshell-timer.rb"),
|
22
35
|
:log_output=>true, :dir_mode => dir_mode,
|
23
36
|
:ARGV => timer_argv)
|
@@ -20,7 +20,7 @@ class ConcertoConfigServer < Sinatra::Base
|
|
20
20
|
|
21
21
|
# listen on all IPv4 and IPv6 interfaces
|
22
22
|
set :bind, '::'
|
23
|
-
|
23
|
+
|
24
24
|
# Provide an option to skip network settings when developing
|
25
25
|
set :no_netconfig, false
|
26
26
|
|
@@ -33,11 +33,15 @@ class ConcertoConfigServer < Sinatra::Base
|
|
33
33
|
rescue LoadError
|
34
34
|
puts ' Reloading is not enabled, however.'
|
35
35
|
puts ' You can enable limited app.rb reloading in development by'
|
36
|
-
puts ' installing the sinatra-contrib gem on your system.'
|
37
|
-
end
|
36
|
+
puts ' installing the sinatra-contrib gem on your system.'
|
37
|
+
end
|
38
38
|
set :no_netconfig, true
|
39
39
|
end
|
40
40
|
|
41
|
+
def active_page?(path='')
|
42
|
+
request.path_info == '/' + path
|
43
|
+
end
|
44
|
+
|
41
45
|
def player_info
|
42
46
|
# Note: probably not thread-safe.
|
43
47
|
@@player_info ||= Bandshell::PlayerInfo.new
|
@@ -45,19 +49,19 @@ class ConcertoConfigServer < Sinatra::Base
|
|
45
49
|
|
46
50
|
# push these over to netconfig.rb?
|
47
51
|
# Our list of available physical-layer connection methods...
|
48
|
-
CONNECTION_METHODS = [
|
49
|
-
Bandshell::WiredConnection,
|
50
|
-
Bandshell::WirelessConnection
|
52
|
+
CONNECTION_METHODS = [
|
53
|
+
Bandshell::WiredConnection,
|
54
|
+
Bandshell::WirelessConnection
|
51
55
|
]
|
52
56
|
# ... and available layer-3 addressing methods.
|
53
|
-
ADDRESSING_METHODS = [
|
54
|
-
Bandshell::DHCPAddressing,
|
55
|
-
Bandshell::StaticAddressing
|
57
|
+
ADDRESSING_METHODS = [
|
58
|
+
Bandshell::DHCPAddressing,
|
59
|
+
Bandshell::StaticAddressing
|
56
60
|
]
|
57
61
|
|
58
62
|
# Hosts we allow to access configuration without authenticating.
|
59
|
-
LOCALHOSTS = [
|
60
|
-
IPAddress.parse("127.0.0.1"), # ipv4
|
63
|
+
LOCALHOSTS = [
|
64
|
+
IPAddress.parse("127.0.0.1"), # ipv4
|
61
65
|
IPAddress.parse("::ffff:127.0.0.1"), # ipv6-mapped ipv4
|
62
66
|
IPAddress.parse("::1") # ipv6
|
63
67
|
]
|
@@ -78,7 +82,7 @@ class ConcertoConfigServer < Sinatra::Base
|
|
78
82
|
end
|
79
83
|
|
80
84
|
# Enforce authentication on actions.
|
81
|
-
# Calling from within an action will check authentication and return
|
85
|
+
# Calling from within an action will check authentication and return
|
82
86
|
# 401 if unauthorized.
|
83
87
|
def protected!
|
84
88
|
unless authorized?
|
@@ -96,13 +100,13 @@ class ConcertoConfigServer < Sinatra::Base
|
|
96
100
|
# Check authorization credentials.
|
97
101
|
# Currently configured to check if the REMOTE_ADDR is local and allow
|
98
102
|
# everything if so. This permits someone at local console to configure
|
99
|
-
# without the need for a password. Others must have the correct
|
103
|
+
# without the need for a password. Others must have the correct
|
100
104
|
# password to be considered authorized.
|
101
105
|
def authorized?
|
102
106
|
password = Bandshell::ConfigStore.read_config(
|
103
107
|
'password', 'default'
|
104
108
|
)
|
105
|
-
if request_is_local?
|
109
|
+
if request_is_local?
|
106
110
|
# allow all requests from localhost no questions asked
|
107
111
|
true
|
108
112
|
else
|
@@ -128,7 +132,7 @@ class ConcertoConfigServer < Sinatra::Base
|
|
128
132
|
end
|
129
133
|
end
|
130
134
|
|
131
|
-
# Try to figure out what our current port is
|
135
|
+
# Try to figure out what our current port is
|
132
136
|
# and return it as a string.
|
133
137
|
def my_port
|
134
138
|
settings.port
|
@@ -153,7 +157,7 @@ class ConcertoConfigServer < Sinatra::Base
|
|
153
157
|
# Check if we can retrieve a URL and get a 200 status code.
|
154
158
|
def validate_url(url)
|
155
159
|
begin
|
156
|
-
# this will fail with Errno::something if server
|
160
|
+
# this will fail with Errno::something if server
|
157
161
|
# can't be reached
|
158
162
|
uri = URI(url)
|
159
163
|
Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
|
@@ -164,7 +168,7 @@ class ConcertoConfigServer < Sinatra::Base
|
|
164
168
|
if response.code != "200"
|
165
169
|
fail
|
166
170
|
end
|
167
|
-
end
|
171
|
+
end
|
168
172
|
|
169
173
|
# if we get here we have a somewhat valid URL to go to
|
170
174
|
true
|
@@ -176,7 +180,9 @@ class ConcertoConfigServer < Sinatra::Base
|
|
176
180
|
end
|
177
181
|
|
178
182
|
get '/' do
|
179
|
-
if
|
183
|
+
if !Bandshell::ConfigStore.config_exists?('system_passwords_changed')
|
184
|
+
redirect '/system_password'
|
185
|
+
elsif concerto_url == ''
|
180
186
|
redirect '/setup'
|
181
187
|
else
|
182
188
|
redirect '/player_status'
|
@@ -206,13 +212,13 @@ class ConcertoConfigServer < Sinatra::Base
|
|
206
212
|
get '/setup' do
|
207
213
|
protected!
|
208
214
|
if network_ok
|
209
|
-
# Everything's up and running, we just don't know what
|
215
|
+
# Everything's up and running, we just don't know what
|
210
216
|
# our URL should be.
|
211
217
|
@url=Bandshell::ConfigStore.read_config('concerto_url')
|
212
218
|
erb :setup
|
213
219
|
else
|
214
220
|
# The network settings are not sane, we don't have an IP.
|
215
|
-
# Redirect the user to the network configuration page to
|
221
|
+
# Redirect the user to the network configuration page to
|
216
222
|
# take care of this.
|
217
223
|
redirect '/netconfig'
|
218
224
|
end
|
@@ -252,7 +258,7 @@ class ConcertoConfigServer < Sinatra::Base
|
|
252
258
|
# TODO: clean this up.
|
253
259
|
get '/authenticate.json' do
|
254
260
|
result = {:accepted => 0}
|
255
|
-
stat= Bandshell::HardwareApi.attempt_to_get_screen_data!
|
261
|
+
stat= Bandshell::HardwareApi.attempt_to_get_screen_data!
|
256
262
|
if stat == :stat_success
|
257
263
|
result[:accepted] = 1
|
258
264
|
result[:url] = Bandshell::HardwareApi.screen_url
|
@@ -287,11 +293,11 @@ class ConcertoConfigServer < Sinatra::Base
|
|
287
293
|
am = nil
|
288
294
|
end
|
289
295
|
|
290
|
-
# view will grab what it can from our existing
|
296
|
+
# view will grab what it can from our existing
|
291
297
|
# connection/addressing methods using value_from().
|
292
|
-
erb :netsettings, :locals => {
|
293
|
-
:connection_method => cm,
|
294
|
-
:addressing_method => am
|
298
|
+
erb :netsettings, :locals => {
|
299
|
+
:connection_method => cm,
|
300
|
+
:addressing_method => am
|
295
301
|
}
|
296
302
|
end
|
297
303
|
|
@@ -303,7 +309,7 @@ class ConcertoConfigServer < Sinatra::Base
|
|
303
309
|
|
304
310
|
# Extract arguments from a set of form data that are intended to go to a
|
305
311
|
# specific network configuration class. These fields have names of the form
|
306
|
-
# 'ClassName/field_name'; this function returns a hash in the form
|
312
|
+
# 'ClassName/field_name'; this function returns a hash in the form
|
307
313
|
# { 'field_name' => 'value } containing the configuration arguments.
|
308
314
|
def extract_class_args(params, target_class)
|
309
315
|
result = { }
|
@@ -318,7 +324,7 @@ class ConcertoConfigServer < Sinatra::Base
|
|
318
324
|
end
|
319
325
|
|
320
326
|
# Set the arguments on an instance of a given configuration class.
|
321
|
-
# This uses the safe_assign method that should be present in all
|
327
|
+
# This uses the safe_assign method that should be present in all
|
322
328
|
# configuration classes to determine which values are allowed to be passed
|
323
329
|
# via form fields (i.e. which ones are subject to validation)
|
324
330
|
def do_assign(params, instance)
|
@@ -338,14 +344,14 @@ class ConcertoConfigServer < Sinatra::Base
|
|
338
344
|
# First we find the connection-method and addressing-method classes.
|
339
345
|
cmclass = pick_class(params[:connection_type], CONNECTION_METHODS)
|
340
346
|
fail "Connection method not supported" if cmclass.nil?
|
341
|
-
|
347
|
+
|
342
348
|
amclass = pick_class(params[:addressing_type], ADDRESSING_METHODS)
|
343
349
|
fail "Addressing method not supported" if amclass.nil?
|
344
350
|
|
345
351
|
# ... and create some instances of them.
|
346
352
|
cm = cmclass.new
|
347
353
|
am = amclass.new
|
348
|
-
|
354
|
+
|
349
355
|
# Now given the names of the specific classes the user has chosen,
|
350
356
|
# extract the corresponding form fields.
|
351
357
|
cmargs = extract_class_args(params, cmclass.basename)
|
@@ -372,30 +378,47 @@ class ConcertoConfigServer < Sinatra::Base
|
|
372
378
|
redirect '/netconfig' # as a get request
|
373
379
|
end
|
374
380
|
|
375
|
-
get '/
|
381
|
+
get '/config_password' do
|
376
382
|
protected!
|
377
|
-
erb :
|
383
|
+
erb :config_password
|
378
384
|
end
|
379
385
|
|
380
|
-
post '/
|
386
|
+
post '/config_password' do
|
381
387
|
protected!
|
382
|
-
|
388
|
+
|
383
389
|
if params[:newpass] != params[:newpass_confirm]
|
384
|
-
#
|
385
|
-
redirect '/
|
390
|
+
#write flash notice
|
391
|
+
redirect '/config_password'
|
386
392
|
end
|
387
|
-
|
388
393
|
Bandshell::ConfigStore.write_config('password', params[:newpass])
|
389
394
|
redirect '/setup'
|
390
395
|
end
|
391
|
-
|
396
|
+
|
397
|
+
get '/system_password' do
|
398
|
+
protected!
|
399
|
+
if Bandshell::ConfigStore.config_exists?('system_passwords_changed')
|
400
|
+
redirect '/setup'
|
401
|
+
end
|
402
|
+
erb :system_password
|
403
|
+
end
|
404
|
+
|
405
|
+
post '/system_password' do
|
406
|
+
protected!
|
407
|
+
if params[:system_password] != params[:system_password_confirm]
|
408
|
+
#write flash notice
|
409
|
+
redirect '/system_password'
|
410
|
+
end
|
411
|
+
Bandshell::ConfigStore.write_config('system_password', params[:system_password])
|
412
|
+
redirect '/setup'
|
413
|
+
end
|
414
|
+
|
392
415
|
#Shows uptime,firmware version, and general system and process information
|
393
416
|
#Requires ffi, sys-uptime, and sys-proctable gems
|
394
417
|
get '/player_status' do
|
395
418
|
@proctable = ProcTable.ps
|
396
419
|
@on_off_rules = player_info.on_off_rules
|
397
420
|
erb :player_status
|
398
|
-
end
|
421
|
+
end
|
399
422
|
|
400
423
|
# Should be fetched at a regular interval by the background job
|
401
424
|
# to execute system maintenance functions such as updating configs
|
@@ -1,10 +1,4 @@
|
|
1
|
-
|
2
|
-
<ul class="nav nav-tabs">
|
3
|
-
<li><a href="/setup">Basic Setup</a></li>
|
4
|
-
<li><a href="/netconfig">Network Settings</a></li>
|
5
|
-
<li class="active"><a href="/password">Configuration Password</a></li>
|
6
|
-
</ul>
|
7
|
-
</div>
|
1
|
+
<%= erb(:navbar, :layout => false) %>
|
8
2
|
|
9
3
|
<div class="default-padding">
|
10
4
|
<form method="post">
|
@@ -20,4 +14,4 @@
|
|
20
14
|
<input type="submit" class="btn btn-primary" value="Change Password"></input>
|
21
15
|
</p>
|
22
16
|
</form>
|
23
|
-
</div>
|
17
|
+
</div>
|
@@ -9,9 +9,6 @@
|
|
9
9
|
<script src="javascripts/jquery-1.7.2.js"></script>
|
10
10
|
</head>
|
11
11
|
<body>
|
12
|
-
<%#= render :partial => "elements/topmenu_contents" %>
|
13
|
-
<%#= render :partial => "elements/render_flash" %>
|
14
|
-
|
15
12
|
<div id="main" class="container-fluid">
|
16
13
|
|
17
14
|
<section class="viewblock">
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<div class="clearfix">
|
2
|
+
<ul class="nav nav-tabs">
|
3
|
+
<li class=<%= "active" if active_page?("setup") %>>
|
4
|
+
<a href="/setup">Basic Setup</a>
|
5
|
+
</li>
|
6
|
+
|
7
|
+
<li class=<%= "active" if active_page?("netconfig") %>>
|
8
|
+
<a href="/netconfig">Network Settings</a>
|
9
|
+
</li>
|
10
|
+
|
11
|
+
<li class=<%= "active" if active_page?("config_password") %>>
|
12
|
+
<a href="/config_password">Configuration Password</a>
|
13
|
+
</li>
|
14
|
+
<% unless Bandshell::ConfigStore.config_exists?('system_passwords_changed') %>
|
15
|
+
<li class=<%= "active" if active_page?("system_password") %>>
|
16
|
+
<a href="/system_password">System Passwords</a>
|
17
|
+
</li>
|
18
|
+
<% end %>
|
19
|
+
</ul>
|
20
|
+
</div>
|
@@ -1,19 +1,13 @@
|
|
1
1
|
<script src="/javascripts/network.js"></script>
|
2
2
|
|
3
|
-
|
4
|
-
<ul class="nav nav-tabs">
|
5
|
-
<li><a href="/setup">Basic Setup</a></li>
|
6
|
-
<li class="active"><a href="/netconfig">Network Settings</a></li>
|
7
|
-
<li><a href="/password">Configuration Password</a></li>
|
8
|
-
</ul>
|
9
|
-
</div>
|
3
|
+
<%= erb(:navbar, :layout => false) %>
|
10
4
|
|
11
5
|
<div>
|
12
6
|
|
13
7
|
<form method="post">
|
14
8
|
<fieldset>
|
15
9
|
<legend><span>Connection Type</span></legend>
|
16
|
-
|
10
|
+
|
17
11
|
<div class="clearfix">
|
18
12
|
<select id="connection_type" name="connection_type">
|
19
13
|
<!-- list out our available connection methods as options set the html selected flag on the one that is currently selected in the config -->
|
@@ -21,13 +15,13 @@
|
|
21
15
|
<option <%= cm==connection_method.class ? 'selected' : '' %> value="<%= cm.basename %>">
|
22
16
|
<%= cm.description %>
|
23
17
|
</option>
|
24
|
-
<% end %>
|
18
|
+
<% end %>
|
25
19
|
</select>
|
26
20
|
</div>
|
27
21
|
|
28
22
|
<div id="connection">
|
29
23
|
<div id="WiredConnection" class="clearfix">
|
30
|
-
|
24
|
+
|
31
25
|
<div class="clearfix">
|
32
26
|
<label for="WiredConnection_interface_name">Interface Name</label>
|
33
27
|
<div class="input">
|
@@ -66,7 +60,7 @@
|
|
66
60
|
|
67
61
|
</div>
|
68
62
|
<div class="span6">
|
69
|
-
|
63
|
+
|
70
64
|
<div class="clearfix">
|
71
65
|
<label for="WirelessConnection_ssid">SSID</label>
|
72
66
|
<div class="input">
|
@@ -99,7 +93,7 @@
|
|
99
93
|
<div id="StaticAddressing" class="clearfix">
|
100
94
|
<div class="row-fluid">
|
101
95
|
<div class="span6">
|
102
|
-
|
96
|
+
|
103
97
|
<div class="clearfix">
|
104
98
|
<label for="StaticAddressing_address">Address</label>
|
105
99
|
<div class="input">
|
@@ -116,7 +110,7 @@
|
|
116
110
|
|
117
111
|
</div><!-- end .span6 -->
|
118
112
|
<div class="span6">
|
119
|
-
|
113
|
+
|
120
114
|
<div class="clearfix">
|
121
115
|
<label for="StaticAddressing_gateway">Gateway</label>
|
122
116
|
<div class="input">
|
@@ -144,4 +138,4 @@
|
|
144
138
|
</div>
|
145
139
|
|
146
140
|
</form>
|
147
|
-
</div>
|
141
|
+
</div>
|
@@ -6,13 +6,7 @@
|
|
6
6
|
<% end %>
|
7
7
|
<% end %>
|
8
8
|
|
9
|
-
|
10
|
-
<ul class="nav nav-tabs">
|
11
|
-
<li class="active"><a href="/setup">Basic Setup</a></li>
|
12
|
-
<li><a href="/netconfig">Network Settings</a></li>
|
13
|
-
<li><a href="/password">Configuration Password</a></li>
|
14
|
-
</ul>
|
15
|
-
</div>
|
9
|
+
<%= erb(:navbar, :layout => false) %>
|
16
10
|
|
17
11
|
<div class="default-padding">
|
18
12
|
<% if @url.empty? %>
|
@@ -61,4 +55,4 @@
|
|
61
55
|
</tbody>
|
62
56
|
</table>
|
63
57
|
</div>
|
64
|
-
</div>
|
58
|
+
</div>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<%= erb(:navbar, :layout => false) %>
|
2
|
+
|
3
|
+
<h3>Please change the SSH password for this player here. Once the password is set, further changes can be made via the command line.</h3>
|
4
|
+
|
5
|
+
<div class="default-padding">
|
6
|
+
<form method="post">
|
7
|
+
<p>
|
8
|
+
<label for="system_password">System SSH Password</label>
|
9
|
+
<input class="input-large" name="system_password" type="password"></input>
|
10
|
+
</p>
|
11
|
+
<p>
|
12
|
+
<label for="system_password_confirm">Confirm Password</label>
|
13
|
+
<input class="input-large" name="system_password_confirm" type="password"></input>
|
14
|
+
</p>
|
15
|
+
<p>
|
16
|
+
<input type="submit" class="btn btn-primary" value="Change Passwords"></input>
|
17
|
+
</p>
|
18
|
+
</form>
|
19
|
+
</div>
|
@@ -8,7 +8,7 @@ module Bandshell
|
|
8
8
|
@@path = nil
|
9
9
|
|
10
10
|
def self.read_config(name, default='')
|
11
|
-
initialize_path if not @@path
|
11
|
+
initialize_path if not @@path
|
12
12
|
file = File.join(@@path, name)
|
13
13
|
rofile = File.join(@@ropath, name)
|
14
14
|
|
@@ -24,14 +24,14 @@ module Bandshell
|
|
24
24
|
default
|
25
25
|
end
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
#check if a config exists
|
29
29
|
def self.config_exists?(name)
|
30
30
|
initialize_path if not @@path
|
31
31
|
file = File.join(@@path, name)
|
32
32
|
rofile = File.join(@@ropath, name)
|
33
33
|
File.exist?(file) || File.exist?(rofile)
|
34
|
-
end
|
34
|
+
end
|
35
35
|
|
36
36
|
# Write a config to the read/write configuration location.
|
37
37
|
def self.write_config(name, value)
|
@@ -43,6 +43,13 @@ module Bandshell
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
+
# Delete a config from the filesystem
|
47
|
+
def self.delete_config(name)
|
48
|
+
initialize_path if not @@path
|
49
|
+
file = File.join(@@path, name)
|
50
|
+
FileUtils.rm(file)
|
51
|
+
end
|
52
|
+
|
46
53
|
def self.initialize_path
|
47
54
|
@@ropath = File.join(LiveImage.mountpoint, 'concerto', 'config')
|
48
55
|
if LiveImage.readonly?
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bandshell
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Concerto Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -138,12 +138,14 @@ files:
|
|
138
138
|
- lib/bandshell/application/public/stylesheets/sass/views/users.scss
|
139
139
|
- lib/bandshell/application/public/trollface.png
|
140
140
|
- lib/bandshell/application/views/authenticate.erb
|
141
|
+
- lib/bandshell/application/views/config_password.erb
|
141
142
|
- lib/bandshell/application/views/main.erb
|
143
|
+
- lib/bandshell/application/views/navbar.erb
|
142
144
|
- lib/bandshell/application/views/netsettings.erb
|
143
|
-
- lib/bandshell/application/views/password.erb
|
144
145
|
- lib/bandshell/application/views/player_status.erb
|
145
146
|
- lib/bandshell/application/views/problem.erb
|
146
147
|
- lib/bandshell/application/views/setup.erb
|
148
|
+
- lib/bandshell/application/views/system_password.erb
|
147
149
|
- lib/bandshell/config_store.rb
|
148
150
|
- lib/bandshell/hardware_api.rb
|
149
151
|
- lib/bandshell/live_image.rb
|