tinycm annotate plugins/users/users.cgi @ rev 116

Fix in users plugin
author Christophe Lincoln <pankso@slitaz.org>
date Tue Feb 28 22:58:11 2017 +0100 (2017-02-28)
parents 8b4be451eeeb
children 0893f1ab023c
rev   line source
pankso@75 1 #!/bin/sh
pankso@75 2 #
pankso@75 3 # TinyCM/TazBug Plugin - Users profile and admin
pankso@75 4 #
pankso@75 5
pankso@76 6 # Display user public profile.
pankso@76 7 public_people() {
pankso@76 8 echo "</pre>"
pankso@76 9 }
pankso@76 10
pankso@76 11 # Display authenticated user profile. TODO: change password
pankso@76 12 auth_people() {
pankso@76 13 cat << EOT
pankso@76 14 Email : $MAIL
pankso@76 15 </pre>
pankso@92 16
pankso@76 17 <div id="tools">
pankso@113 18 $PROFILE_TOOLS
pankso@77 19 <a href="$script?modprofile">$(gettext "Modify profile")</a>
pankso@76 20 </div>
pankso@76 21 EOT
pankso@76 22 }
pankso@76 23
pankso@101 24 # List last active users. Usage: last_users NB
pankso@101 25 list_last_users() {
pankso@101 26 count=${1}
pankso@101 27 echo "<h3>Last $count active users</h3>"
pankso@101 28 echo "<pre>"
pankso@101 29 find ${PEOPLE} -name "last" | xargs ls -1t | head -n ${count} | while read last;
pankso@101 30 do
pankso@101 31 dir="$(dirname $last)"
pankso@101 32 date="$(cat $last)"
pankso@101 33 u=$(basename $dir)
pankso@101 34 . "${PEOPLE}/${u}/account.conf"
pankso@101 35 cat << EOT
pankso@101 36 $(get_gravatar $MAIL 24) $date : <a href="?user=$u">$u</a> | $NAME
pankso@101 37 EOT
pankso@101 38 done
pankso@101 39 echo "</pre>"
pankso@101 40 }
pankso@101 41
pankso@75 42 case " $(GET) " in
pankso@75 43 *\ users\ *)
pankso@75 44 d="Users"
pankso@75 45 header
pankso@75 46 html_header
pankso@75 47 user_box
pankso@100 48 # Admin only
pankso@100 49 if admin_user; then
pankso@100 50 tools="<a href='$script?userslist'>Users list</a>"
pankso@82 51 fi
pankso@100 52 # Logged users
pankso@100 53 if check_auth; then
pankso@100 54 cat << EOT
pankso@82 55 <div id="tools">
pankso@82 56 <a href="$script?dashboard">Dashboard</a>
pankso@101 57 <a href='$script?lastusers'>Last users</a>
pankso@100 58 $tools
pankso@82 59 </div>
pankso@100 60 <h2>${d}</h2>
pankso@82 61 <pre>
pankso@82 62 User accounts : $(ls -1 $PEOPLE | wc -l)
pankso@83 63 Logged users : $(ls $sessions | wc -l)
pankso@100 64 </pre>
pankso@100 65 EOT
pankso@101 66 list_last_users 5
pankso@100 67
pankso@100 68 # Admin only
pankso@100 69 if admin_user; then
pankso@100 70 cat << EOT
pankso@100 71 <h3>Config paths</h3>
pankso@100 72 <pre>
pankso@82 73 People DB : $PEOPLE
pankso@102 74 Authfile : $AUTH_FILE
pankso@102 75 Admin users : $ADMIN_USERS
pankso@100 76 </pre>
pankso@82 77 EOT
pankso@100 78 # Get the list of administrators
pankso@100 79 echo "<h3>Admin users</h3>"
pankso@102 80 echo "<pre>"
pankso@102 81 for u in $(cat $ADMIN_USERS)
pankso@100 82 do
pankso@102 83 . ${PEOPLE}/${u}/account.conf
pankso@103 84 echo "<a href='?user=$u'>$u</a> - $NAME"
pankso@100 85 done
pankso@102 86 echo "</pre>"
pankso@100 87 fi
pankso@100 88
pankso@100 89 else
paul@105 90 gettext "You must be logged in to check on admin users"
pankso@100 91 fi
pankso@82 92 html_footer && exit 0 ;;
pankso@82 93
pankso@82 94 *\ userslist\ *)
pankso@101 95 # List all users
pankso@82 96 d="Users"
pankso@82 97 header
pankso@82 98 html_header
pankso@82 99 user_box
pankso@82 100 if check_auth && ! admin_user; then
pankso@75 101 gettext "You must be admin to manage users"
pankso@75 102 exit 0
pankso@75 103 fi
pankso@75 104 users=$(ls -1 $PEOPLE | wc -l)
pankso@75 105 cat << EOT
pankso@75 106 <div id="tools">
pankso@75 107 <a href="$script?dashboard">Dashboard</a>
pankso@101 108 <a href="$script?users">Users</a>
pankso@101 109 <a href='$script?lastusers'>Last users</a>
pankso@75 110 </div>
pankso@100 111 <h2>Users: $users</h2>
pankso@101 112 <div id="users">
pankso@101 113 <table>
pankso@101 114 <thead>
pankso@101 115 <td>$(gettext "Username")</td>
pankso@101 116 <td>$(gettext "Action")</td>
pankso@101 117 </thead>
pankso@75 118 EOT
pankso@75 119 for u in $(ls $PEOPLE)
pankso@75 120 do
pankso@75 121 # Skip corrupted accounts
pankso@75 122 if ! [ -f "${PEOPLE}/${u}/account.conf" ]; then
pankso@75 123 echo "${u} : Missing account.conf"
pankso@75 124 continue
pankso@75 125 fi
pankso@75 126 cat << EOT
pankso@101 127 <tr>
pankso@103 128 <td><a href="$script?user=$u">$u</a></td>
pankso@101 129 <td>TODO</td>
pankso@101 130 </tr>
pankso@75 131 EOT
pankso@82 132 # deluser link --> use 'tazu' on SliTaz
pankso@75 133 #: <a href="?users&amp;deluser=$USER">$(gettext "delete")</a>
pankso@75 134 unset NAME USER
pankso@75 135 done
pankso@101 136 echo "</table></div>"
pankso@75 137 html_footer && exit 0 ;;
pankso@75 138
pankso@101 139 *\ lastusers\ *)
pankso@75 140 # Show online users based on sessions files.
pankso@101 141 d="Last users"
pankso@75 142 header
pankso@75 143 html_header
pankso@75 144 user_box
pankso@75 145 if ! check_auth; then
pankso@75 146 gettext "You must be logged in to view online users"
pankso@75 147 exit 0
pankso@75 148 fi
pankso@75 149 cat << EOT
pankso@75 150 <div id="tools">
pankso@75 151 <a href="$script?dashboard">Dashboard</a>
pankso@100 152 <a href="$script?users">Users</a>
pankso@75 153 </div>
pankso@75 154 EOT
pankso@101 155 list_last_users 15
pankso@101 156
pankso@101 157 # Active cookies
pankso@101 158 echo "<h3>Session cookies: $(ls $sessions | wc -l)</h3>"
pankso@101 159 echo "<pre>"
pankso@75 160 for u in $(ls $sessions)
pankso@75 161 do
pankso@75 162 . "${PEOPLE}/${u}/account.conf"
pankso@75 163 cat << EOT
pankso@75 164 $(get_gravatar $MAIL 24) <a href="?user=$USER">$USER</a> | $NAME
pankso@75 165 EOT
pankso@75 166 done
pankso@75 167 echo "</pre>"
pankso@75 168 html_footer && exit 0 ;;
pankso@76 169
pankso@76 170 *\ user\ *)
pankso@76 171 # User profile page
pankso@76 172 d="$(GET user)"
pankso@76 173 last="$(cat $PEOPLE/"$(GET user)"/last)"
pankso@76 174 header
pankso@76 175 html_header
pankso@76 176 user_box
pankso@104 177 account_config="$PEOPLE/$(GET user)/account.conf"
pankso@104 178 profile_config="$PEOPLE/$(GET user)/profile.conf"
pankso@116 179
pankso@107 180 # account.conf
pankso@104 181 if [ ! -f "$account_config" ]; then
pankso@104 182 echo "No user profile for: $(GET user)"
pankso@104 183 html_footer && exit 0
pankso@104 184 else
pankso@104 185 . ${account_config}
pankso@104 186 fi
pankso@116 187
pankso@116 188 # profile.conf
pankso@116 189 if [ -f "$profile_config" ]; then
pankso@106 190 . ${profile_config}
pankso@106 191 fi
pankso@116 192
pankso@106 193 cat << EOT
pankso@76 194 <h2>$(get_gravatar $MAIL) $NAME</h2>
pankso@76 195
pankso@76 196 <pre>
pankso@76 197 $(gettext "User name :") $USER
pankso@76 198 $(gettext "Last login :") $last
pankso@76 199 EOT
pankso@76 200 if check_auth && [ "$(GET user)" == "$user" ]; then
pankso@76 201 auth_people
pankso@76 202 else
pankso@76 203 # check_auth will set VARS to current logged user: re-source
pankso@76 204 . $PEOPLE/"$(GET user)"/account.conf
pankso@76 205 public_people
pankso@76 206 fi
pankso@99 207
pankso@79 208 # Display personal user profile
pankso@79 209 if [ -f "$PEOPLE/$USER/profile.txt" ]; then
pankso@79 210 echo "<h2>$(gettext "About me")</h2>"
pankso@79 211 cat $PEOPLE/$USER/profile.txt | wiki_parser
pankso@79 212 fi
pankso@107 213
pankso@113 214 # Run user.sh that plugins can provide to add content to a profile
pankso@107 215 for script in $(ls $plugins/*/user.sh); do
pankso@107 216 . ${script}
pankso@107 217 done
pankso@107 218
pankso@76 219 html_footer && exit 0 ;;
pankso@76 220
pankso@77 221 *\ modprofile\ *)
paul@80 222 # Let user edit their profile
pankso@76 223 if ! check_auth; then
pankso@76 224 echo "ERROR" && exit 0
pankso@76 225 fi
pankso@76 226 d="$user profile"
pankso@76 227 path=${PEOPLE}/${user}
pankso@76 228 header
pankso@76 229 html_header
pankso@76 230 user_box
pankso@76 231 cat << EOT
pankso@77 232 <h2>$(gettext "User:") $user</h2>
pankso@77 233 <p>$(gettext "Modify your profile settings")
pankso@76 234 <div id="edit">
pankso@76 235
pankso@76 236 <form method="get" action="$script" name="editor">
pankso@78 237 <input type="hidden" name="saveprofile" />
pankso@76 238 <h3>Name</h3>
pankso@76 239 <input type="text" name="name" value="$NAME" />
pankso@76 240 <h3>Email</h3>
pankso@76 241 <input type="text" name="mail" value="$MAIL" />
pankso@76 242 <h3>About you</h3>
pankso@76 243 <textarea name="profile">$(cat "$path/profile.txt")</textarea>
pankso@76 244 <input type="submit" value="$(gettext "Save profile")" />
pankso@76 245 </form>
pankso@76 246
pankso@76 247 </div>
pankso@76 248 EOT
pankso@76 249 html_footer && exit 0 ;;
pankso@76 250
pankso@78 251 *\ saveprofile\ *)
pankso@76 252 # Save a user profile
pankso@76 253 if check_auth; then
pankso@76 254 path="$PEOPLE/$user"
pankso@76 255 sed -i s"/^NAME=.*/NAME=\"$(GET name)\"/" ${path}/account.conf
pankso@76 256 sed -i s"/^MAIL=.*/MAIL=\"$(GET mail)\"/" ${path}/account.conf
pankso@76 257 cp -f ${path}/profile.txt ${path}/profile.bak
pankso@76 258 sed "s/$(echo -en '\r') /\n/g" > ${path}/profile.txt << EOT
pankso@76 259 $(GET profile)
pankso@76 260 EOT
pankso@76 261 header "Location: $script?user=$user"
pankso@76 262 fi && exit 0 ;;
pankso@76 263
pankso@75 264 esac