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" smtp_server "" pkgdev 0 notoolbar 0 nomobile 0 nohelplinks 0 nounwatchedcount 0 xepghours 4 genrededup 0 autolog 0 changechangenc 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}} { global settingsdb if {$val == -1} { # Get set res [$settingsdb query " select tval from settings where name = '$name' "] if {$res ne ""} { return [lindex [lindex $res end] end] } return 0 } 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 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 pkgdev {{val -1}} { return [$self _nval_setting pkgdev $val] } settings method notoolbar {{val -1}} { return [$self _nval_setting notoolbar $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 nounwatchedcount {{val -1}} { return [$self _nval_setting nounwatchedcount $val] } settings method chanchangenc {{val -1}} { return [$self _nval_setting chanchangenc $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 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 } settings method mongooseauth {{mode 1}} { 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 addacluser {user pass} { set msg "" if {![llength [$self aclusers]]} { $self mongooseauth 1 append msg "Enabled web server authentication
" } set cmd "/mod/sbin/mongoose -A /mod/etc/htpasswd webif $user $pass" exec {*}$cmd append msg "Successfully updated user $user" return $msg } settings method delacluser {user} { if {![file exists "/mod/etc/htpasswd"]} { return } set fd [open "/mod/etc/htpasswd" r] set fdnew [open "/mod/etc/htpasswd.new" w] 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 $fdnew close file delete "/mod/etc/htpasswd" file rename "/mod/etc/htpasswd.new" "/mod/etc/htpasswd" set msg "Successfully removed user $user" if {$num == 0} { $self mongooseauth 0 append msg "
Disabled web server authentication
" } return $msg } settings method smartdata {} { global settingsdb set res [$settingsdb query " select name, nval, tval from settings where name like 'SMART_%%' "] return $res }