tazpanel view settings.cgi @ rev 337

settings.cgi: set date manualy
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Jan 02 13:35:40 2013 +0100 (2013-01-02)
parents 288c37594662
children 51abbebce217
line source
1 #!/bin/sh
2 #
3 # System settings CGI interface: user, locale, keyboard, date. Since we
4 # don't have multiple pages here there is only one case used to get command
5 # values and the full content is followed directly.
6 #
7 # Copyright (C) 2011 SliTaz GNU/Linux - BSD License
8 #
10 # Common functions from libtazpanel
11 . lib/libtazpanel
12 get_config
13 header
15 TITLE=$(gettext 'TazPanel - Settings')
17 # Get system database. LDAP compatible.
18 getdb()
19 {
20 getent $1 2>/dev/null || cat /etc/$1
21 }
23 listdb()
24 {
25 for item in $(getdb $1 | cut -d ":" -f 1); do
26 echo "<option>$item</option>\n"
27 done
28 }
30 #
31 # Commands executed before page loading.
32 #
34 case " $(GET) " in
35 *\ do\ *)
36 # Assume no array support in httpd_helper.sh ;^)
37 users=""
38 groups=""
39 IFS="&"
40 for i in $QUERY_STRING ; do
41 case "$i" in
42 user=*) users="$users ${i#user=}" ;;
43 group=*) groups="$groups ${i#group=}" ;;
44 esac
45 done
46 unset IFS
47 for cmd in "Delete group" ; do
48 [ "$(GET do)" == "$(gettext "$cmd")" ] || continue
49 for group in $groups ; do
50 case "$cmd" in
51 Delete*) delgroup $group ;;
52 esac
53 done
54 done
55 for cmd in "Delete user" "Lock user" "Unlock user" \
56 "Change password" ; do
57 [ "$(GET do)" == "$(gettext "$cmd")" ] || continue # BUGGY
58 for user in $users ; do
59 case "$cmd" in
60 Delete*) deluser $user ;;
61 Lock*) passwd -l $user | log ;;
62 Unlock*) passwd -u $user | log ;;
63 Change*) echo "$user:$(GET password)" | chpasswd -m | log ;;
64 esac
65 done
66 done ;;
67 *\ addmember\ *)
68 addgroup $(GET member) $(GET group) ;;
69 *\ delmember\ *)
70 delgroup $(GET member) $(GET group) ;;
71 *\ addgroup\ *)
72 addgroup $(GET addgroup) ;;
73 *\ adduser\ *)
74 #
75 # Manage system user accounts
76 #
77 user=$(GET adduser)
78 passwd=$(GET passwd)
79 if [ -n "$user" ]; then
80 adduser -D -s /bin/sh -g "SliTaz User" -G users -h /home/$user $user
81 echo "$user:$passwd" | chpasswd -m | log
82 for g in audio cdrom floppy video tty
83 do
84 addgroup $user $g
85 done
86 fi ;;
87 *\ gen_locale\ *)
88 new_locale=$(GET gen_locale) ;;
89 *\ gen_keymap\ *)
90 new_keymap=$(GET gen_keymap) ;;
91 *\ apply_xorg_kbd\ *)
92 sed -i "s/XkbLayout.*/XkbLayout \" \"$(GET apply_xorg_kbd)\"/" \
93 /etc/X11/xorg.conf.d/40-Keyboard.conf ;;
94 *\ date\ *)
95 date $(GET month)$(GET day)$(GET hour)$(GET min)$(GET year).$(GET sec) ;;
96 *\ rdate\ *)
97 rdate -s tick.greyware.com ;;
98 *\ hwclock\ *)
99 hwclock -w -u ;;
100 *\ panel_pass*)
101 sed -i s@/:root:.*@/:root:$(GET panel_pass)@ $HTTPD_CONF ;;
102 *\ style*)
103 sed -i s/'^STYLE.*'/"STYLE=\"$(GET style)\""/ $CONFIG
104 . $CONFIG ;;
105 esac
107 #
108 # Default xHTML content
109 #
110 xhtml_header
112 case " $(GET) " in
113 *\ group*)
114 #
115 # Groups management
116 #
117 cat <<EOT
118 <h3 id="groups">$(gettext 'Manage groups')</h3>
120 <form method="get" action="$SCRIPT_NAME">
121 <input type="hidden" name="groups" />
122 <div id="actions">
123 <div class="float-left">
124 $(gettext 'Selection:')
125 <input type="submit" name="do" value="$(gettext 'Delete group')" />
126 </div>
127 </div>
129 <table class="zebra outbox">
130 <thead>
131 <tr class="thead">
132 <td>$(gettext 'Group')</td>
133 <td>$(gettext 'Group ID')</td>
134 <td>$(gettext 'Members')</td>
135 </tr>
136 </thead>
137 </tbody>
138 EOT
139 for group in `getdb group | cut -d ":" -f 1`
140 do
141 IFS=':'
142 set -- $(getdb group | grep "^$group:")
143 unset IFS
144 gid=$3
145 members=$4
146 cat <<EOT
147 <tr>
148 <td><input type='checkbox' name='group' value='$group' />
149 <img src='$IMAGES/users.png' />$group</td>
150 <td>$gid</td>
151 <td>${members//,/, }</td>
152 </tr>
153 EOT
154 done
155 cat << EOT
156 </tbody>
157 </table>
158 </form>
160 <section>
161 <h4>$(gettext 'Add a new group')</h4>
163 <form method="get" action="$SCRIPT_NAME">
164 <input type="hidden" name="groups" />
165 <table>
166 <tr><td>$(gettext 'Group name:')</td>
167 <td><input type="text" name="addgroup" size="30" /></td>
168 <td>
169 <input type="submit" value="$(gettext 'Create group')" /></td></tr>
170 </table>
171 </form>
172 </section>
174 <section>
175 <h4>$(gettext 'Manage group membership')</h4>
177 <form method="get" action="$SCRIPT_NAME">
178 <input type="hidden" name="groups" />
179 <table>
180 <tr><td>$(gettext 'Group name:')</td>
181 <td><select name="group">
182 $(listdb group)
183 </select></td>
184 <td>$(gettext 'User name:')</td>
185 <td><select name="member">
186 $(listdb passwd)
187 </select></td></tr>
188 <tr><td colspan="4"><input type="submit" name="addmember" value="$(gettext 'Add user')" />
189 <input type="submit" name="delmember" value="$(gettext 'Remove user')" /></td></tr>
190 </table>
191 </form>
192 </section>
194 EOT
195 ;;
197 *\ user*)
198 #
199 # Users management
200 #
201 cat <<EOT
202 <h3 id="users">$(gettext 'Manage users')</h3>
204 <form method="get" action="$SCRIPT_NAME">
205 <div id="actions">
206 <div class="float-left">
207 $(gettext 'Selection:')
208 <input type="submit" name="do" value="$(gettext 'Delete user')" />
209 <input type="submit" name="do" value="$(gettext 'Lock user')" />
210 <input type="submit" name="do" value="$(gettext 'Unlock user')" />
211 </div>
212 </div>
214 <table class="zebra outbox">
215 <thead>
216 <tr class="thead">
217 <td>$(gettext 'Login')</td>
218 <td>$(gettext 'User ID')</td>
219 <td>$(gettext 'Name')</td>
220 <td>$(gettext 'Home')</td>
221 <td>$(gettext 'Shell')</td>
222 </tr>
223 </thead>
224 </tbody>
225 EOT
226 for login in `getdb passwd | cut -d ":" -f 1`
227 do
228 if [ -d /home/$login ]; then
229 colorlogin=$login
230 grep -qs "^$login:!" /etc/shadow &&
231 colorlogin="<span style='color: red;'>$login</span>"
232 IFS=':'
233 set -- $(getdb passwd | grep "^$login:")
234 unset IFS
235 uid=$3
236 gid=$4
237 name="$(echo $5 | sed s/,.*//)"
238 home="$6"
239 shell=$7
240 cat <<EOT
241 <tr>
242 <td><input type='checkbox' name='user' value='$login' />
243 <img src='$IMAGES/user.png' />$colorlogin</td>
244 <td>$uid:$gid</td>
245 <td>$name</td>
246 <td>$home</td>
247 <td>$shell</td>
248 </tr>
249 EOT
250 fi
251 done
252 cat << EOT
253 </tbody>
254 </table>
255 EOT
256 cat << EOT
257 <p>
258 $(gettext 'Password:')
259 <input type="password" name="password" />
260 <input type="submit" name="do" value="$(gettext 'Change password')" />
261 </p>
262 </form>
264 <section>
265 <h4>$(gettext 'Add a new user')</h4>
267 <form method="get" action="$SCRIPT_NAME">
268 <input type="hidden" name="user" />
269 <table>
270 <tr><td>$(gettext 'User login:')</td>
271 <td><input type="text" name="adduser" size="30" /></td></tr>
272 <tr><td>$(gettext 'User password:')</td>
273 <td><input type="password" name="passwd" size="30" /></td></tr>
274 <tr><td colspan="2">
275 <input type="submit" value="$(gettext 'Create user')" /></td></tr>
276 </table>
277 </form>
278 </section>
280 <section>
281 <h4>$(gettext 'Current user sessions')</h4>
283 <pre>$(who)</pre>
284 </section>
286 <section>
287 <h4>$(gettext 'Last user sessions')</h4>
289 <pre>$(last)</pre>
290 </section>
291 EOT
292 ;;
295 *\ locale*)
296 #
297 # Choose locale
298 #
299 LOADING_MSG="$(gettext 'Please wait...')"
300 loading_msg
301 cur_loc=$(locale | grep LANG | cut -d= -f2)
302 cat << EOT
303 <h3 id="locale">$(gettext 'Choose locale')</h3>
305 <p>$(gettext 'Current locale settings:')</p>
306 <pre>$(locale)</pre>
308 <p>$(gettext 'Locales that are currently installed on the machine:')</p>
309 <pre>$(locale -a)</pre>
311 <p>$(gettext 'Available locales:')</p>
312 EOT
314 is_installed "glibc-locale"
315 [ $? = 1 ] &&
316 msg tip $(gettext \
317 "Can't see your language?<br/>You can \
318 <a href='/pkgs.cgi?do=Install&glibc-locale'>install glibc-locale</a> \
319 to see a larger list of available locales.")
321 cat << EOT
322 <form method="get" action="$SCRIPT_NAME">
323 <div class="outbox">
324 <table class="zebra fixed">
325 <thead>
326 <tr><td style="width:9em">$(gettext 'Code')</td>
327 <td style="width:10em">$(gettext 'Language')</td>
328 <td style="width:10em">$(gettext 'Territory')</td>
329 <td>$(gettext 'Description')</td>
330 </tr>
331 </thead>
332 </table>
334 <div style="max-height: 16em; overflow:auto">
335 <table class="zebra fixed">
336 <col style="width:9em">
337 <col style="width:10em">
338 <col style="width:10em">
339 <col>
340 <tbody style="max-height:10em; overflow:auto">
341 EOT
342 for locale in $(find /usr/share/i18n/locales -type f | sort)
343 do
344 locale_name=$(basename $locale)
345 locale_title=$(grep -m 1 -e '^ *title' $locale | cut -d'"' -f2)
346 if [ -n "$locale_title" ]; then
347 sel=""; [ "$locale_name" == "$cur_loc" ] && sel="checked"
348 cat << EOT
349 <tr><td><input type="radio" name="gen_locale" value="$locale_name" $sel />$locale_name</td>
350 <td>$(gettext -d iso_639 "$(grep -m 1 -e '^ *language' $locale | cut -d '"' -f2)")</td>
351 <td>$(gettext -d iso_3166 "$(grep -m 1 -e '^ *territory' $locale | cut -d '"' -f2)")</td>
352 <td>$locale_title</td>
353 </tr>
354 EOT
355 fi
356 done
357 cat << EOT
358 </tbody>
359 </table>
360 </div>
361 </div>
362 <p><input type="submit" value="$(gettext 'Activate')" /></p>
363 </form>
364 EOT
365 ;;
368 *)
369 #
370 # Defaut system settings page
371 #
372 cat << EOT
373 <div id="wrapper">
374 <h2>$(gettext 'System settings')</h2>
375 <p>$(gettext 'Manage system time, users or language settings')<p>
376 </div>
377 <div id="actions">
378 <a class="button" href="$SCRIPT_NAME?users">
379 <img src="$IMAGES/user.png" />$(gettext 'Manage users')</a>
380 <a class="button" href="$SCRIPT_NAME?groups">
381 <img src="$IMAGES/users.png" />$(gettext 'Manage groups')</a>
382 </div>
384 <section>
385 <h3>$(gettext 'System time')</h3>
387 <table>
388 <tr><td>$(gettext 'Time zome:')</td><td>$(cat /etc/TZ)
389 <a class="button" href="$SCRIPT_NAME">$(gettext 'Change')</a></td></tr>
390 <tr><td>$(gettext 'System time:')</td><td>$(date)</td></tr>
391 <tr><td>$(gettext 'Hardware clock:')</td><td>$(hwclock -r)</tr>
392 </table>
393 <form method="get" action="$SCRIPT_NAME">
394 <select name="day">
395 $(for i in $(seq 1 31); do echo "<option>$i</option>"; done)
396 </select>
397 <select name="month">
398 $(for i in 01 02 03 04 05 06 07 08 09 10 11 12; do
399 date -d ${i}010101 '+%m %B' | \
400 sed 's|\(.*\) \(.*\)|<option value="\1">\2</option>|'
401 done)
402 </select>
403 <select name="year">
404 $(for i in $(seq 2010 2030); do echo "<option>$i</option>"; done)
405 </select>
406 - <select name="hour">
407 $(for i in $(seq 0 23); do printf "<option>%02d</option>" $i; done)
408 </select>
409 : <select name="min">
410 $(for i in $(seq 0 59); do printf "<option>%02d</option>" $i; done)
411 </select>
412 : <select name="sec">
413 $(for i in $(seq 0 59); do printf "<option>%02d</option>" $i; done)
414 </select>
415 <input type="submit" name="date" value="$(gettext 'Set date')" />
416 </form>
417 <a class="button" href="$SCRIPT_NAME?rdate">$(gettext 'Sync online')</a>
418 <a class="button" href="$SCRIPT_NAME?hwclock">$(gettext 'Set hardware clock')</a>
419 </section>
420 EOT
421 #
422 # Locale settings
423 #
424 cat << EOT
425 <section>
426 <h3 id="locale">$(gettext 'System language')</h3>
427 <p>
428 EOT
429 # Check if a new locale was requested
430 if [ -n "$new_locale" ]; then
431 rm -rf /usr/lib/locale/$new_locale
432 localedef -i $new_locale -c -f UTF-8 \
433 /usr/lib/locale/$new_locale
434 # System configuration
435 echo "LANG=$new_locale" > /etc/locale.conf
436 echo "LC_ALL=$new_locale" >> /etc/locale.conf
437 msg warn "$(eval_gettext \
438 'You must logout and login again to your current session to use $new_locale locale.')"
439 else
440 gettext 'Current system locale:'; echo -n " <strong>"
441 locale | grep LANG | cut -d= -f2
442 fi
443 cat << EOT
444 </strong> <a class="button" href="$SCRIPT_NAME?locale">$(gettext 'Change')</a></p>
445 </section>
447 <section>
448 <h3 id="keymap">$(gettext 'Console keymap')</h3>
449 <p>
450 EOT
451 # Check if a new keymap was requested
452 if [ -n "$new_keymap" ]; then
453 echo "$new_keymap" > /etc/keymap.conf
454 if [ -x /bin/loadkeys ]; then
455 loadkeys $new_keymap
456 else
457 loadkmap < /usr/share/kmap/$new_keymap.kmap
458 fi
459 fi
460 keymap=$(cat /etc/keymap.conf)
461 eval_gettext 'Current console keymap: $keymap'
462 echo "</p>"
463 if [ -n "$keymap" ]; then
464 case "$keymap" in
465 fr_CH*)
466 keymap="ch" ;;
467 ru)
468 keymap="us,ru(winkeys)" ;;
469 slovene)
470 keymap=si ;;
471 *)
472 keymap=${keymap%-lat*}
473 keymap=${keymap%-abnt2} ;;
474 esac
475 keyboard_config=/etc/X11/xorg.conf.d/40-Keyboard.conf
476 cat << EOT
477 <form method="get" action="$SCRIPT_NAME">
478 $(gettext 'Suggested keymap for Xorg:')
479 <input type="submit" name "apply_xorg_kbd" value="$keymap" />
480 <a class="button" href="index.cgi?file=$keyboard_config">
481 <img src="$IMAGES/edit.png" />$(gettext 'Edit')</a>
482 </form>
483 EOT
484 fi
485 cat << EOT
486 <form method="get" action="$SCRIPT_NAME">
487 $(gettext 'Available keymaps:')
488 <select name="gen_keymap">
489 $(list_keymaps)
490 </select>
491 <input type="submit" value="$(gettext 'Activate')" />
492 </form>
493 </section>
495 <section>
496 <h2>$(gettext 'Panel configuration')</h2>
498 <form method="get" action="$SCRIPT_NAME">
499 <p>
500 $(gettext 'Style:')
501 <select name="style">
502 $(list_styles)
503 </select>
504 <input type="submit" value="$(gettext 'Activate')" />
505 </p>
506 </form>
507 <form method="get" action="$SCRIPT_NAME">
508 <p>
509 $(gettext 'Panel password:')
510 <input type="password" name="panel_pass"/>
511 <input type="submit" value="$(gettext 'Change')" />
512 </p>
513 </form>
514 <p>
515 $(gettext 'Configuration files:')
516 <a class="button" href="index.cgi?file=$CONFIG">
517 <img src="$IMAGES/edit.png" />$(gettext 'Panel')</a>
518 <a class="button" href="index.cgi?file=$HTTPD_CONF">
519 <img src="$IMAGES/edit.png" />$(gettext 'Server')</a>
520 </p>
521 <p>
522 $(gettext 'TazPanel provides a debuging mode and page:')
523 <a href="/index.cgi?debug">debug</a>
524 </p>
525 </section>
526 EOT
527 ;;
528 esac
530 xhtml_footer
531 exit 0