bandshell 1.3 → 1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/bandshell-timer.rb +2 -1
- data/bin/bandshell-timer.rb.output +24 -0
- data/bin/bandshelld +0 -12
- data/bin/bandshelld.output +4785 -0
- data/bin/{concerto_netsetup → bandshelld_boot} +2 -0
- data/lib/bandshell/application/app.rb +20 -9
- data/lib/bandshell/application/log/development.log +0 -0
- data/lib/bandshell/application/views/navbar.erb +11 -0
- data/lib/bandshell/application/views/player_status.erb +35 -2
- data/lib/bandshell/application/views/setup.erb +0 -8
- data/lib/bandshell/passwords.rb +47 -0
- data/lib/bandshell/player_info.rb +24 -3
- metadata +23 -5
@@ -27,6 +27,7 @@ class ConcertoConfigServer < Sinatra::Base
|
|
27
27
|
configure :development do
|
28
28
|
puts 'Bandshell Config Server starting in development mode, port '+
|
29
29
|
settings.port.to_s
|
30
|
+
enable :logging, :dump_errors, :raise_errors
|
30
31
|
begin
|
31
32
|
require "sinatra/reloader"
|
32
33
|
register Sinatra::Reloader
|
@@ -36,6 +37,7 @@ class ConcertoConfigServer < Sinatra::Base
|
|
36
37
|
puts ' installing the sinatra-contrib gem on your system.'
|
37
38
|
end
|
38
39
|
set :no_netconfig, true
|
40
|
+
set :show_exceptions, true
|
39
41
|
end
|
40
42
|
|
41
43
|
def active_page?(path='')
|
@@ -386,9 +388,10 @@ class ConcertoConfigServer < Sinatra::Base
|
|
386
388
|
post '/config_password' do
|
387
389
|
protected!
|
388
390
|
|
391
|
+
@errors = []
|
389
392
|
if params[:newpass] != params[:newpass_confirm]
|
390
|
-
|
391
|
-
|
393
|
+
@errors << 'Please make sure the passwords entered are the same.'
|
394
|
+
erb :config_password
|
392
395
|
end
|
393
396
|
Bandshell::ConfigStore.write_config('password', params[:newpass])
|
394
397
|
redirect '/setup'
|
@@ -397,19 +400,27 @@ class ConcertoConfigServer < Sinatra::Base
|
|
397
400
|
get '/system_password' do
|
398
401
|
protected!
|
399
402
|
if Bandshell::ConfigStore.config_exists?('system_passwords_changed')
|
400
|
-
|
403
|
+
@errors = []
|
404
|
+
@errors << 'The system password has already been set. Please log in via SSH and use the passwd command to change it again.'
|
405
|
+
#redirect '/setup' TODO: something better.
|
406
|
+
else
|
407
|
+
erb :system_password
|
401
408
|
end
|
402
|
-
erb :system_password
|
403
409
|
end
|
404
410
|
|
405
411
|
post '/system_password' do
|
406
412
|
protected!
|
407
|
-
|
408
|
-
|
409
|
-
|
413
|
+
@errors = []
|
414
|
+
if Bandshell::ConfigStore.config_exists?('system_passwords_changed')
|
415
|
+
@errors << 'The system password has already been set. Please log in via SSH and use the passwd command to change it again.'
|
416
|
+
erb :system_password
|
417
|
+
elsif params[:system_password] != params[:system_password_confirm]
|
418
|
+
@errors << 'Please make sure the passwords entered are the same.'
|
419
|
+
erb :system_password
|
420
|
+
else
|
421
|
+
Bandshell::ConfigStore.write_config('system_password', params[:system_password])
|
422
|
+
redirect '/setup'
|
410
423
|
end
|
411
|
-
Bandshell::ConfigStore.write_config('system_password', params[:system_password])
|
412
|
-
redirect '/setup'
|
413
424
|
end
|
414
425
|
|
415
426
|
#Shows uptime,firmware version, and general system and process information
|
File without changes
|
@@ -1,3 +1,11 @@
|
|
1
|
+
<% unless @errors.nil? %>
|
2
|
+
<% @errors.each do |error| %>
|
3
|
+
<p style="color:red">
|
4
|
+
<%= error %>
|
5
|
+
</p>
|
6
|
+
<% end %>
|
7
|
+
<% end %>
|
8
|
+
|
1
9
|
<div class="clearfix">
|
2
10
|
<ul class="nav nav-tabs">
|
3
11
|
<li class=<%= "active" if active_page?("setup") %>>
|
@@ -16,5 +24,8 @@
|
|
16
24
|
<a href="/system_password">System Passwords</a>
|
17
25
|
</li>
|
18
26
|
<% end %>
|
27
|
+
<li class=<%= "active" if active_page?("player_status") %>>
|
28
|
+
<a href="/player_status">Player Status</a>
|
29
|
+
</li>
|
19
30
|
</ul>
|
20
31
|
</div>
|
@@ -1,6 +1,27 @@
|
|
1
|
+
<%= erb(:navbar, :layout => false) %>
|
2
|
+
|
3
|
+
<script type="text/javascript">
|
4
|
+
togglespeed=0;
|
5
|
+
function toggleProcs() {
|
6
|
+
if ($("#proclist").is(":visible")) {
|
7
|
+
$("#proclist").hide(togglespeed);
|
8
|
+
$("#procexpand").text("expand");
|
9
|
+
} else {
|
10
|
+
$("#proclist").show(togglespeed);
|
11
|
+
$("#procexpand").text("hide");
|
12
|
+
}
|
13
|
+
togglespeed=700; //after the first time
|
14
|
+
}
|
15
|
+
$().ready(toggleProcs); //start hidden
|
16
|
+
</script>
|
17
|
+
|
18
|
+
<h1>System Information</h1>
|
1
19
|
<p>System Uptime: <%= Uptime.uptime %></p>
|
2
|
-
<p>
|
3
|
-
|
20
|
+
<p>
|
21
|
+
System Processes: <%= @proctable.count %>
|
22
|
+
(<a id="procexpand" href="#" onclick="toggleProcs(700)">expand</a>)
|
23
|
+
</p>
|
24
|
+
<ul id="proclist">
|
4
25
|
<% for p in @proctable %>
|
5
26
|
<li>
|
6
27
|
<b>
|
@@ -10,10 +31,22 @@
|
|
10
31
|
</li>
|
11
32
|
<% end %>
|
12
33
|
</ul>
|
34
|
+
|
35
|
+
<h1>Player Configuration</h1>
|
36
|
+
<p>
|
37
|
+
Screen Name:
|
38
|
+
<%= player_info.screen_name %>
|
39
|
+
</p>
|
40
|
+
|
41
|
+
<h1>Display Status</h1>
|
13
42
|
<p>Screen on/off rules:</p>
|
14
43
|
<pre>
|
15
44
|
<%= JSON.pretty_generate(@on_off_rules) %>
|
16
45
|
</pre>
|
46
|
+
<p>
|
47
|
+
Time Zone:
|
48
|
+
<%= player_info.timezone.nil? ? "Not set" : player_info.timezone %>
|
49
|
+
</p>
|
17
50
|
<p>
|
18
51
|
Screen scheduled state:
|
19
52
|
<%= player_info.screen_scheduled_on? ? "On" : "Off" %>
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bandshell/config_store'
|
4
|
+
|
5
|
+
module Bandshell
|
6
|
+
module Passwords
|
7
|
+
def self.set_local_passwords
|
8
|
+
if Bandshell::ConfigStore.config_exists?('system_passwords_changed')
|
9
|
+
# if we have changed the passwords, try to restore the shadow file
|
10
|
+
# from the configuration store
|
11
|
+
restore_shadow
|
12
|
+
else
|
13
|
+
#if the password has not been changed before during initial setup,
|
14
|
+
#read a new one and change passwords accordingly
|
15
|
+
system_password = Bandshell::ConfigStore.read_config('system_password', '')
|
16
|
+
unless system_password.empty?
|
17
|
+
IO.popen("chpasswd", mode='r+') do |io|
|
18
|
+
io.puts "root:#{system_password}"
|
19
|
+
io.puts "concerto:#{system_password}"
|
20
|
+
end
|
21
|
+
|
22
|
+
if $? == 0
|
23
|
+
# remove plain text passwords from config and set flag
|
24
|
+
Bandshell::ConfigStore.delete_config('system_password')
|
25
|
+
Bandshell::ConfigStore.write_config('system_passwords_changed', 'true')
|
26
|
+
|
27
|
+
# save shadow file (with password hashes) into config
|
28
|
+
save_shadow
|
29
|
+
else
|
30
|
+
# chpasswd returned nonzero status... do something to indicate error
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.save_shadow
|
37
|
+
shadow_content = IO.read("/etc/shadow")
|
38
|
+
Bandshell::ConfigStore.write_config('shadow_file', shadow_content)
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.restore_shadow
|
42
|
+
oldshadow = IO.read("/etc/shadow")
|
43
|
+
shadow_content = Bandshell::ConfigStore.read_config('shadow_file', oldshadow)
|
44
|
+
IO.write("/etc/shadow", shadow_content)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'bandshell/config_store'
|
2
2
|
require 'net/http'
|
3
3
|
require 'json'
|
4
|
+
require 'tzinfo'
|
4
5
|
|
5
6
|
# This class can be thought of as a singleton model which retrieves,
|
6
7
|
# manipulates, and stores information about the Player received from
|
@@ -11,6 +12,8 @@ module Bandshell
|
|
11
12
|
attr_accessor :last_update
|
12
13
|
attr_accessor :on_off_rules
|
13
14
|
attr_accessor :shelf_life
|
15
|
+
attr_accessor :screen_name
|
16
|
+
attr_accessor :timezone # String representation of TZ Location
|
14
17
|
|
15
18
|
def initialize
|
16
19
|
@last_update = Time.new(0)
|
@@ -40,6 +43,18 @@ module Bandshell
|
|
40
43
|
elsif data == :stat_badauth
|
41
44
|
puts "update_player_info: Auth error while retrieving player info."
|
42
45
|
else
|
46
|
+
unless data['screen'].nil? or data['screen']['name'].nil?
|
47
|
+
@screen_name = data['screen']['name']
|
48
|
+
end
|
49
|
+
tz_string = data['time_zone']
|
50
|
+
unless tz_string.nil? or tz_string.empty?
|
51
|
+
begin
|
52
|
+
new_tz = TZInfo::Timezone.get(tz_string)
|
53
|
+
@timezone = tz_string
|
54
|
+
rescue TZInfo::InvalidTimezoneIdentifier => e
|
55
|
+
puts "update_player_info: Invalid timezone received."
|
56
|
+
end
|
57
|
+
end # TZ identifier present
|
43
58
|
new_rules = data['screen_on_off']
|
44
59
|
if new_rules.nil? or !new_rules.is_a? Array
|
45
60
|
puts "update_player_info: Invalid screen on/off rules received."
|
@@ -55,12 +70,18 @@ module Bandshell
|
|
55
70
|
# Returns true if the screen should be turned on right now,
|
56
71
|
# according to the latest data recieved from concerto-hardware.
|
57
72
|
# Assumes on_off_rules is either nil or a valid ruleset.
|
58
|
-
# TODO: Evaluate effects of timezones
|
59
73
|
def screen_scheduled_on?
|
60
74
|
return true if on_off_rules.nil?
|
61
|
-
|
62
75
|
results = []
|
63
|
-
|
76
|
+
|
77
|
+
begin
|
78
|
+
tz = TZInfo::Timezone.get(timezone) unless timezone.nil?
|
79
|
+
rescue TZInfo::InvalidTimezoneIdentifier => e
|
80
|
+
puts('screen_scheduled_on?: Invalid Time Zone. Defaulting to NY.')
|
81
|
+
end
|
82
|
+
tz = TZInfo::Timezone.get('America/New_York') if tz.nil?
|
83
|
+
|
84
|
+
t = tz.now
|
64
85
|
on_off_rules.each do |rule|
|
65
86
|
rule_active = true
|
66
87
|
rule.each do |key, value|
|
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.6'
|
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-06
|
11
|
+
date: 2015-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -80,19 +80,36 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: tzinfo
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description: Client-side tools for Concerto digital signage
|
84
98
|
email: team@concerto-signage.org
|
85
99
|
executables:
|
86
|
-
-
|
100
|
+
- bandshelld_boot
|
87
101
|
- bandshelld
|
88
102
|
extensions: []
|
89
103
|
extra_rdoc_files: []
|
90
104
|
files:
|
91
105
|
- bin/bandshell-timer.rb
|
106
|
+
- bin/bandshell-timer.rb.output
|
92
107
|
- bin/bandshelld
|
93
|
-
- bin/
|
108
|
+
- bin/bandshelld.output
|
109
|
+
- bin/bandshelld_boot
|
94
110
|
- lib/bandshell/application/app.rb
|
95
111
|
- lib/bandshell/application/config.ru
|
112
|
+
- lib/bandshell/application/log/development.log
|
96
113
|
- lib/bandshell/application/public/favicon.ico
|
97
114
|
- lib/bandshell/application/public/images/elements/logomark.png
|
98
115
|
- lib/bandshell/application/public/images/layout/pagebg.gif
|
@@ -150,6 +167,7 @@ files:
|
|
150
167
|
- lib/bandshell/hardware_api.rb
|
151
168
|
- lib/bandshell/live_image.rb
|
152
169
|
- lib/bandshell/netconfig.rb
|
170
|
+
- lib/bandshell/passwords.rb
|
153
171
|
- lib/bandshell/player_info.rb
|
154
172
|
- lib/bandshell/screen_control.rb
|
155
173
|
homepage:
|
@@ -172,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
172
190
|
version: '0'
|
173
191
|
requirements: []
|
174
192
|
rubyforge_project:
|
175
|
-
rubygems_version: 2.
|
193
|
+
rubygems_version: 2.2.2
|
176
194
|
signing_key:
|
177
195
|
specification_version: 4
|
178
196
|
summary: Concerto Client Tools
|