webif/webif/lib/settings.class

421 lines
8.7 KiB
Plaintext

if {![exists -proc class]} { package require oo }
if {![exists -proc sqlite3.open]} { package require sqlite3 }
if {![file exists /mod/etc/webif.db]} {
set ::settingsdb [sqlite3.open /mod/etc/webif.db]
catch {
$::settingsdb query {
CREATE TABLE settings(name text, nval int, tval text);
}
$::settingsdb query {
CREATE UNIQUE INDEX key on settings(name);
}
}
} else {
set ::settingsdb [sqlite3.open /mod/etc/webif.db]
}
class settings {
hostname ""
channel_group 0
epg_style "standard"
service_style "grid"
smtp_server ""
pkgdev 0
notoolbar 0
noautorec 0
tvdb 0
tvdb_debug 0
nomobile 0
nohelplinks 0
notwitfeed 0
nounwatchedcount 0
hidevisualota 0
xepghours 4
epgscroll 0
genrededup 0
autolog 0
noautorec 0
noautorecimm 0
autorecperiod 10
autokeep 7
noautohours ""
autofreq 20
autolast 0
toolbarqueue 0
changechangenc 0
audiomp3 0
logsize 1048576
logkeep 2
rtschedule 0
}
settings method hostname {{name ""}} {
if {$name == ""} {
# Get
if {[catch {set fd [open "/var/lib/humaxtv/mod/hostname" r]}]} {
set name "humax"
} else {
set name [string trim [read $fd]]
close $fd
}
return $name
} else {
# Set
if [string is alnum -strict $name] {
set fd [open "/var/lib/humaxtv/mod/hostname" w]
puts $fd $name
close $fd
exec hostname -F /var/lib/humaxtv/mod/hostname
}
}
}
settings method smtp_server {{server ""}} {
if {$server == ""} {
# Get
if {[catch {set fd [open "/mod/etc/ssmtp/ssmtp.conf" r]}]} {
set server "mail"
} else {
foreach line [split [read $fd] "\n"] {
set a [string first "mailhub=" $line]
if {$a == 0} {
set server [string range $line 8 end]
set server [string trim $server]
}
}
close $fd
}
return $server
} else {
# Set
if {[string is ascii -strict $server]} {
set fd [open "/mod/etc/ssmtp/ssmtp.conf" w]
puts $fd "mailhub=$server"
puts $fd "rewriteDomain=hummypkg.org.uk"
puts $fd "hostname=[$self hostname].hummypkg.org.uk"
close $fd
}
}
}
settings method _nval_setting {name {val -1}} {
global settingsdb
if {$val == -1} {
# Get
set res [$settingsdb query "
select nval from settings
where name = '$name'
"]
if {$res ne ""} {
return [lindex [lindex $res end] end]
}
return 0
} else {
# Set
$settingsdb query "
replace into settings(name,nval)
values('$name', $val)
"
return 0
}
}
settings method _tval_setting {name {val -1} {def 0}} {
global settingsdb
if {$val eq "-1"} {
# Get
set res [$settingsdb query "
select tval from settings
where name = '$name'
"]
if {$res ne ""} {
return [lindex [lindex $res end] end]
}
return $def
} else {
# Set
$settingsdb query "
replace into settings(name,tval)
values('$name', '%s')
" $val
return 0
}
}
settings method channel_group {{group -1}} {
return [$self _nval_setting channel_group $group]
}
settings method xepghours {{hours -1}} {
return [$self _nval_setting xepghours $hours]
}
settings method epgscroll {{val -1}} {
return [$self _nval_setting epgscroll $val]
}
settings method epg_style {{style -1}} {
if {$style != -1} {
if {$style eq "grid"} { set style 1 } else { set style 0 }
return [$self _nval_setting epg_style $style]
}
set val [$self _nval_setting epg_style]
if {$val == 1} { return "grid" }
return "standard"
}
settings method service_style {{style -1}} {
if {$style != -1} {
if {$style eq "grid"} { set style 0 } else { set style 1 }
return [$self _nval_setting service_style $style]
}
set val [$self _nval_setting service_style]
if {$val == 1} { return "standard" }
return "grid"
}
settings method pkgdev {{val -1}} {
return [$self _nval_setting pkgdev $val]
}
settings method notoolbar {{val -1}} {
return [$self _nval_setting notoolbar $val]
}
settings method toolbarqueue {{val -1}} {
return [$self _nval_setting toolbarqueue $val]
}
settings method tvdb {{val -1}} {
return [$self _nval_setting tvdb $val]
}
settings method tvdb_debug {{val -1}} {
return [$self _nval_setting tvdb_debug $val]
}
settings method genrededup {{val -1}} {
return [$self _nval_setting genrededup $val]
}
settings method nomobile {{val -1}} {
return [$self _nval_setting nomobile $val]
}
settings method nohelplinks {{val -1}} {
return [$self _nval_setting nohelplinks $val]
}
settings method notwitfeed {{val -1}} {
return [$self _nval_setting notwitfeed $val]
}
settings method nounwatchedcount {{val -1}} {
return [$self _nval_setting nounwatchedcount $val]
}
settings method hidevisualota {{val -1}} {
return [$self _nval_setting hidevisualota $val]
}
settings method chanchangenc {{val -1}} {
return [$self _nval_setting chanchangenc $val]
}
settings method rtschedule {{val -1}} {
return [$self _nval_setting rtschedule $val]
}
settings method sortorder {{val -1}} {
return [$self _nval_setting sortorder $val]
}
settings method autolog {{level -1}} {
return [$self _nval_setting autolog $level]
}
settings method noautorec {{val -1}} {
return [$self _nval_setting noautorec $val]
}
settings method noautorecimm {{val -1}} {
return [$self _nval_setting noautorecimm $val]
}
settings method autorecperiod {{val -1}} {
return [$self _nval_setting autorecperiod $val]
}
settings method autokeep {{val -1}} {
return [$self _nval_setting autokeep $val]
}
settings method autofreq {{val -1}} {
return [$self _nval_setting autofreq $val]
}
settings method autolast {{val -1}} {
return [$self _nval_setting autolast $val]
}
settings method noautohours {{val -1}} {
set val [$self _tval_setting noautohours $val ""]
return $val
}
settings method audiomp3 {{val -1}} {
return [$self _nval_setting audiomp3 $val]
}
settings method audiomp3descr {val} {
switch $val {
1 { return "MPEG-1 Audio Layer III (MP3)" }
default { return "MPEG-1 Audio Layer II (MP2)" }
}
}
settings method channel_groups {} {
set ret ""
set db [sqlite3.open /var/lib/humaxtv/setup.db]
set res [$db query {
select itemText from TBL_MENUCONFIG
where itemName like 'FAV\_CUSTOM\_STR%%' ESCAPE '\'
}]
$db close
foreach g $res {
set g $g(itemText)
if {[string index $g 0] == "\025"} {
lappend ret [string range $g 1 end]
} else {
lappend ret $g
}
}
return $ret
}
settings method aclusers {} {
if {![file exists "/mod/etc/htpasswd"]} { return {} }
set fd [open "/mod/etc/htpasswd" r]
set users {}
foreach line [string trim [split [read $fd] "\n"]] {
set info [split $line ":"]
if {[llength $info] != 3} { continue }
lappend users $info
}
$fd close
return $users
}
# Legacy function for Mongoose.
settings method mongooseauth {{mode 1}} {
if {![file exists /mod/etc/mongoose.conf]} return
set fd [open "/mod/etc/mongoose.conf" r]
set fdnew [open "/mod/etc/mongoose.conf.new" w]
foreach line [string trim [split [read $fd] "\n"]] {
if {[string match -nocase {authentication_domain*} $line]} {
continue
}
if {[string match -nocase {global_passwords_file*} $line]} {
continue
}
if {$line ne ""} { puts $fdnew $line }
}
$fd close
if {$mode} {
puts $fdnew "authentication_domain webif"
puts $fdnew "global_passwords_file /mod/etc/htpasswd"
}
$fdnew close
file delete "/mod/etc/mongoose.conf"
file rename "/mod/etc/mongoose.conf.new" "/mod/etc/mongoose.conf"
}
settings method htdigest {user pass} {
set str "$user:webif:$pass"
set hash [string range [exec echo -n $str | md5sum] 0 32]
return "$user:webif:$hash"
}
settings method modacluser {user {pass 0}} {
set fdnew [open "/mod/etc/htpasswd.new" w]
# Remove existing user, if present.
if {[file exists "/mod/etc/htpasswd"]} {
set fd [open "/mod/etc/htpasswd" r]
set num 0
foreach line [string trim [split [read $fd] "\n"]] {
lassign [split $line ":"] xuser
if {$xuser eq $user} { continue }
if {$line ne ""} {
puts $fdnew $line
incr num
}
}
$fd close
}
# Add user, if required.
if {$pass ne "0"} {
puts $fdnew [$self htdigest $user $pass]
incr num
set msg "Added/updated user $user"
} else {
set msg "Removed user $user"
}
$fdnew close
file delete "/mod/etc/htpasswd"
file rename "/mod/etc/htpasswd.new" "/mod/etc/htpasswd"
$self mongooseauth $num
return $msg
}
settings method addacluser {user pass} {
return [$self modacluser $user $pass]
}
settings method delacluser {user} {
return [$self modacluser $user]
}
settings method smartdata {} {
global settingsdb
set res [$settingsdb query "
select name, nval, tval from settings
where name like 'SMART_%%'
"]
return $res
}
settings method logsize {{size -1}} {
set val [$self _nval_setting logsize $size]
if {$val == 0} {
return 1048576
}
return $val
}
settings method logkeep {{num -1}} {
set val [$self _nval_setting logkeep $num]
if {$val == 0} {
return 2
}
return $val
}
settings method dedup_template {{pattern -1}} {
set val [$self _tval_setting dedup_template $pattern]
if {$val eq "0"} { set val "s%se%E - " }
return $val
}