From 11c287393431ba75e769efebbd59424482a2ddcd Mon Sep 17 00:00:00 2001
From: lars
Date: Wed, 11 Oct 2006 15:50:24 +0000
Subject: [PATCH] moved "Rank" attribute from language file to plugin code
added plugin "plugin_manager" added plugin "user_manager"
---
pythonrewrite/plugins/date/date.py | 1 +
pythonrewrite/plugins/date/lang/en.hdf | 1 -
pythonrewrite/plugins/format_fs/format_fs.py | 5 +-
pythonrewrite/plugins/format_fs/lang/en.hdf | 1 -
.../plugins/format_fs/volume_format_luks.cs | 4 +-
pythonrewrite/plugins/logs/lang/en.hdf | 1 -
pythonrewrite/plugins/logs/logs.py | 1 +
pythonrewrite/plugins/network/lang/en.hdf | 1 -
pythonrewrite/plugins/network/network.py | 1 +
pythonrewrite/plugins/partition/lang/en.hdf | 1 -
pythonrewrite/plugins/partition/partition.py | 1 +
pythonrewrite/plugins/plugin-interface.txt | 3 +
.../plugins/plugin_manager/lang/en.hdf | 15 ++++
.../plugins/plugin_manager/plugin_list.cs | 64 +++++++++++++++
.../plugins/plugin_manager/plugin_manager.py | 52 ++++++++++++
pythonrewrite/plugins/shutdown/lang/en.hdf | 1 -
pythonrewrite/plugins/shutdown/shutdown.py | 1 +
.../plugins/user_manager/lang/en.hdf | 51 ++++++++++++
.../plugins/user_manager/user_list.cs | 80 ++++++++++++++++++
.../plugins/user_manager/user_manager.py | 82 +++++++++++++++++++
.../plugins/volume_details/lang/en.hdf | 1 -
.../plugins/volume_details/volume_details.py | 1 +
.../plugins/volume_mount/lang/en.hdf | 1 -
.../plugins/volume_mount/volume_mount.cs | 2 +-
.../plugins/volume_mount/volume_mount.py | 3 +-
.../plugins/volume_props/lang/en.hdf | 1 -
.../plugins/volume_props/volume_properties.cs | 6 +-
.../plugins/volume_props/volume_props.py | 7 +-
28 files changed, 368 insertions(+), 21 deletions(-)
create mode 100644 pythonrewrite/plugins/plugin_manager/lang/en.hdf
create mode 100644 pythonrewrite/plugins/plugin_manager/plugin_list.cs
create mode 100644 pythonrewrite/plugins/plugin_manager/plugin_manager.py
create mode 100644 pythonrewrite/plugins/user_manager/lang/en.hdf
create mode 100644 pythonrewrite/plugins/user_manager/user_list.cs
create mode 100644 pythonrewrite/plugins/user_manager/user_manager.py
diff --git a/pythonrewrite/plugins/date/date.py b/pythonrewrite/plugins/date/date.py
index a44ed0d..f726d9c 100644
--- a/pythonrewrite/plugins/date/date.py
+++ b/pythonrewrite/plugins/date/date.py
@@ -5,6 +5,7 @@ class date(CryptoBoxPlugin.CryptoBoxPlugin):
pluginCapabilities = [ "system" ]
requestAuth = False
+ rank = 10
def doAction(self, store=None, year=0, month=0, day=0, hour=0, minute=0):
import datetime
diff --git a/pythonrewrite/plugins/date/lang/en.hdf b/pythonrewrite/plugins/date/lang/en.hdf
index a9c9fb0..df00df5 100644
--- a/pythonrewrite/plugins/date/lang/en.hdf
+++ b/pythonrewrite/plugins/date/lang/en.hdf
@@ -1,6 +1,5 @@
Name = Change date and time
Link = Set date/time
-Rank = 10
Title.ConfigDate = Date and time setting
diff --git a/pythonrewrite/plugins/format_fs/format_fs.py b/pythonrewrite/plugins/format_fs/format_fs.py
index cd32640..d579fbb 100644
--- a/pythonrewrite/plugins/format_fs/format_fs.py
+++ b/pythonrewrite/plugins/format_fs/format_fs.py
@@ -4,6 +4,7 @@ class format_fs(CryptoBoxPlugin.CryptoBoxPlugin):
pluginCapabilities = [ "volume" ]
requestAuth = True
+ rank = 60
## map filesystem types to the appropriate arguments for 'mkfs'
fsTypes = {
@@ -67,11 +68,11 @@ class format_fs(CryptoBoxPlugin.CryptoBoxPlugin):
def __format_luks(self, fsType, pw, pw2):
if not pw:
- self.hdf["Data.Warning"] = "EmptyCryptoPassword"
+ self.hdf["Data.Warning"] = "EmptyPassword"
self.cbox.log.warn("no crypto password was supplied for initialization of device '%s'" % self.device)
return "volume_format"
if pw != pw2:
- self.hdf["Data.Warning"] = "DifferentCryptoPasswords"
+ self.hdf["Data.Warning"] = "DifferentPasswords"
self.cbox.log.warn("the crypto password was not repeated correctly for initialization of device '%s'" % self.device)
return "volume_format"
container = self.cbox.getContainer(self.device)
diff --git a/pythonrewrite/plugins/format_fs/lang/en.hdf b/pythonrewrite/plugins/format_fs/lang/en.hdf
index a9c8822..fc3d7fe 100644
--- a/pythonrewrite/plugins/format_fs/lang/en.hdf
+++ b/pythonrewrite/plugins/format_fs/lang/en.hdf
@@ -1,6 +1,5 @@
Name = Create filesystems
Link = Format
-Rank = 60
Title.Format = Initializing filesystem
diff --git a/pythonrewrite/plugins/format_fs/volume_format_luks.cs b/pythonrewrite/plugins/format_fs/volume_format_luks.cs
index c610e71..d2ecc75 100644
--- a/pythonrewrite/plugins/format_fs/volume_format_luks.cs
+++ b/pythonrewrite/plugins/format_fs/volume_format_luks.cs
@@ -19,8 +19,8 @@
var:html_escape(Lang.Plugins.format_fs.Text.Yes) ?>
-
-
+
+
diff --git a/pythonrewrite/plugins/logs/lang/en.hdf b/pythonrewrite/plugins/logs/lang/en.hdf
index 58e8d50..c81fbc4 100644
--- a/pythonrewrite/plugins/logs/lang/en.hdf
+++ b/pythonrewrite/plugins/logs/lang/en.hdf
@@ -1,6 +1,5 @@
Name = Show the content of the log file
Link = Show log file
-Rank = 90
Title.Log = CryptoBox logfiles
diff --git a/pythonrewrite/plugins/logs/logs.py b/pythonrewrite/plugins/logs/logs.py
index cb4d76d..683056a 100644
--- a/pythonrewrite/plugins/logs/logs.py
+++ b/pythonrewrite/plugins/logs/logs.py
@@ -5,6 +5,7 @@ class logs(CryptoBoxPlugin.CryptoBoxPlugin):
pluginCapabilities = [ "system" ]
requestAuth = False
+ rank = 90
def doAction(self):
self.__prepareFormData()
diff --git a/pythonrewrite/plugins/network/lang/en.hdf b/pythonrewrite/plugins/network/lang/en.hdf
index 4fef621..0828755 100644
--- a/pythonrewrite/plugins/network/lang/en.hdf
+++ b/pythonrewrite/plugins/network/lang/en.hdf
@@ -1,6 +1,5 @@
Name = Configure network
Link = Configure network
-Rank = 30
Title.Network = Network settings
diff --git a/pythonrewrite/plugins/network/network.py b/pythonrewrite/plugins/network/network.py
index 02478b2..d6b4b30 100644
--- a/pythonrewrite/plugins/network/network.py
+++ b/pythonrewrite/plugins/network/network.py
@@ -10,6 +10,7 @@ class network(CryptoBoxPlugin.CryptoBoxPlugin):
pluginCapabilities = [ "system" ]
requestAuth = True
+ rank = 30
def doAction(self, store=None, redirected="", ip1="", ip2="", ip3="", ip4=""):
## if we were redirected, then we should display the default page
diff --git a/pythonrewrite/plugins/partition/lang/en.hdf b/pythonrewrite/plugins/partition/lang/en.hdf
index 07222d5..b25e841 100644
--- a/pythonrewrite/plugins/partition/lang/en.hdf
+++ b/pythonrewrite/plugins/partition/lang/en.hdf
@@ -1,6 +1,5 @@
Name = Disk partitioning
Link = Disk partitioning
-Rank = 80
Title.Partition = Disk partitions
diff --git a/pythonrewrite/plugins/partition/partition.py b/pythonrewrite/plugins/partition/partition.py
index 5e2ce03..a28887b 100644
--- a/pythonrewrite/plugins/partition/partition.py
+++ b/pythonrewrite/plugins/partition/partition.py
@@ -8,6 +8,7 @@ class partition(CryptoBoxPlugin.CryptoBoxPlugin):
pluginCapabilities = [ "system" ]
requestAuth = True
+ rank = 80
PartTypes = {
"windows" : ["0xC", "vfat"],
diff --git a/pythonrewrite/plugins/plugin-interface.txt b/pythonrewrite/plugins/plugin-interface.txt
index 50cec84..7431b0e 100644
--- a/pythonrewrite/plugins/plugin-interface.txt
+++ b/pythonrewrite/plugins/plugin-interface.txt
@@ -29,6 +29,9 @@ Python code interface:
"volume")
- the class variable "requestAuth" is boolean and defines, if admin authentication is necessary
for this plugin
+ - the class variable "rank" is an integer in the range of 0..100 - it determines the order
+ of plugins in listings (lower value -> higher priority)
+ - the class variable "enabled" is boolean and detemines the default availability of the plugin
- volume plugins contain the attribute "device" (you may trust this value - a volume plugin will
never get called with an invalid device)
diff --git a/pythonrewrite/plugins/plugin_manager/lang/en.hdf b/pythonrewrite/plugins/plugin_manager/lang/en.hdf
new file mode 100644
index 0000000..07cb05a
--- /dev/null
+++ b/pythonrewrite/plugins/plugin_manager/lang/en.hdf
@@ -0,0 +1,15 @@
+Name = Plugin Manager
+Link = Plugin Manager
+
+Title.PluginManager = Plugin Manager
+
+Button.SaveSettings = Save settings
+
+Text {
+ PluginName = Plugin
+ PluginRank = Priority
+ PluginEnabled = Enabled?
+ RequestsAuth = Requires admin?
+ VolumePlugins = Volume plugins
+ SystemPlugins = System plugins
+}
diff --git a/pythonrewrite/plugins/plugin_manager/plugin_list.cs b/pythonrewrite/plugins/plugin_manager/plugin_list.cs
new file mode 100644
index 0000000..c384da1
--- /dev/null
+++ b/pythonrewrite/plugins/plugin_manager/plugin_list.cs
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pythonrewrite/plugins/plugin_manager/plugin_manager.py b/pythonrewrite/plugins/plugin_manager/plugin_manager.py
new file mode 100644
index 0000000..3b6a839
--- /dev/null
+++ b/pythonrewrite/plugins/plugin_manager/plugin_manager.py
@@ -0,0 +1,52 @@
+import CryptoBoxPlugin
+
+
+class plugin_manager(CryptoBoxPlugin.CryptoBoxPlugin):
+
+ pluginCapabilities = [ "system" ]
+ requestAuth = True
+ rank = 90
+
+ def doAction(self, store=None, **args):
+ import re
+ if store:
+ for key in args.keys():
+ if key.endswith("_listed"):
+ if not re.search(u'\W',key):
+ self.__setConfig(key[:-7], args)
+ else:
+ self.cbox.log.info("plugin_manager: invalid plugin name (%s)" % str(key[:-7]))
+ try:
+ self.cbox.prefs.pluginConf.write()
+ except IOError:
+ self.cbox.log.warn("failed to write plugin configuration")
+ return "plugin_list"
+
+
+ def getStatus(self):
+ return "no status"
+
+
+ def __setConfig(self, name, args):
+ setting = {}
+ setting["enabled"] = False
+ try:
+ if args[name + "_enabled"]:
+ setting["enabled"] = True
+ except KeyError:
+ pass
+ setting["rank"] = "80"
+ try:
+ r = int(args[name + "_rank"])
+ if r>=0 and r<=100:
+ setting["rank"] = r
+ except KeyError, ValueError:
+ pass
+ setting["requestAuth"] = False
+ try:
+ if args[name + "_auth"]:
+ setting["requestAuth"] = True
+ except KeyError, ValueError:
+ pass
+ self.cbox.prefs.pluginConf[name] = setting
+
diff --git a/pythonrewrite/plugins/shutdown/lang/en.hdf b/pythonrewrite/plugins/shutdown/lang/en.hdf
index 0a9efe2..fc9ba52 100644
--- a/pythonrewrite/plugins/shutdown/lang/en.hdf
+++ b/pythonrewrite/plugins/shutdown/lang/en.hdf
@@ -1,6 +1,5 @@
Name = Shutdown or reboot the computer
Link = Shutdown/Reboot
-Rank = 70
Title.Shutdown = Shutdown computer
diff --git a/pythonrewrite/plugins/shutdown/shutdown.py b/pythonrewrite/plugins/shutdown/shutdown.py
index bd40e38..fa36879 100644
--- a/pythonrewrite/plugins/shutdown/shutdown.py
+++ b/pythonrewrite/plugins/shutdown/shutdown.py
@@ -6,6 +6,7 @@ class shutdown(CryptoBoxPlugin.CryptoBoxPlugin):
pluginCapabilities = [ "system" ]
requestAuth = False
+ rank = 70
def doAction(self, type=None):
if not type:
diff --git a/pythonrewrite/plugins/user_manager/lang/en.hdf b/pythonrewrite/plugins/user_manager/lang/en.hdf
new file mode 100644
index 0000000..548b81b
--- /dev/null
+++ b/pythonrewrite/plugins/user_manager/lang/en.hdf
@@ -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.
+ }
+}
diff --git a/pythonrewrite/plugins/user_manager/user_list.cs b/pythonrewrite/plugins/user_manager/user_list.cs
new file mode 100644
index 0000000..72ade6f
--- /dev/null
+++ b/pythonrewrite/plugins/user_manager/user_list.cs
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1 ?>
+
+
+
+
+
+
diff --git a/pythonrewrite/plugins/user_manager/user_manager.py b/pythonrewrite/plugins/user_manager/user_manager.py
new file mode 100644
index 0000000..ded675a
--- /dev/null
+++ b/pythonrewrite/plugins/user_manager/user_manager.py
@@ -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
+
diff --git a/pythonrewrite/plugins/volume_details/lang/en.hdf b/pythonrewrite/plugins/volume_details/lang/en.hdf
index f6c81ac..36a95ca 100644
--- a/pythonrewrite/plugins/volume_details/lang/en.hdf
+++ b/pythonrewrite/plugins/volume_details/lang/en.hdf
@@ -1,6 +1,5 @@
Name = Technical details of a volume
Link = Details
-Rank = 100
Title.Details = Technical details
diff --git a/pythonrewrite/plugins/volume_details/volume_details.py b/pythonrewrite/plugins/volume_details/volume_details.py
index 7354639..40d82db 100644
--- a/pythonrewrite/plugins/volume_details/volume_details.py
+++ b/pythonrewrite/plugins/volume_details/volume_details.py
@@ -5,6 +5,7 @@ class volume_details(CryptoBoxPlugin.CryptoBoxPlugin):
pluginCapabilities = [ "volume" ]
requestAuth = False
+ rank = 100
def doAction(self):
diff --git a/pythonrewrite/plugins/volume_mount/lang/en.hdf b/pythonrewrite/plugins/volume_mount/lang/en.hdf
index 4cc9c87..92b71f0 100644
--- a/pythonrewrite/plugins/volume_mount/lang/en.hdf
+++ b/pythonrewrite/plugins/volume_mount/lang/en.hdf
@@ -1,6 +1,5 @@
Name = Mount and umount volumes
Link = Main
-Rank = 0
Title {
diff --git a/pythonrewrite/plugins/volume_mount/volume_mount.cs b/pythonrewrite/plugins/volume_mount/volume_mount.cs
index 03ffad0..5cf5a1c 100644
--- a/pythonrewrite/plugins/volume_mount/volume_mount.cs
+++ b/pythonrewrite/plugins/volume_mount/volume_mount.cs
@@ -8,7 +8,7 @@
-
+
diff --git a/pythonrewrite/plugins/volume_mount/volume_mount.py b/pythonrewrite/plugins/volume_mount/volume_mount.py
index 1774274..c6c0e6b 100644
--- a/pythonrewrite/plugins/volume_mount/volume_mount.py
+++ b/pythonrewrite/plugins/volume_mount/volume_mount.py
@@ -6,6 +6,7 @@ class volume_mount(CryptoBoxPlugin.CryptoBoxPlugin):
pluginCapabilities = [ "volume" ]
requestAuth = False
+ rank = 0
def doAction(self, action=None, pw=None):
@@ -63,7 +64,7 @@ class volume_mount(CryptoBoxPlugin.CryptoBoxPlugin):
self.cbox.log.info("the device (%s) is already mounted" % device)
return "volume_status"
if not pw:
- self.dataset["Data.Warning"] = "EmptyCryptoPassword"
+ self.dataset["Data.Warning"] = "EmptyPassword"
self.log.info("no password was supplied for mounting of device: '%s'" % device)
return "volume_status"
if self.container.getType() != self.container.Types["luks"]:
diff --git a/pythonrewrite/plugins/volume_props/lang/en.hdf b/pythonrewrite/plugins/volume_props/lang/en.hdf
index fbcd1d8..c7b9863 100644
--- a/pythonrewrite/plugins/volume_props/lang/en.hdf
+++ b/pythonrewrite/plugins/volume_props/lang/en.hdf
@@ -1,6 +1,5 @@
Name = Volume properties
Link = Properties
-Rank = 40
Title {
Properties = Properties
diff --git a/pythonrewrite/plugins/volume_props/volume_properties.cs b/pythonrewrite/plugins/volume_props/volume_properties.cs
index b6f3d71..9ae88b4 100644
--- a/pythonrewrite/plugins/volume_props/volume_properties.cs
+++ b/pythonrewrite/plugins/volume_props/volume_properties.cs
@@ -35,17 +35,17 @@
- |
+ |
|
|
- |
+ |
|
|
- |
+ |
|
diff --git a/pythonrewrite/plugins/volume_props/volume_props.py b/pythonrewrite/plugins/volume_props/volume_props.py
index e99ef16..605dc75 100644
--- a/pythonrewrite/plugins/volume_props/volume_props.py
+++ b/pythonrewrite/plugins/volume_props/volume_props.py
@@ -6,6 +6,7 @@ class volume_props(CryptoBoxPlugin.CryptoBoxPlugin):
pluginCapabilities = [ "volume" ]
requestAuth = False
+ rank = 40
def doAction(self, store=None, vol_name=None, old_pw=None, new_pw=None, new_pw2=None):
@@ -57,11 +58,11 @@ class volume_props(CryptoBoxPlugin.CryptoBoxPlugin):
def __changePassword(self, old_pw, new_pw, new_pw2):
if not old_pw:
- self.hdf["Data.Warning"] = "EmptyCryptoPassword"
+ self.hdf["Data.Warning"] = "EmptyPassword"
elif not new_pw:
- self.hdf["Data.Warning"] = "EmptyNewCryptoPassword"
+ self.hdf["Data.Warning"] = "EmptyNewPassword"
elif new_pw != new_pw2:
- self.hdf["Data.Warning"] = "DifferentCryptoPasswords"
+ self.hdf["Data.Warning"] = "DifferentPasswords"
elif old_pw == new_pw:
## do nothing
pass
|