source: branches/whiterussian/openwrt/package/webif/files/usr/lib/webif/webif.sh @ 2062

Last change on this file since 2062 was 2062, checked in by nbd, 11 years ago

open first page when you click on a category

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.6 KB
Line 
1libdir=/usr/lib/webif
2wwwdir=/www
3cgidir=/www/cgi-bin/webif
4rootdir=/cgi-bin/webif
5indexpage=index.sh
6
7categories() {
8        grep '##WEBIF:' $cgidir/.categories $cgidir/*.sh 2>/dev/null | awk -F: '
9        BEGIN {
10                n = 0
11                sel = 0
12        }
13        ($3 == "category") && (categories !~ /:$4:/) {
14                categories = categories ":" $4 ":";
15                n++
16                if ($4 ~ /^'"$1"'$/) sel = n
17                c[n] = $4
18                if (f[$4] == "") f[$4] = "'"$rootdir/$indexpage"'?cat=" $4
19        }
20        ($3 == "name") && ((n[$4] == 0) || (n[$4] > int($5))) {
21                gsub(/^.*\//, "", $1);
22                n[$4] = int($5)
23                f[$4] = "'"$rootdir"'/" $1
24        }
25        END {
26                print "<div id=\"mainmenu\"><h3><strong>Categories:</strong></h3><ul>"
27               
28                for (i = 1; i <= n; i++) {
29                        if (sel == i) print "<li class=\"selected-maincat\"><a href=\"" f[c[i]] "\">&raquo;" c[i] "&laquo;</a></li>"
30                        else print "<li><a href=\"" f[c[i]] "\">&nbsp;" c[i] "&nbsp;</a></li>";
31                }
32         
33                print "</ul></div>"
34        }' -
35}
36
37subcategories() {
38        grep -H "##WEBIF:name:$1:" $cgidir/*.sh 2>/dev/null | sed -e 's,^.*/\([a-zA-Z\.\-]*\):\(.*\)$,\2:\1,' | sort -n | awk -F: '
39        BEGIN {
40      print "<div id=\"submenu\"><h3><strong>Sub-Categories:</strong></h3><ul>"
41        }
42        {
43          if ($5 ~ /^'"$2"'$/) print "<li class=\"selected-maincat\"><a href=\"'"$rootdir/"'" $6 "\">&raquo;" $5 "&laquo;</a></li>"
44          else print "<li><a href=\"'"$rootdir/"'" $6 "\">&nbsp;" $5 "&nbsp;</a></li>"
45        }
46        END {
47      print "</ul></div>"
48        }
49  ' -
50}
51
52update_changes() {
53        CHANGES=$(($( (cat /tmp/.webif/config-* ; ls /tmp/.webif/file-*) 2>&- | wc -l)))
54}
55
56header() {
57        ERROR=${ERROR:+<h3>$ERROR</h3><br /><br />}
58        SAVED=${SAVED:+: Settings saved}
59        _category="$1"
60        _uptime="$(uptime)"
61        _loadavg="${_uptime#*load average: }"
62        _uptime="${_uptime#*up }"
63        _uptime="${_uptime%%,*}"
64        _hostname=$(cat /proc/sys/kernel/hostname)
65        _version=$(cat /etc/banner | grep "(")
66        _version="${_version%% ---*}"
67        _saved_title=${ERROR:+: Settings not saved}
68        _saved_title=${_saved_title:-$SAVED}
69        _head="${3:+<div class=\"settings-block-title\"><h2>$3$_saved_title</h2></div>}"
70        _form="${5:+<form enctype=\"multipart/form-data\" action=\"$5\" method=\"post\">}"
71        _savebutton="${5:+<p><input type=\"submit\" name=\"action\" value=\"Save changes\" /></p>}"
72        _categories=$(categories $1)
73        _subcategories=${2:+$(subcategories $1 $2)}
74
75        update_changes
76        cat <<EOF
77Content-Type: text/html
78Pragma: no-cache
79
80<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
81<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
82        <head>
83        <title>OpenWrt Administrative Console</title>
84                <link rel="stylesheet" type="text/css" href="/webif.css" />
85        </head>
86        <body $4><div id="container">
87            <div id="header">
88                <div id="header-title">
89                                <div id="openwrt-title"><h1>OpenWrt Admin Console</h1></div>
90                                <div id="short-status">
91                                        <h3><strong>Status:</strong></h3>
92                                        <ul>
93                                                <li><strong>Hostname:</strong> $_hostname</li>
94                                                <li><strong>Uptime:</strong> $_uptime</li>
95                                                <li><strong>Load:</strong> $_loadavg</li>
96                                                <li><strong>Version:</strong> $_version</li>
97                                        </ul>
98                                </div>
99                        </div>
100                        $_categories
101                        $_subcategories
102                </div>
103                $_form
104                <div id="content">
105                        <div class="settings-block">
106                                $_head
107                                $ERROR
108EOF
109        [ -z "$REMOTE_USER" \
110          -a "${SCRIPT_NAME#/cgi-bin/}" != "webif.sh" ] && {
111                [ -z $FORM_passwd1 ] || {
112                        echo '<pre>'
113                        (
114                                echo "$FORM_passwd1"
115                                sleep 1
116                                echo "$FORM_passwd2"
117                        ) | passwd root
118                        apply_passwd
119                        echo '</pre>'
120                        footer
121                        exit
122                }
123                grep 'root:!' /etc/passwd >&- 2>&- && {
124                        cat <<EOF
125<br />
126<br />
127<br />
128<h3>Warning: you haven't set a password for the Web interface and SSH access<br />
129Please enter one now</h3>
130<br />
131<form enctype="multipart/form-data" action="$SCRIPT_NAME" method="POST">
132<table>
133        <tr>
134                <td>Enter Password:</td>
135                <td><input type="password" name="passwd1" /></td>
136        </tr>
137        <tr>
138                <td>Repeat Password: &nbsp; </td>
139                <td><input type="password" name="passwd2" /></td>
140        </tr>
141        <tr>
142                <td />
143                <td><input type="submit" name="action" value="Set" /></td>
144        </tr>
145</table>
146</form>
147EOF
148                        footer
149                        exit
150                } || {
151                        apply_passwd
152                }
153        }
154}
155
156footer() {
157        _changes=${CHANGES#0}
158        _changes=${_changes:+(${_changes})}
159        cat <<EOF
160                        </div>
161                        <hr width="40%" />
162                </div>
163                <br />
164                <div id="save">
165                        <div class="page-save">
166                                <div>
167                                        $_savebutton
168                                </div>
169                        </div>
170                        <div class="apply">
171                                <div>
172                                        <a href="config.sh?mode=save&amp;cat=$_category">Apply changes &laquo;</a><br />
173                                        <a href="config.sh?mode=clear&amp;cat=$_category">Clear changes &laquo;</a><br />
174                                        <a href="config.sh?mode=review&amp;cat=$_category">Review changes $_changes &laquo;</a>
175                                </div>
176                        </div>
177                </div>
178                </form>
179    </div></body>
180</html>
181EOF
182}
183
184apply_passwd() {
185        case ${SERVER_SOFTWARE%% *} in
186                busybox)
187                        echo -n '/cgi-bin/webif:' > /etc/httpd.conf
188                        cat /etc/passwd | grep root | cut -d: -f1,2 >> /etc/httpd.conf
189                        killall -HUP httpd
190                        ;;
191        esac
192}
193
194display_form() {
195        echo "$1" | awk -F'|' -f /usr/lib/webif/form.awk
196}
197
198list_remove() {
199        echo "$1 " | awk '
200BEGIN {
201        RS=" "
202        FS=":"
203}
204($0 !~ /^'"$2"'/) && ($0 != "") {
205        printf " " $0
206        first = 0
207}'
208}
209
210handle_list() {
211        _new="${1:+$(list_remove "$LISTVAL" "$1") }"
212        _new="${_new:-$LISTVAL}"
213        LISTVAL="$_new"
214        LISTVAL="${LISTVAL# }"
215        LISTVAL="${LISTVAL%% }"
216       
217        _validate="$4"
218        _validate="${4:-none}"
219        _changed="$1"
220        [ \! -z "$3" ] && validate "$_validate|$2" && {
221                LISTVAL="$LISTVAL $2"
222                _changed="$1$3"
223        }
224
225        _return="${_changed:+0}"
226        _return="${_return:-255}"
227        LISTVAL="${LISTVAL# }"
228        LISTVAL="${LISTVAL%% }"
229        LISTVAL="${LISTVAL:- }"
230        return $_return
231}
232
233load_settings() {
234        [ \! "$1" = "nvram" -a -f /etc/config/$1 ] && . /etc/config/$1
235        [ -f /tmp/.webif/config-$1 ] && . /tmp/.webif/config-$1
236}
237
238validate() {
239        eval "$(echo "$1" | awk -f /usr/lib/webif/validate.awk)"
240}
241
242save_setting() {
243        mkdir -p /tmp/.webif
244        oldval=$(eval "echo \${$2}")
245        oldval=${oldval:-$(nvram get "$2")}
246        grep "^$2=" /tmp/.webif/config-$1 >&- 2>&- && {
247                mv /tmp/.webif/config-$1 /tmp/.webif/config-$1-old 2>&- >&-
248                grep -v "^$2=" /tmp/.webif/config-$1-old > /tmp/.webif/config-$1 2>&-
249                oldval=""
250        }
251        [ "$oldval" != "$3" ] && echo "$2=\"$3\"" >> /tmp/.webif/config-$1
252        rm -f /tmp/.webif/config-$1-old
253}
254
255
256# common awk code for forms
257AWK_START_FORM='
258        print "<div class=\"settings\">"
259        print "<div class=\"settings-title\"><h3><strong>" title "</strong></h3></div>"
260        print "<div class=\"settings-content\">"
261'
262AWK_END_FORM='
263        print "</div>"
264        if (form_help != "") form_help = "<dl>" form_help "</dl>"
265        print "<div class=\"settings-help\"><blockquote><h3><strong>Short help:</strong></h3>" form_help form_help_link "</blockquote></div>"
266        form_help = ""
267        form_help_link = ""
268        print "<div style=\"clear: both\">&nbsp;</div></div>"
269'
270
Note: See TracBrowser for help on using the repository browser.