tazpanel view settings.cgi @ rev 466

settings.cgi: no more panel password (but users)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Apr 26 18:09:20 2015 +0200 (2015-04-26)
parents 2c1f491aca05
children 098e260f32cd
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-2015 SliTaz GNU/Linux - BSD License
8 #
11 # Common functions from libtazpanel
13 . lib/libtazpanel
14 get_config
15 header
17 TITLE=$(_ 'TazPanel - Settings')
20 # Get system database. LDAP compatible.
22 getdb() {
23 getent $1 2>/dev/null || cat /etc/$1
24 }
26 listdb() {
27 for item in $(getdb $1 | cut -d ":" -f 1); do
28 echo "<option>$item</option>\n"
29 done
30 }
36 #
37 # Commands executed before page loading.
38 #
40 case " $(GET) " in
41 *\ do\ *)
42 users=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="user") print $2}')
43 groups=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="group")print $2}')
45 case $(GET do) in
47 # Groups page
48 delgroups)
49 for i in $groups; do delgroup $i; done ;;
50 addgroup)
51 addgroup $groups ;;
52 addmember)
53 addgroup $(GET member) $groups ;;
54 delmember)
55 delgroup $(GET member) $groups ;;
57 # Users page
58 delusers)
59 for i in $users; do deluser $i; done ;;
60 lockusers)
61 for i in $users; do passwd -l $i | log; done ;;
62 unlockusers)
63 for i in $users; do passwd -u $i | log; done ;;
64 chpasswd)
65 echo "$users:$(GET password)" | chpasswd -m | log ;;
66 adduser)
67 if [ -n "$users" ]; then
68 name=$(GET name); name=${name:-SliTaz User}
69 adduser -D -s /bin/sh -g "$name" -G users -h /home/$users $users
70 echo "$user:$(GET passwd)" | chpasswd -m | log
71 for i in audio cdrom floppy video tty; do addgroup $users $i; done
72 fi ;;
74 # System time
75 settz)
76 GET tz > /etc/TZ;;
77 date) # normalize to two digits
78 date $(printf '%02d%02d%02d%02d%d.%02d' "$(GET month)" "$(GET day)" "$(GET hour)" "$(GET min)" "$(GET year)" "$(GET sec)") >/dev/null;;
79 rdate)
80 rdate -s tick.greyware.com ;;
81 hwclock)
82 hwclock -w -u ;;
84 esac
85 ;;
88 *\ gen_locale\ *)
89 new_locale=$(GET gen_locale) ;;
90 *\ gen_keymap\ *)
91 new_keymap=$(GET gen_keymap) ;;
92 *\ apply_xorg_kbd\ *)
93 sed -i "s/XkbLayout.*/XkbLayout \" \"$(GET apply_xorg_kbd)\"/" \
94 /etc/X11/xorg.conf.d/40-Keyboard.conf ;;
95 *\ style*)
96 sed -i s/'^STYLE.*'/"STYLE=\"$(GET style)\""/ $CONFIG
97 . $CONFIG ;;
98 esac
104 #
105 # Default xHTML content
106 #
108 xhtml_header
109 check_root_tazpanel
111 case " $(GET) " in
112 *\ group*)
113 #
114 # Groups management
115 #
116 cat <<EOT
117 <h2 id="groups">$(_ 'Manage groups')</h2>
120 <section>
121 <form class="wide">
122 <header>
123 <input type="hidden" name="groups"/>
124 <!-- $(_ 'Selection:') -->
125 <button name="do" value="delgroups" data-icon="delete">$(_ 'Delete group')</button>
126 </header>
128 <div class="scroll">
129 <table class="wide zebra scroll">
130 <thead>
131 <tr class="thead">
132 <td>$(_ 'Group')</td>
133 <td>$(_ 'Group ID')</td>
134 <td>$(_ 'Members')</td>
135 </tr>
136 </thead>
137 <tbody>
138 EOT
139 for group in $(getdb group | cut -d ":" -f 1); do
140 IFS=':'
141 set -- $(getdb group | grep "^$group:")
142 unset IFS
143 gid=$3
144 members=$4
145 cat <<EOT
146 <tr>
147 <td><input type="checkbox" name="group" value="$group" id="$group"/>
148 <label for="$group" data-icon="group">$group</label></td>
149 <td>$gid</td>
150 <td>${members//,/, }</td>
151 </tr>
152 EOT
153 done
154 cat <<EOT
155 </tbody>
156 </table>
157 </div>
158 </form>
159 </section>
162 <section>
163 <header>$(_ 'Add a new group')</header>
164 <form>
165 <input type="hidden" name="groups"/>
166 <table>
167 <tr><td>$(_ 'Group name:')</td>
168 <td><input type="text" name="group"/></td>
169 </tr>
170 <tr><td colspan="2">
171 <button type="submit" name="do" value="addgroup" data-icon="add">$(_ 'Create group')</button>
172 </td></tr>
173 </table>
174 </form>
175 </section>
178 <section>
179 <header>$(_ 'Manage group membership')</header>
180 <form>
181 <input type="hidden" name="groups"/>
182 <table>
183 <tr>
184 <td>$(_ 'Group name:')</td>
185 <td><select name="group">$(listdb group)</select></td>
186 <td>$(_ 'User name:')</td>
187 <td><select name="member">$(listdb passwd)</select></td>
188 </tr>
189 <tr>
190 <td colspan="2">
191 <button name="do" value="addmember" data-icon="add">$(_ 'Add user')</button>
192 </td>
193 <td colspan="2">
194 <button name="do" value="delmember" data-icon="delete">$(_ 'Remove user')</button>
195 </td>
196 </tr>
197 </table>
198 </form>
199 </section>
201 EOT
202 ;;
205 *\ user*)
206 #
207 # Users management
208 #
209 cat <<EOT
210 <h2 id="users">$(_ 'Manage users')</h2>
212 <section>
213 <form class="wide">
214 <header>
215 <!--$(_ 'Selection:')-->
216 <button name="do" value="delusers" data-icon="delete">$(_ 'Delete user')</button>
217 <button name="do" value="lockusers" data-icon="lock" >$(_ 'Lock user' )</button>
218 <button name="do" value="unlockusers" data-icon="unlock">$(_ 'Unlock user')</button>
219 </header>
221 <table class="wide zebra center">
222 <thead>
223 <tr>
224 <td>$(_ 'Login')</td>
225 <td>$(_ 'User ID')</td>
226 <td>$(_ 'Name')</td>
227 <td>$(_ 'Home')</td>
228 <td>$(_ 'Shell')</td>
229 </tr>
230 </thead>
231 </tbody>
232 EOT
233 for login in $(getdb passwd | cut -d ":" -f 1); do
234 if [ -d /home/$login ]; then
235 colorlogin=$login
236 grep -qs "^$login:!" /etc/shadow &&
237 colorlogin="<span style='color: red;'>$login</span>"
238 IFS=':'
239 set -- $(getdb passwd | grep "^$login:")
240 unset IFS
241 cat <<EOT
242 <tr>
243 <td style="white-space: nowrap">
244 <input type="checkbox" name="user" value="$login" id="$login"/>
245 <label for="$login" data-icon="user">$colorlogin</label></td>
246 <td>$3:$4</td>
247 <td>$(echo $5 | sed s/,.*//)</td>
248 <td>$6</td>
249 <td>$7</td>
250 </tr>
251 EOT
252 fi
253 done
254 cat <<EOT
255 </tbody>
256 </table>
257 EOT
258 cat <<EOT
259 <footer>
260 <div>
261 $(_ 'Password:')
262 <input type="password" name="password"/>
263 <button type="submit" name="do" value="chpasswd" data-icon="ok">$(_ 'Change password')</button>
264 </div>
265 </footer>
266 </form>
267 </section>
270 <section>
271 <header>$(_ 'Add a new user')</header>
273 <form>
274 <input type="hidden" name="users"/>
275 <table class="summary">
276 <tr><td>$(_ 'User login:')</td>
277 <td><input type="text" name="user" size="30" pattern="[a-z]*"/></td></tr>
278 <tr><td>$(_ 'User name:')</td>
279 <td><input type="text" name="name" size="30"/></td></tr>
280 <tr><td>$(_ 'User password:')</td>
281 <td><input type="password" name="passwd" size="30"/></td></tr>
282 </table>
284 <footer>
285 <button type="submit" name="do" value="adduser" data-icon="add">$(_ 'Create user')</button>
286 </footer>
287 </form>
288 </section>
291 <section>
292 <header>$(_ 'Current user sessions')</header>
293 <pre>$(who)</pre>
294 </section>
297 <section>
298 <header>$(_ 'Last user sessions')</header>
299 <div class="scroll"><pre>$(last)</pre></div>
300 </section>
301 EOT
302 ;;
305 *\ locale*)
306 #
307 # Choose locale
308 #
309 LOADING_MSG="$(_ 'Please wait...')"; loading_msg
311 cur_loc=$(locale | grep LANG | cut -d= -f2)
312 cat <<EOT
313 <h2 id="locale">$(_ 'Choose locale')</h2>
315 <section>
316 <header>$(_ 'Current locale settings:')</header>
317 <div>
318 <pre>$(locale)</pre>
319 </div>
320 </section>
322 <section>
323 <header>$(_ 'Locales that are currently installed on the machine:')</header>
324 <div>
325 <pre>$(locale -a)</pre>
326 </div>
327 </section>
328 EOT
330 is_installed "glibc-locale"
331 [ $? = 1 ] &&
332 msg tip $(_ \
333 "Can't see your language?<br/>You can \
334 <a href='pkgs.cgi?do=Install&amp;glibc-locale'>install glibc-locale</a> \
335 to see a larger list of available locales.")
338 cat <<EOT
339 <section>
340 <header>$(_ 'Available locales:')</header>
341 <form class="wide">
342 <table class="wide zebra">
343 <thead>
344 <tr><td>$(_ 'Code')</td>
345 <td>$(_ 'Language')</td>
346 <td>$(_ 'Territory')</td>
347 <td>$(_ 'Description')</td>
348 </tr>
349 </thead>
350 <tbody>
351 EOT
352 for locale in $(find /usr/share/i18n/locales -type f | sort); do
353 locale_name=$(basename $locale)
354 locale_title=$(grep -m 1 -e '^ *title' $locale | cut -d'"' -f2)
355 if [ -n "$locale_title" ]; then
356 sel=''; [ "$locale_name" == "$cur_loc" ] && sel='checked="checked"'
357 cat <<EOT
358 <tr>
359 <td>
360 <input type="radio" name="gen_locale" value="$locale_name" $sel id="$locale_name"/>
361 <label for="$locale_name">$locale_name</label>
362 </td>
363 <td>$(gettext -d iso_639 "$(grep -m 1 -e '^ *language' $locale | cut -d '"' -f2)")</td>
364 <td>$(gettext -d iso_3166 "$(grep -m 1 -e '^ *territory' $locale | cut -d '"' -f2)")</td>
365 <td>$locale_title</td>
366 </tr>
367 EOT
368 fi
369 done
370 cat <<EOT
371 </tbody>
372 </table>
374 <footer>
375 <button type="submit" data-icon="ok">$(_ 'Activate')</button>
376 </footer>
377 </form>
378 </section>
379 EOT
380 ;;
383 *)
384 #
385 # Default system settings page
386 #
388 cat <<EOT
389 <h2>$(_ 'System settings')</h2>
391 <p>$(_ 'Manage system time, users or language settings')<p>
393 <form><!--
394 --><button name="users" data-icon="user" >$(_ 'Manage users' )</button><!--
395 --><button name="groups" data-icon="group">$(_ 'Manage groups')</button>
396 </form>
398 <section>
399 <header>$(_ 'System time')</header>
400 <div>
401 <form class="wide">
402 <fieldset><legend>$(_ 'Time zone:')</legend>
403 <select name="tz">
404 $(cd /usr/share/zoneinfo; find * -type f ! -name '*.tab' | sort | \
405 awk -vtz="$(cat /etc/TZ)" \
406 '{printf("<option%s>%s</option>", ($1 == tz)?" selected":"", $1)}')
407 </select>
408 <button name="do" value="settz" data-icon="ok">$(_ 'Change')</button>
409 </fieldset>
411 <fieldset><legend>$(_ 'System time:')</legend>
412 $(date | sed 's|[0-9][0-9]:[0-9:]*|<span id="time">&</span>|')
413 <button name="do" value="rdate" data-icon="sync">$(_ 'Sync online')</button>
414 </fieldset>
416 <fieldset id="hwclock1"><legend>$(_ 'Hardware clock:')</legend>
417 $(hwclock -ur | sed 's|0.000000 seconds||')
418 <button name="do" value="hwclock" id="hwclock" data-icon="clock">$(_ 'Set hardware clock')</button>
419 </fieldset>
421 <fieldset><legend>$(_ 'Set date')</legend>
422 <input type="number" name="day" value="$(date +%d)" min="1" max="31" size="4" required/>
423 <select name="month" value="$(date +%m)">
424 $(for i in $(seq 12); do
425 sel=''; [ "$i" == "$(date +%-m)" ] && sel=' selected'
426 printf "<option value=\"%s\"$sel>%s</option>" $(date -d $i.01-01:01 '+%m %B')
427 done)
428 </select>
429 <input type="number" name="year" value="$(date +%Y)" min="2015" max="2030" size="6" required/>
430 - <input type="number" name="hour" value="$(date +%H)" min="0" max="23" size="4" required/><!--
431 -->:<input type="number" name="min" value="$(date +%M)" min="0" max="59" size="4" required/><!--
432 -->:<input type="number" name="sec" value="00" min="0" max="59" size="4" required/>
433 <button name="do" value="date" data-icon="ok">$(_ 'Set date')</button>
434 </fieldset>
435 </form>
436 </div>
438 <script type="text/javascript">
439 // Live time on page
440 Date.prototype.timeNow = function() {
441 return ((this.getHours() < 10)?"0":"") + this.getHours() + ":" + ((this.getMinutes() < 10)?"0":"") + this.getMinutes() + ":" + ((this.getSeconds() < 10)?"0":"") + this.getSeconds();
442 }
443 setInterval(function(){document.getElementById('time').innerText = new Date().timeNow()}, 1000);
445 //document.getElementById('hwclock').disabled = 'disabled';
446 </script>
447 </section>
448 EOT
451 #
452 # Locale settings
453 #
454 cat <<EOT
455 <section>
456 <header id="locale">$(_ 'System language')</header>
457 <div>
458 <form>
459 EOT
460 # Check if a new locale was requested
461 if [ -n "$new_locale" ]; then
462 rm -rf /usr/lib/locale/$new_locale
463 localedef -i $new_locale -c -f UTF-8 \
464 /usr/lib/locale/$new_locale
465 # System configuration
466 echo "LANG=$new_locale" > /etc/locale.conf
467 echo "LC_ALL=$new_locale" >> /etc/locale.conf
468 msg warn "$(_ \
469 'You must logout and login again to your current session to use %s locale.' $new_locale)"
470 else
471 cat <<EOT
472 $(_ 'Current system locale:')
473 <strong>$(locale | grep LANG | cut -d= -f2)</strong>
474 <button name="locale" data-icon="locale">$(_ 'Change')</button>
475 EOT
476 fi
477 cat <<EOT
478 </div>
479 </form>
480 </section>
483 <section>
484 <header id="keymap">$(_ 'Keyboard layout')</header>
485 <div>
486 EOT
487 # Check if a new keymap was requested
488 if [ -n "$new_keymap" ]; then
489 echo "$new_keymap" > /etc/keymap.conf
490 if [ -x /bin/loadkeys ]; then
491 loadkeys $new_keymap
492 else
493 loadkmap < /usr/share/kmap/$new_keymap.kmap
494 fi
495 fi
497 keymap=$(cat /etc/keymap.conf)
498 _ 'Current console keymap: %s' $keymap
499 if [ -n "$keymap" ]; then
500 case "$keymap" in
501 fr_CH*)
502 keymap="ch" ;;
503 ru)
504 keymap="us,ru" ;;
505 slovene)
506 keymap=si ;;
507 *)
508 keymap=${keymap%-lat*}
509 keymap=${keymap%-abnt2} ;;
510 esac
511 keyboard_config=/etc/X11/xorg.conf.d/40-Keyboard.conf
512 cat <<EOT
513 <form id="settings"></form>
514 <form id="index" action="index.cgi"></form>
515 <br/>
516 $(_ 'Suggested keymap for Xorg:') $keymap
517 <button form="settings" name="apply_xorg_kbd" value="$keymap" data-icon="ok">$(_ 'Activate')</button>
518 <button form="index" name="file" value="$keyboard_config" data-icon="edit">$(_ 'Edit')</button>
519 <br/>
520 EOT
521 fi
522 cat <<EOT
523 <form>
524 $(_ 'Available keymaps:')
525 <select name="gen_keymap">
526 $(list_keymaps)
527 </select>
528 <button type="submit" data-icon="ok">$(_ 'Activate')</button>
529 </form>
530 </div>
531 </section>
534 <section>
535 <header>$(_ 'Panel configuration')</header>
536 <div>
537 <form class="wide">
538 <fieldset><legend>$(_ 'Style:')</legend>
539 <select name="style">$(list_styles)</select>
540 <button data-icon="ok">$(_ 'Activate')</button>
541 </fieldset>
542 </form>
544 <fieldset><legend>$(_ 'Configuration files:')</legend>
545 <button form="index" name="file" value="$CONFIG" data-icon="edit">$(_ 'Panel')</button>
546 <button form="index" name="file" value="$HTTPD_CONF" data-icon="edit">$(_ 'Server')</button>
547 </fieldset>
549 <p>$(_ 'TazPanel provides a debugging mode and page:')
550 <a href="index.cgi?debug">debug</a>
551 </p>
552 </div>
553 </section>
554 EOT
555 ;;
556 esac
558 xhtml_footer
559 exit 0