moved "Rank" attribute from language file to plugin code
added plugin "plugin_manager" added plugin "user_manager"
This commit is contained in:
parent
ee82f91a64
commit
11c2873934
28 changed files with 368 additions and 21 deletions
51
pythonrewrite/plugins/user_manager/lang/en.hdf
Normal file
51
pythonrewrite/plugins/user_manager/lang/en.hdf
Normal 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.
|
||||
}
|
||||
}
|
80
pythonrewrite/plugins/user_manager/user_list.cs
Normal file
80
pythonrewrite/plugins/user_manager/user_list.cs
Normal 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 ?>
|
||||
|
82
pythonrewrite/plugins/user_manager/user_manager.py
Normal file
82
pythonrewrite/plugins/user_manager/user_manager.py
Normal 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
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue