tazpanel view settings.cgi @ rev 336

Add settings/groups
author Pascal Bellard <pascal.bellard@slitaz.org>
date Mon Dec 31 16:14:48 2012 +0100 (2012-12-31)
parents bfa31f855b8c
children 1bccb526ff67
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 *\ rdate\ *)
95 rdate -s tick.greyware.com ;;
96 *\ hwclock\ *)
97 hwclock -w -u ;;
98 *\ panel_pass*)
99 sed -i s@/:root:.*@/:root:$(GET panel_pass)@ $HTTPD_CONF ;;
100 *\ style*)
101 sed -i s/'^STYLE.*'/"STYLE=\"$(GET style)\""/ $CONFIG
102 . $CONFIG ;;
103 esac
105 #
106 # Default xHTML content
107 #
108 xhtml_header
110 case " $(GET) " in
111 *\ group*)
112 #
113 # Groups management
114 #
115 cat <<EOT
116 <h3 id="groups">$(gettext 'Manage groups')</h3>
118 <form method="get" action="$SCRIPT_NAME">
119 <input type="hidden" name="groups" />
120 <div id="actions">
121 <div class="float-left">
122 $(gettext 'Selection:')
123 <input type="submit" name="do" value="$(gettext 'Delete group')" />
124 </div>
125 </div>
127 <table class="zebra outbox">
128 <thead>
129 <tr class="thead">
130 <td>$(gettext 'Group')</td>
131 <td>$(gettext 'Group ID')</td>
132 <td>$(gettext 'Members')</td>
133 </tr>
134 </thead>
135 </tbody>
136 EOT
137 for group in `getdb group | cut -d ":" -f 1`
138 do
139 IFS=':'
140 set -- $(getdb group | grep "^$group:")
141 unset IFS
142 gid=$3
143 members=$4
144 cat <<EOT
145 <tr>
146 <td><input type='checkbox' name='group' value='$group' />
147 <img src='$IMAGES/users.png' />$group</td>
148 <td>$gid</td>
149 <td>${members//,/, }</td>
150 </tr>
151 EOT
152 done
153 cat << EOT
154 </tbody>
155 </table>
156 </form>
158 <section>
159 <h4>$(gettext 'Add a new group')</h4>
161 <form method="get" action="$SCRIPT_NAME">
162 <input type="hidden" name="groups" />
163 <table>
164 <tr><td>$(gettext 'Group name:')</td>
165 <td><input type="text" name="addgroup" size="30" /></td>
166 <td>
167 <input type="submit" value="$(gettext 'Create group')" /></td></tr>
168 </table>
169 </form>
170 </section>
172 <section>
173 <h4>$(gettext 'Manage group membership')</h4>
175 <form method="get" action="$SCRIPT_NAME">
176 <input type="hidden" name="groups" />
177 <table>
178 <tr><td>$(gettext 'Group name:')</td>
179 <td><select name="group">
180 $(listdb group)
181 </select></td>
182 <td>$(gettext 'User name:')</td>
183 <td><select name="member">
184 $(listdb passwd)
185 </select></td></tr>
186 <tr><td colspan="4"><input type="submit" name="addmember" value="$(gettext 'Add user')" />
187 <input type="submit" name="delmember" value="$(gettext 'Remove user')" /></td></tr>
188 </table>
189 </form>
190 </section>
192 EOT
193 ;;
195 *\ user*)
196 #
197 # Users management
198 #
199 cat <<EOT
200 <h3 id="users">$(gettext 'Manage users')</h3>
202 <form method="get" action="$SCRIPT_NAME">
203 <div id="actions">
204 <div class="float-left">
205 $(gettext 'Selection:')
206 <input type="submit" name="do" value="$(gettext 'Delete user')" />
207 <input type="submit" name="do" value="$(gettext 'Lock user')" />
208 <input type="submit" name="do" value="$(gettext 'Unlock user')" />
209 </div>
210 </div>
212 <table class="zebra outbox">
213 <thead>
214 <tr class="thead">
215 <td>$(gettext 'Login')</td>
216 <td>$(gettext 'User ID')</td>
217 <td>$(gettext 'Name')</td>
218 <td>$(gettext 'Home')</td>
219 <td>$(gettext 'Shell')</td>
220 </tr>
221 </thead>
222 </tbody>
223 EOT
224 for login in `getdb passwd | cut -d ":" -f 1`
225 do
226 if [ -d /home/$login ]; then
227 colorlogin=$login
228 grep -qs "^$login:!" /etc/shadow &&
229 colorlogin="<span style='color: red;'>$login</span>"
230 IFS=':'
231 set -- $(getdb passwd | grep "^$login:")
232 unset IFS
233 uid=$3
234 gid=$4
235 name="$(echo $5 | sed s/,.*//)"
236 home="$6"
237 shell=$7
238 cat <<EOT
239 <tr>
240 <td><input type='checkbox' name='user' value='$login' />
241 <img src='$IMAGES/user.png' />$colorlogin</td>
242 <td>$uid:$gid</td>
243 <td>$name</td>
244 <td>$home</td>
245 <td>$shell</td>
246 </tr>
247 EOT
248 fi
249 done
250 cat << EOT
251 </tbody>
252 </table>
253 EOT
254 cat << EOT
255 <p>
256 $(gettext 'Password:')
257 <input type="password" name="password" />
258 <input type="submit" name="do" value="$(gettext 'Change password')" />
259 </p>
260 </form>
262 <section>
263 <h4>$(gettext 'Add a new user')</h4>
265 <form method="get" action="$SCRIPT_NAME">
266 <input type="hidden" name="user" />
267 <table>
268 <tr><td>$(gettext 'User login:')</td>
269 <td><input type="text" name="adduser" size="30" /></td></tr>
270 <tr><td>$(gettext 'User password:')</td>
271 <td><input type="password" name="passwd" size="30" /></td></tr>
272 <tr><td colspan="2">
273 <input type="submit" value="$(gettext 'Create user')" /></td></tr>
274 </table>
275 </form>
276 </section>
278 <section>
279 <h4>$(gettext 'Current user sessions')</h4>
281 <pre>$(who)</pre>
282 </section>
284 <section>
285 <h4>$(gettext 'Last user sessions')</h4>
287 <pre>$(last)</pre>
288 </section>
289 EOT
290 ;;
293 *\ locale*)
294 #
295 # Choose locale
296 #
297 LOADING_MSG="$(gettext 'Please wait...')"
298 loading_msg
299 cur_loc=$(locale | grep LANG | cut -d= -f2)
300 cat << EOT
301 <h3 id="locale">$(gettext 'Choose locale')</h3>
303 <p>$(gettext 'Current locale settings:')</p>
304 <pre>$(locale)</pre>
306 <p>$(gettext 'Locales that are currently installed on the machine:')</p>
307 <pre>$(locale -a)</pre>
309 <p>$(gettext 'Available locales:')</p>
310 EOT
312 is_installed "glibc-locale"
313 [ $? = 1 ] &&
314 msg tip $(gettext \
315 "Can't see your language?<br/>You can \
316 <a href='/pkgs.cgi?do=Install&glibc-locale'>install glibc-locale</a> \
317 to see a larger list of available locales.")
319 cat << EOT
320 <form method="get" action="$SCRIPT_NAME">
321 <div class="outbox">
322 <table class="zebra fixed">
323 <thead>
324 <tr><td style="width:9em">$(gettext 'Code')</td>
325 <td style="width:10em">$(gettext 'Language')</td>
326 <td style="width:10em">$(gettext 'Territory')</td>
327 <td>$(gettext 'Description')</td>
328 </tr>
329 </thead>
330 </table>
332 <div style="max-height: 16em; overflow:auto">
333 <table class="zebra fixed">
334 <col style="width:9em">
335 <col style="width:10em">
336 <col style="width:10em">
337 <col>
338 <tbody style="max-height:10em; overflow:auto">
339 EOT
340 for locale in $(find /usr/share/i18n/locales -type f | sort)
341 do
342 locale_name=$(basename $locale)
343 locale_title=$(grep -m 1 -e '^ *title' $locale | cut -d'"' -f2)
344 if [ -n "$locale_title" ]; then
345 sel=""; [ "$locale_name" == "$cur_loc" ] && sel="checked"
346 cat << EOT
347 <tr><td><input type="radio" name="gen_locale" value="$locale_name" $sel />$locale_name</td>
348 <td>$(gettext -d iso_639 "$(grep -m 1 -e '^ *language' $locale | cut -d '"' -f2)")</td>
349 <td>$(gettext -d iso_3166 "$(grep -m 1 -e '^ *territory' $locale | cut -d '"' -f2)")</td>
350 <td>$locale_title</td>
351 </tr>
352 EOT
353 fi
354 done
355 cat << EOT
356 </tbody>
357 </table>
358 </div>
359 </div>
360 <p><input type="submit" value="$(gettext 'Activate')" /></p>
361 </form>
362 EOT
363 ;;
366 *)
367 #
368 # Defaut system settings page
369 #
370 cat << EOT
371 <div id="wrapper">
372 <h2>$(gettext 'System settings')</h2>
373 <p>$(gettext 'Manage system time, users or language settings')<p>
374 </div>
375 <div id="actions">
376 <a class="button" href="$SCRIPT_NAME?users">
377 <img src="$IMAGES/user.png" />$(gettext 'Manage users')</a>
378 <a class="button" href="$SCRIPT_NAME?groups">
379 <img src="$IMAGES/users.png" />$(gettext 'Manage groups')</a>
380 </div>
382 <section>
383 <h3>$(gettext 'System time')</h3>
385 <table>
386 <tr><td>$(gettext 'Time zome:')</td><td>$(cat /etc/TZ)
387 <a class="button" href="$SCRIPT_NAME">$(gettext 'Change')</a></td></tr>
388 <tr><td>$(gettext 'System time:')</td><td>$(date)</td></tr>
389 <tr><td>$(gettext 'Hardware clock:')</td><td>$(hwclock -r)</tr>
390 </table>
391 <a class="button" href="$SCRIPT_NAME?rdate">$(gettext 'Sync online')</a>
392 <a class="button" href="$SCRIPT_NAME?hwclock">$(gettext 'Set hardware clock')</a>
393 </section>
394 EOT
395 #
396 # Locale settings
397 #
398 cat << EOT
399 <section>
400 <h3 id="locale">$(gettext 'System language')</h3>
401 <p>
402 EOT
403 # Check if a new locale was requested
404 if [ -n "$new_locale" ]; then
405 rm -rf /usr/lib/locale/$new_locale
406 localedef -i $new_locale -c -f UTF-8 \
407 /usr/lib/locale/$new_locale
408 # System configuration
409 echo "LANG=$new_locale" > /etc/locale.conf
410 echo "LC_ALL=$new_locale" >> /etc/locale.conf
411 msg warn "$(eval_gettext \
412 'You must logout and login again to your current session to use $new_locale locale.')"
413 else
414 gettext 'Current system locale:'; echo -n " <strong>"
415 locale | grep LANG | cut -d= -f2
416 fi
417 cat << EOT
418 </strong> <a class="button" href="$SCRIPT_NAME?locale">$(gettext 'Change')</a></p>
419 </section>
421 <section>
422 <h3 id="keymap">$(gettext 'Console keymap')</h3>
423 <p>
424 EOT
425 # Check if a new keymap was requested
426 if [ -n "$new_keymap" ]; then
427 echo "$new_keymap" > /etc/keymap.conf
428 if [ -x /bin/loadkeys ]; then
429 loadkeys $new_keymap
430 else
431 loadkmap < /usr/share/kmap/$new_keymap.kmap
432 fi
433 fi
434 keymap=$(cat /etc/keymap.conf)
435 eval_gettext 'Current console keymap: $keymap'
436 echo "</p>"
437 if [ -n "$keymap" ]; then
438 case "$keymap" in
439 fr_CH*)
440 keymap="ch" ;;
441 ru)
442 keymap="us,ru(winkeys)" ;;
443 slovene)
444 keymap=si ;;
445 *)
446 keymap=${keymap%-lat*}
447 keymap=${keymap%-abnt2} ;;
448 esac
449 keyboard_config=/etc/X11/xorg.conf.d/40-Keyboard.conf
450 cat << EOT
451 <form method="get" action="$SCRIPT_NAME">
452 $(gettext 'Suggested keymap for Xorg:')
453 <input type="submit" name "apply_xorg_kbd" value="$keymap" />
454 <a class="button" href="index.cgi?file=$keyboard_config">
455 <img src="$IMAGES/edit.png" />$(gettext 'Edit')</a>
456 </form>
457 EOT
458 fi
459 cat << EOT
460 <form method="get" action="$SCRIPT_NAME">
461 $(gettext 'Available keymaps:')
462 <select name="gen_keymap">
463 $(list_keymaps)
464 </select>
465 <input type="submit" value="$(gettext 'Activate')" />
466 </form>
467 </section>
469 <section>
470 <h2>$(gettext 'Panel configuration')</h2>
472 <form method="get" action="$SCRIPT_NAME">
473 <p>
474 $(gettext 'Style:')
475 <select name="style">
476 $(list_styles)
477 </select>
478 <input type="submit" value="$(gettext 'Activate')" />
479 </p>
480 </form>
481 <form method="get" action="$SCRIPT_NAME">
482 <p>
483 $(gettext 'Panel password:')
484 <input type="password" name="panel_pass"/>
485 <input type="submit" value="$(gettext 'Change')" />
486 </p>
487 </form>
488 <p>
489 $(gettext 'Configuration files:')
490 <a class="button" href="index.cgi?file=$CONFIG">
491 <img src="$IMAGES/edit.png" />$(gettext 'Panel')</a>
492 <a class="button" href="index.cgi?file=$HTTPD_CONF">
493 <img src="$IMAGES/edit.png" />$(gettext 'Server')</a>
494 </p>
495 <p>
496 $(gettext 'TazPanel provides a debuging mode and page:')
497 <a href="/index.cgi?debug">debug</a>
498 </p>
499 </section>
500 EOT
501 ;;
502 esac
504 xhtml_footer
505 exit 0