moved "Rank" attribute from language file to plugin code

added plugin "plugin_manager"
added plugin "user_manager"
This commit is contained in:
lars 2006-10-11 15:50:24 +00:00
parent ee82f91a64
commit 11c2873934
28 changed files with 368 additions and 21 deletions

View file

@ -0,0 +1,51 @@
Name = User Manager
Link = User Manager
Title {
UserManager = Manage users
AddUser = Add new user
DelUser = Remove user
ChangePassword = Change password
}
Button {
AddUser = Add new user
DelUser = Remove
ChangePassword = Change password
}
Text {
NewUser = Name of the new user
DelUser = User to remove
ChangePasswordUser = Change user's password
}
SuccessMessage {
UserAdded {
Title = User added
Text = The new user was added successfully.
}
UserRemoved {
Title = User removed
Text = The user was removed successfully.
}
PasswordChanged {
Title = Password changed
Text = The password was changed successfully.
}
}
WarningMessage {
InvalidUserName {
Title = Invalid username
Text = The choosen username is invalid: only letters and digits are allowed.
}
UserAlreadyExists {
Title = User exists
Text = The choosen username does already exist. Please choose another one.
}
}

View file

@ -0,0 +1,80 @@
<?cs # $Id$ ?>
<style type="text/css">
td.left_column {
text-align:right;
padding-left:30px;
padding-right:5px;
}
</style>
<h1><?cs var:html_escape(Lang.Plugins.user_manager.Title.UserManager) ?></h1>
<h2><?cs var:html_escape(Lang.Plugins.user_manager.Title.AddUser) ?></h2>
<p>
<?cs call:print_form_header("plugins/user_manager") ?>
<table>
<tr><td class="left_column">
<label for="new_user"><?cs var:html_escape(Lang.Plugins.user_manager.Text.NewUser) ?>:</label></td>
<td><input id="new_user" type="text" name="user" size="12" /></td>
<td></td></tr>
<tr><td class="left_column">
<label for="new_pw"><?cs var:html_escape(Lang.Text.EnterNewPassword) ?>:</label></td>
<td><input id="new_pw" type="password" name="new_pw" size="12" /></td>
<td></td></tr>
<tr><td class="left_column">
<label for="new_pw2"><?cs var:html_escape(Lang.Text.EnterSamePassword) ?>:</label></td>
<td><input id="new_pw2" type="password" name="new_pw2" size="12" /></td>
<td>
<input type="hidden" name="store" value="add_user" />
<button type="submit"><?cs var:html_escape(Lang.Plugins.user_manager.Button.AddUser) ?></button></td></tr>
</table>
</form>
</p>
<h2><?cs var:html_escape(Lang.Plugins.user_manager.Title.ChangePassword) ?></h2>
<p>
<?cs call:print_form_header("plugins/user_manager") ?>
<table>
<tr><td class="left_column">
<label for="chpw_user"><?cs var:html_escape(Lang.Plugins.user_manager.Text.ChangePasswordUser) ?>:</label></td>
<td style="text-align:left"><select id="user" name="user" size="0">
<?cs each:x=Data.Plugins.user_manager.Users ?>
<option><?cs var:html_escape(x) ?></option>
<?cs /each ?></select></td>
<td></td></tr>
<tr><td class="left_column">
<label for="new_pw"><?cs var:html_escape(Lang.Text.EnterNewPassword) ?>:</label></td>
<td><input id="new_pw" type="password" name="new_pw" size="12" /></td>
<td></td></tr>
<tr><td class="left_column">
<label for="new_pw2"><?cs var:html_escape(Lang.Text.EnterSamePassword) ?>:</label></td>
<td><input id="new_pw2" type="password" name="new_pw2" size="12" /></td>
<td>
<input type="hidden" name="store" value="change_password" />
<button type="submit"><?cs var:html_escape(Lang.Plugins.user_manager.Button.ChangePassword) ?></button></td></tr>
</table>
</form>
</p>
<?cs if:subcount(Data.Plugins.user_manager.Users) > 1 ?>
<h2><?cs var:html_escape(Lang.Plugins.user_manager.Title.DelUser) ?></h2>
<p>
<table><tr><td class="left_column">
<?cs call:print_form_header("plugins/user_manager") ?>
<label for="user"><?cs var:html_escape(Lang.Plugins.user_manager.Text.DelUser) ?>: </label><select id="user" name="user" size="0">
<?cs each:x=Data.Plugins.user_manager.Users ?><?cs if:x != "admin" ?>
<option><?cs var:html_escape(x) ?></option>
<?cs /if ?><?cs /each ?>
</select>
<input type="hidden" name="store" value="del_user" />
<button type="submit"><?cs var:html_escape(Lang.Plugins.user_manager.Button.DelUser) ?></button>
</form></td></tr></table>
</p>
<?cs /if ?>

View file

@ -0,0 +1,82 @@
import CryptoBoxPlugin
class user_manager(CryptoBoxPlugin.CryptoBoxPlugin):
pluginCapabilities = [ "system" ]
requestAuth = True
rank = 45
reservedUsers = [ "admin" ]
def doAction(self, store=None, user=None, new_pw=None, new_pw2=None):
import re
adminDict = self.cbox.prefs.userDB["admins"]
self.__cleanHDF()
if store is None:
pass
elif store == "add_user":
if (user is None) or (re.search(u'\W', user)):
self.hdf["Data.Warning"] = "Plugins.user_manager.InvalidUserName"
elif not new_pw:
self.hdf["Data.Warning"] = "EmptyNewPassword"
elif new_pw != new_pw2:
self.hdf["Data.Warning"] = "DifferentPasswords"
elif user in adminDict.keys():
self.hdf["Data.Warning"] = "Plugins.user_manager.UserAlreadyExists"
else:
adminDict[user] = self.cbox.prefs.userDB.getDigest(new_pw)
self.hdf["Data.Success"] = "Plugins.user_manager.UserAdded"
try:
self.cbox.prefs.userDB.write()
except IOError:
self.cbox.log.warn("failed to write user database")
elif store == "change_password":
if not new_pw:
self.hdf["Data.Warning"] = "EmptyNewPassword"
elif new_pw != new_pw2:
self.hdf["Data.Warning"] = "DifferentPasswords"
elif user in adminDict.keys():
adminDict[user] = self.cbox.prefs.userDB.getDigest(new_pw)
self.hdf["Data.Success"] = "Plugins.user_manager.PasswordChanged"
try:
self.cbox.prefs.userDB.write()
except IOError:
self.cbox.log.warn("failed to write user database")
else:
self.cbox.log.info("user_manager: invalid user choosen (%s)" % str(user))
elif store == "del_user":
if user in self.reservedUsers:
self.cbox.log.info("user_manager: tried to remove reserved user (%s)" % user)
elif user in adminDict.keys():
del adminDict[user]
self.hdf["Data.Success"] = "Plugins.user_manager.UserAdded"
try:
self.cbox.prefs.userDB.write()
except IOError:
self.cbox.log.warn("failed to write user database")
else:
self.cbox.log.info("user_manager: tried to remove non-existing user (%s)" % str(user))
else:
self.cbox.log.info("user_manager: invalid value of 'store' (%s)" % store)
self.__prepareHDF(adminDict)
return "user_list"
def getStatus(self):
return str(self.cbox.prefs.userDB["admins"].keys())
def __cleanHDF(self):
for key in self.hdf.keys():
del self.hdf[key]
def __prepareHDF(self, dict):
## sort by name
users = dict.keys()
users.sort()
## export all users
for name in users:
self.hdf[self.hdf_prefix + "Users." + name] = name