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 }