moved plugin-specific css definitions to the appropriate plugin
cleaned up the error handling of WebInterfaceSites
This commit is contained in:
parent
c95ba55f25
commit
3b0e787d2f
5 changed files with 88 additions and 182 deletions
|
@ -11,6 +11,7 @@ import subprocess
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import logging
|
import logging
|
||||||
|
from CryptoBoxExceptions import *
|
||||||
|
|
||||||
"""exceptions:
|
"""exceptions:
|
||||||
VolumeIsActive
|
VolumeIsActive
|
||||||
|
@ -55,15 +56,15 @@ class CryptoBoxContainer:
|
||||||
def setName(self, new_name):
|
def setName(self, new_name):
|
||||||
if new_name == self.name: return
|
if new_name == self.name: return
|
||||||
if self.isMounted():
|
if self.isMounted():
|
||||||
raise "VolumeIsActive", "the container must be inactive during renaming"
|
raise CBVolumeIsActive("the container must be inactive during renaming")
|
||||||
if not re.search(r'^[a-zA-Z0-9_\.\- ]+$', new_name):
|
if not re.search(r'^[a-zA-Z0-9_\.\- ]+$', new_name):
|
||||||
raise "InvalidName", "the supplied new name contains illegal characters"
|
raise CBInvalidName("the supplied new name contains illegal characters")
|
||||||
"check for active partitions with the same name"
|
"check for active partitions with the same name"
|
||||||
prev_name_owner = self.cbox.getContainerList(filterName=new_name)
|
prev_name_owner = self.cbox.getContainerList(filterName=new_name)
|
||||||
if prev_name_owner:
|
if prev_name_owner:
|
||||||
for a in prev_name_owner:
|
for a in prev_name_owner:
|
||||||
if a.isMounted():
|
if a.isMounted():
|
||||||
raise "NameActivelyUsed", "the supplied new name is already in use for an active partition"
|
raise CBNameActivelyUsed("the supplied new name is already in use for an active partition")
|
||||||
self.cbox.setNameForUUID(self.uuid, new_name)
|
self.cbox.setNameForUUID(self.uuid, new_name)
|
||||||
self.name = new_name
|
self.name = new_name
|
||||||
|
|
||||||
|
@ -116,21 +117,20 @@ class CryptoBoxContainer:
|
||||||
self.__createPlain()
|
self.__createPlain()
|
||||||
self.resetObject()
|
self.resetObject()
|
||||||
return
|
return
|
||||||
raise "InvalidType", "invalid container type (%d) supplied" % (type, )
|
raise CBInvalidType("invalid container type (%d) supplied" % (type, ))
|
||||||
|
|
||||||
|
|
||||||
def changePassword(self, oldpw, newpw):
|
def changePassword(self, oldpw, newpw):
|
||||||
if self.type != self.Types["luks"]:
|
if self.type != self.Types["luks"]:
|
||||||
raise "InvalidType", \
|
raise CBInvalidType("changing of password is possible only for luks containers")
|
||||||
"changing of password is possible only for luks containers"
|
|
||||||
if not oldpw:
|
if not oldpw:
|
||||||
raise "InvalidPassword", "no old password supplied for password change"
|
raise CBInvalidPassword("no old password supplied for password change")
|
||||||
if not newpw:
|
if not newpw:
|
||||||
raise "InvalidPassword", "no new password supplied for password change"
|
raise CBInvalidPassword("no new password supplied for password change")
|
||||||
"return if new and old passwords are the same"
|
"return if new and old passwords are the same"
|
||||||
if oldpw == newpw: return
|
if oldpw == newpw: return
|
||||||
if self.isMounted():
|
if self.isMounted():
|
||||||
raise "VolumeIsActive", "this container is currently active"
|
raise CBVolumeIsActive("this container is currently active")
|
||||||
devnull = None
|
devnull = None
|
||||||
try:
|
try:
|
||||||
devnull = open(os.devnull, "w")
|
devnull = open(os.devnull, "w")
|
||||||
|
@ -156,13 +156,13 @@ class CryptoBoxContainer:
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
errorMsg = "Could not add a new luks key: %s - %s" % (output.strip(), errout.strip(), )
|
errorMsg = "Could not add a new luks key: %s - %s" % (output.strip(), errout.strip(), )
|
||||||
self.log.error(errorMsg)
|
self.log.error(errorMsg)
|
||||||
raise "ChangePasswordError", errorMsg
|
raise CBChangePasswordError(errorMsg)
|
||||||
## retrieve the key slot we used for unlocking
|
## retrieve the key slot we used for unlocking
|
||||||
keys_found = re.search(r'key slot (\d{1,3}) unlocked', output).groups()
|
keys_found = re.search(r'key slot (\d{1,3}) unlocked', output).groups()
|
||||||
if keys_found:
|
if keys_found:
|
||||||
keyslot = int(keys_found[0])
|
keyslot = int(keys_found[0])
|
||||||
else:
|
else:
|
||||||
raise "ChangePasswordError", "could not get the old key slot"
|
raise CBChangePasswordError("could not get the old key slot")
|
||||||
"remove the old key"
|
"remove the old key"
|
||||||
proc = subprocess.Popen(
|
proc = subprocess.Popen(
|
||||||
shell = False,
|
shell = False,
|
||||||
|
@ -179,7 +179,7 @@ class CryptoBoxContainer:
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
errorMsg = "Could not remove the old luks key: %s" % (proc.stderr.read().strip(), )
|
errorMsg = "Could not remove the old luks key: %s" % (proc.stderr.read().strip(), )
|
||||||
self.log.error(errorMsg)
|
self.log.error(errorMsg)
|
||||||
raise "ChangePasswordError", errorMsg
|
raise CBChangePasswordError(errorMsg)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -300,8 +300,8 @@ class CryptoBoxContainer:
|
||||||
def __mountLuks(self, password):
|
def __mountLuks(self, password):
|
||||||
"mount a luks partition"
|
"mount a luks partition"
|
||||||
if not password:
|
if not password:
|
||||||
raise "InvalidPassword", "no password supplied for luksOpen"
|
raise CBInvalidPassword("no password supplied for luksOpen")
|
||||||
if self.isMounted(): raise "VolumeIsActive", "this container is already active"
|
if self.isMounted(): raise CBVolumeIsActive("this container is already active")
|
||||||
self.__umountLuks()
|
self.__umountLuks()
|
||||||
try:
|
try:
|
||||||
devnull = open(os.devnull, "w")
|
devnull = open(os.devnull, "w")
|
||||||
|
@ -313,7 +313,7 @@ class CryptoBoxContainer:
|
||||||
if not os.path.exists(self.__getMountPoint()):
|
if not os.path.exists(self.__getMountPoint()):
|
||||||
errorMsg = "Could not create mountpoint (%s)" % (self.__getMountPoint(), )
|
errorMsg = "Could not create mountpoint (%s)" % (self.__getMountPoint(), )
|
||||||
self.log.error(errorMsg)
|
self.log.error(errorMsg)
|
||||||
raise "MountError", errorMsg
|
raise CBMountError(errorMsg)
|
||||||
proc = subprocess.Popen(
|
proc = subprocess.Popen(
|
||||||
shell = False,
|
shell = False,
|
||||||
stdin = subprocess.PIPE,
|
stdin = subprocess.PIPE,
|
||||||
|
@ -332,7 +332,7 @@ class CryptoBoxContainer:
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
errorMsg = "Could not open the luks mapping: %s" % (errout.strip(), )
|
errorMsg = "Could not open the luks mapping: %s" % (errout.strip(), )
|
||||||
self.log.warn(errorMsg)
|
self.log.warn(errorMsg)
|
||||||
raise "MountError", errorMsg
|
raise CBMountError(errorMsg)
|
||||||
proc = subprocess.Popen(
|
proc = subprocess.Popen(
|
||||||
shell = False,
|
shell = False,
|
||||||
stdin = None,
|
stdin = None,
|
||||||
|
@ -348,7 +348,7 @@ class CryptoBoxContainer:
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
errorMsg = "Could not mount the filesystem: %s" % (proc.stderr.read().strip(), )
|
errorMsg = "Could not mount the filesystem: %s" % (proc.stderr.read().strip(), )
|
||||||
self.log.warn(errorMsg)
|
self.log.warn(errorMsg)
|
||||||
raise "MountError", errorMsg
|
raise CBMountError(errorMsg)
|
||||||
devnull.close()
|
devnull.close()
|
||||||
|
|
||||||
|
|
||||||
|
@ -374,7 +374,7 @@ class CryptoBoxContainer:
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
errorMsg = "Could not umount the filesystem: %s" % (proc.stderr.read().strip(), )
|
errorMsg = "Could not umount the filesystem: %s" % (proc.stderr.read().strip(), )
|
||||||
self.log.warn(errorMsg)
|
self.log.warn(errorMsg)
|
||||||
raise "MountError", errorMsg
|
raise CBMountError(errorMsg)
|
||||||
if os.path.exists(os.path.join(self.__dmDir, self.name)):
|
if os.path.exists(os.path.join(self.__dmDir, self.name)):
|
||||||
proc = subprocess.Popen(
|
proc = subprocess.Popen(
|
||||||
shell = False,
|
shell = False,
|
||||||
|
@ -392,13 +392,13 @@ class CryptoBoxContainer:
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
errorMsg = "Could not remove the luks mapping: %s" % (proc.stderr.read().strip(), )
|
errorMsg = "Could not remove the luks mapping: %s" % (proc.stderr.read().strip(), )
|
||||||
self.log.warn(errorMsg)
|
self.log.warn(errorMsg)
|
||||||
raise "MountError", errorMsg
|
raise CBMountError(errorMsg)
|
||||||
devnull.close()
|
devnull.close()
|
||||||
|
|
||||||
|
|
||||||
def __mountPlain(self):
|
def __mountPlain(self):
|
||||||
"mount a plaintext partition"
|
"mount a plaintext partition"
|
||||||
if self.isMounted(): raise "VolumeIsActive", "this container is already active"
|
if self.isMounted(): raise CBVolumeIsActive("this container is already active")
|
||||||
devnull = None
|
devnull = None
|
||||||
try:
|
try:
|
||||||
devnull = open(os.devnull, "w")
|
devnull = open(os.devnull, "w")
|
||||||
|
@ -410,7 +410,7 @@ class CryptoBoxContainer:
|
||||||
if not os.path.exists(self.__getMountPoint()):
|
if not os.path.exists(self.__getMountPoint()):
|
||||||
errorMsg = "Could not create mountpoint (%s)" % (self.__getMountPoint(), )
|
errorMsg = "Could not create mountpoint (%s)" % (self.__getMountPoint(), )
|
||||||
self.log.error(errorMsg)
|
self.log.error(errorMsg)
|
||||||
raise "MountError", errorMsg
|
raise CBMountError(errorMsg)
|
||||||
proc = subprocess.Popen(
|
proc = subprocess.Popen(
|
||||||
shell = False,
|
shell = False,
|
||||||
stdin = None,
|
stdin = None,
|
||||||
|
@ -426,7 +426,7 @@ class CryptoBoxContainer:
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
errorMsg = "Could not mount the filesystem: %s" % (proc.stderr.read().strip(), )
|
errorMsg = "Could not mount the filesystem: %s" % (proc.stderr.read().strip(), )
|
||||||
self.log.warn(errorMsg)
|
self.log.warn(errorMsg)
|
||||||
raise "MountError", errorMsg
|
raise CBMountError(errorMsg)
|
||||||
devnull.close()
|
devnull.close()
|
||||||
|
|
||||||
|
|
||||||
|
@ -452,15 +452,14 @@ class CryptoBoxContainer:
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
errorMsg = "Could not umount the filesystem: %s" % (proc.stderr.read().strip(), )
|
errorMsg = "Could not umount the filesystem: %s" % (proc.stderr.read().strip(), )
|
||||||
self.log.warn(errorMsg)
|
self.log.warn(errorMsg)
|
||||||
raise "MountError", errorMsg
|
raise CBMountError(errorMsg)
|
||||||
devnull.close()
|
devnull.close()
|
||||||
|
|
||||||
|
|
||||||
def __createPlain(self):
|
def __createPlain(self):
|
||||||
"make a plaintext partition"
|
"make a plaintext partition"
|
||||||
if self.isMounted():
|
if self.isMounted():
|
||||||
raise "VolumeIsActive", \
|
raise CBVolumeIsActive("deactivate the partition before filesystem initialization")
|
||||||
"deactivate the partition before filesystem initialization"
|
|
||||||
devnull = None
|
devnull = None
|
||||||
try:
|
try:
|
||||||
devnull = open(os.devnull, "w")
|
devnull = open(os.devnull, "w")
|
||||||
|
@ -478,17 +477,16 @@ class CryptoBoxContainer:
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
errorMsg = "Could not create the filesystem: %s" % (proc.stderr.read().strip(), )
|
errorMsg = "Could not create the filesystem: %s" % (proc.stderr.read().strip(), )
|
||||||
self.log.error(errorMsg)
|
self.log.error(errorMsg)
|
||||||
raise "CreateError", errorMsg
|
raise CBCreateError(errorMsg)
|
||||||
devnull.close()
|
devnull.close()
|
||||||
|
|
||||||
|
|
||||||
def __createLuks(self, password):
|
def __createLuks(self, password):
|
||||||
"make a luks partition"
|
"make a luks partition"
|
||||||
if not password:
|
if not password:
|
||||||
raise "InvalidPassword", "no password supplied for new luks mapping"
|
raise CBInvalidPassword("no password supplied for new luks mapping")
|
||||||
if self.isMounted():
|
if self.isMounted():
|
||||||
raise "VolumeIsActive", \
|
raise CBVolumeIsActive("deactivate the partition before filesystem initialization")
|
||||||
"deactivate the partition before filesystem initialization"
|
|
||||||
devnull = None
|
devnull = None
|
||||||
try:
|
try:
|
||||||
devnull = open(os.devnull, "w")
|
devnull = open(os.devnull, "w")
|
||||||
|
@ -516,7 +514,7 @@ class CryptoBoxContainer:
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
errorMsg = "Could not create the luks header: %s" % (errout.strip(), )
|
errorMsg = "Could not create the luks header: %s" % (errout.strip(), )
|
||||||
self.log.error(errorMsg)
|
self.log.error(errorMsg)
|
||||||
raise "CreateError", errorMsg
|
raise CBCreateError(errorMsg)
|
||||||
"open the luks container for mkfs"
|
"open the luks container for mkfs"
|
||||||
proc = subprocess.Popen(
|
proc = subprocess.Popen(
|
||||||
shell = False,
|
shell = False,
|
||||||
|
@ -536,7 +534,7 @@ class CryptoBoxContainer:
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
errorMsg = "Could not open the new luks mapping: %s" % (errout.strip(), )
|
errorMsg = "Could not open the new luks mapping: %s" % (errout.strip(), )
|
||||||
self.log.error(errorMsg)
|
self.log.error(errorMsg)
|
||||||
raise "CreateError", errorMsg
|
raise CBCreateError(errorMsg)
|
||||||
"make the filesystem"
|
"make the filesystem"
|
||||||
proc = subprocess.Popen(
|
proc = subprocess.Popen(
|
||||||
shell = False,
|
shell = False,
|
||||||
|
@ -553,7 +551,7 @@ class CryptoBoxContainer:
|
||||||
errorMsg = "Could not create the filesystem: %s" % (proc.stderr.read().strip(), )
|
errorMsg = "Could not create the filesystem: %s" % (proc.stderr.read().strip(), )
|
||||||
self.log.error(errorMsg)
|
self.log.error(errorMsg)
|
||||||
"remove the luks mapping"
|
"remove the luks mapping"
|
||||||
raise "CreateError", errorMsg
|
raise CBCreateError(errorMsg)
|
||||||
devnull.close()
|
devnull.close()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,15 +8,6 @@ class CryptoBoxError(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class CBPluginError(CryptoBoxError):
|
|
||||||
"""should be raised for plugin specific problems"""
|
|
||||||
|
|
||||||
|
|
||||||
class CBPluginActionError(CBPluginError):
|
|
||||||
"""should be raised when a plugin action failed"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class CBConfigError(CryptoBoxError):
|
class CBConfigError(CryptoBoxError):
|
||||||
"""any kind of error related to the configuration of a cryptobox"""
|
"""any kind of error related to the configuration of a cryptobox"""
|
||||||
pass
|
pass
|
||||||
|
@ -78,3 +69,36 @@ class CBEnvironmentError(CryptoBoxError):
|
||||||
return "misconfiguration detected: %s" % self.desc
|
return "misconfiguration detected: %s" % self.desc
|
||||||
|
|
||||||
|
|
||||||
|
class CBContainerError(CryptoBoxError):
|
||||||
|
"""any error raised while manipulating a cryptobox container"""
|
||||||
|
|
||||||
|
def __init__(self, desc):
|
||||||
|
self.desc = desc
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.desc
|
||||||
|
|
||||||
|
class CBCreateError(CBContainerError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class CBVolumeIsActive(CBContainerError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class CBInvalidName(CBContainerError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class CBNameActivelyUsed(CBContainerError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class CBInvalidType(CBContainerError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class CBInvalidPassword(CBContainerError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class CBChangePasswordError(CBContainerError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class CBMountError(CBContainerError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
|
@ -60,14 +60,6 @@ class WebInterfaceSites:
|
||||||
######################################################################
|
######################################################################
|
||||||
## put real sites down here and don't forget to expose them at the end
|
## put real sites down here and don't forget to expose them at the end
|
||||||
|
|
||||||
def logs(self, weblang=""):
|
|
||||||
'''displays a HTML version of the logfile
|
|
||||||
'''
|
|
||||||
self.__resetDataset()
|
|
||||||
self.__setWebLang(weblang)
|
|
||||||
self.dataset["Data.Log"] = "<br/>".join(self.cbox.getLogData(lines=30, maxSize=2000))
|
|
||||||
return self.__render("show_log")
|
|
||||||
|
|
||||||
|
|
||||||
def status(self, weblang=""):
|
def status(self, weblang=""):
|
||||||
'''shows the current status of the box
|
'''shows the current status of the box
|
||||||
|
@ -143,8 +135,7 @@ class WebInterfaceSites:
|
||||||
container = self.cbox.getContainer(device)
|
container = self.cbox.getContainer(device)
|
||||||
try:
|
try:
|
||||||
container.setName(volume_name)
|
container.setName(volume_name)
|
||||||
# TODO: specify the possible exceptions
|
except CBContainerError, errMsg:
|
||||||
except Exception, errMsg:
|
|
||||||
self.log.warn("failed to rename the volume '%s' to '%s: %s'" % (device, volume_name, errMsg))
|
self.log.warn("failed to rename the volume '%s' to '%s: %s'" % (device, volume_name, errMsg))
|
||||||
self.dataset["Data.Warning"] = "SetVolumeNameFailed"
|
self.dataset["Data.Warning"] = "SetVolumeNameFailed"
|
||||||
else:
|
else:
|
||||||
|
@ -183,8 +174,7 @@ class WebInterfaceSites:
|
||||||
container.mount()
|
container.mount()
|
||||||
else:
|
else:
|
||||||
## mounting is not possible
|
## mounting is not possible
|
||||||
# TODO: wrong warning message - replace it
|
self.dataset["Data.Warning"] = "InvalidType"
|
||||||
self.dataset["Data.Warning"] = "MountFailed"
|
|
||||||
self.log.warn("this type of container (%s) cannot be mounted - sorry!" % device)
|
self.log.warn("this type of container (%s) cannot be mounted - sorry!" % device)
|
||||||
except (Exception, "MountError"):
|
except (Exception, "MountError"):
|
||||||
self.dataset["Data.Warning"] = "MountFailed"
|
self.dataset["Data.Warning"] = "MountFailed"
|
||||||
|
@ -222,7 +212,7 @@ class WebInterfaceSites:
|
||||||
return self.__render("show_status")
|
return self.__render("show_status")
|
||||||
|
|
||||||
|
|
||||||
def init_do(self, device, confirm, crypto_password=None, crypto_password2=None, encryption=None, weblang=""):
|
def init_do(self, device, confirm="", crypto_password=None, crypto_password2=None, encryption=None, weblang=""):
|
||||||
self.__resetDataset()
|
self.__resetDataset()
|
||||||
self.__setWebLang(weblang)
|
self.__setWebLang(weblang)
|
||||||
if self.__setDevice(device):
|
if self.__setDevice(device):
|
||||||
|
@ -237,8 +227,7 @@ class WebInterfaceSites:
|
||||||
self.log.warn("initialization is not possible as long as the device (%s) is mounted" % device)
|
self.log.warn("initialization is not possible as long as the device (%s) is mounted" % device)
|
||||||
return self.__render("form_init")
|
return self.__render("form_init")
|
||||||
else:
|
else:
|
||||||
# TODO: we have to compare 'confirm' with the value in the language file - IMPORTANT!
|
if confirm != self.__getLanguageValue("Text.ConfirmInit"):
|
||||||
if not confirm:
|
|
||||||
self.dataset["Data.Warning"] = "InitNotConfirmed"
|
self.dataset["Data.Warning"] = "InitNotConfirmed"
|
||||||
self.log.warn("the confirmation sentence for initialization of the device '%s' was wrong" % device)
|
self.log.warn("the confirmation sentence for initialization of the device '%s' was wrong" % device)
|
||||||
return self.__render("form_init")
|
return self.__render("form_init")
|
||||||
|
@ -255,10 +244,8 @@ class WebInterfaceSites:
|
||||||
container.create(container.Types["luks"], crypto_password)
|
container.create(container.Types["luks"], crypto_password)
|
||||||
else:
|
else:
|
||||||
container.create(container.Types["plain"])
|
container.create(container.Types["plain"])
|
||||||
# TODO: specify the exception
|
except CBContainerError, errMsg:
|
||||||
except Exception, errMsg:
|
self.dataset["Data.Warning"] = "CreateFailed"
|
||||||
# TODO: wrong error/warning message - change it
|
|
||||||
self.dataset["Data.Error"] = "InitFailed"
|
|
||||||
self.log.warn("initialization of device '%s' failed" % device)
|
self.log.warn("initialization of device '%s' failed" % device)
|
||||||
self.log.warn("reason: %s" % errMsg)
|
self.log.warn("reason: %s" % errMsg)
|
||||||
return self.__render("form_init")
|
return self.__render("form_init")
|
||||||
|
@ -278,11 +265,7 @@ class WebInterfaceSites:
|
||||||
import cherrypy
|
import cherrypy
|
||||||
self.__resetDataset()
|
self.__resetDataset()
|
||||||
self.__setWebLang(weblang)
|
self.__setWebLang(weblang)
|
||||||
for x in pref_langs:
|
return "test passed"
|
||||||
yield "Lang: %s<br/>" % x
|
|
||||||
for (key,value) in headers.items():
|
|
||||||
yield "%s: %s<br/>" % (key,value)
|
|
||||||
#return "test passed"
|
|
||||||
|
|
||||||
|
|
||||||
def umount_do(self, device, weblang=""):
|
def umount_do(self, device, weblang=""):
|
||||||
|
@ -302,9 +285,8 @@ class WebInterfaceSites:
|
||||||
## plain container
|
## plain container
|
||||||
container.umount()
|
container.umount()
|
||||||
else:
|
else:
|
||||||
## mounting is not possible
|
## umounting is not possible
|
||||||
# TODO: wrong warning message - replace it
|
self.dataset["Data.Warning"] = "InvalidType"
|
||||||
self.dataset["Data.Warning"] = "UmountFailed"
|
|
||||||
self.log.warn("this type of container (%s) cannot be umounted - sorry!" % device)
|
self.log.warn("this type of container (%s) cannot be umounted - sorry!" % device)
|
||||||
except (Exception, "UmountError"):
|
except (Exception, "UmountError"):
|
||||||
self.dataset["Data.Warning"] = "UmountFailed"
|
self.dataset["Data.Warning"] = "UmountFailed"
|
||||||
|
@ -336,61 +318,12 @@ class WebInterfaceSites:
|
||||||
return handler
|
return handler
|
||||||
|
|
||||||
|
|
||||||
'''
|
|
||||||
## DONE: these functions are pythonized
|
|
||||||
#################### show_log #######################
|
|
||||||
##################### doc ############################
|
|
||||||
##################### poweroff ######################
|
|
||||||
##################### reboot ########################
|
|
||||||
|
|
||||||
## but there are even more TODO
|
|
||||||
#-------------------------------------------------------#
|
|
||||||
# here you may define all cases that require a harddisk #
|
|
||||||
#-------------------------------------------------------#
|
|
||||||
################ umount_do #######################
|
|
||||||
elif action == "unmount_do":
|
|
||||||
if not device:
|
|
||||||
self.log.debug("invalid device chosen: %s" device
|
|
||||||
settings["Data.Warning"] = "InvalidDevice"
|
|
||||||
settings["Data.Action"] = "empty"
|
|
||||||
elif not True: #TODO: replace True with check_config()
|
|
||||||
settings["Data.Warning"] = "NotInitialized"
|
|
||||||
settings["Data.Action"] = "form_init"
|
|
||||||
elif True: #TODO: replace True with check_init_running()
|
|
||||||
settings["Data.Warning"] = "InitNotFinished"
|
|
||||||
settings["Data.Action"] = "empty"
|
|
||||||
settings["Data.Redirect.Action"] = "form_config"
|
|
||||||
settings["Data.Redirect.Delay"] = "30"
|
|
||||||
elif not True: #TODO: replace True with check_mounted(device)
|
|
||||||
settings["Data.Warning"] = "NotMounted"
|
|
||||||
settings["Data.Action"] = "show_volume"
|
|
||||||
else: #unmount
|
|
||||||
#TODO: replace this line with umount_vol(device)
|
|
||||||
if True: #TODO: replace True with check_mounted(device)
|
|
||||||
settings["Data.Warning"] = "UmountFailed"
|
|
||||||
settings["Data.Action"] = "show_volume"
|
|
||||||
else:
|
|
||||||
settings["Data.Action"] = "show_volume"
|
|
||||||
################ mount_do ########################
|
|
||||||
elif action == "mount_do":
|
|
||||||
if device:
|
|
||||||
pass #TODO: is_encrypted = check_device_encryption(device)
|
|
||||||
else:
|
|
||||||
self.log.debug("invalid device chosen: %s" device
|
|
||||||
settings["Data.Warning"] = "InvalidDevice"
|
|
||||||
settings["Data.Action"] = "empty"
|
|
||||||
elif not True: #TODO: replace True with check_config()
|
|
||||||
settings["Data.Warning"] = "NotInitialized"
|
|
||||||
settings["Data.Action"] = "form_init"
|
|
||||||
#at cryptobox.pl line 568
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
##################### input checker ##########################
|
##################### input checker ##########################
|
||||||
def __setWebLang(self, value):
|
def __setWebLang(self, value):
|
||||||
## TODO: add some code to evaluate the language setting of the browser
|
|
||||||
guess = value
|
guess = value
|
||||||
availLangs = self.cbox.getAvailableLanguages()
|
availLangs = self.cbox.getAvailableLanguages()
|
||||||
|
## no language specified: check browser language
|
||||||
if not guess:
|
if not guess:
|
||||||
guess = self.__getPreferredBrowserLanguage(availLangs)
|
guess = self.__getPreferredBrowserLanguage(availLangs)
|
||||||
if not guess or \
|
if not guess or \
|
||||||
|
@ -398,7 +331,6 @@ class WebInterfaceSites:
|
||||||
re.search(u'\W', guess):
|
re.search(u'\W', guess):
|
||||||
self.cbox.log.info("invalid language choosen: %s" % guess)
|
self.cbox.log.info("invalid language choosen: %s" % guess)
|
||||||
guess = self.prefs["WebSettings"]["Language"]
|
guess = self.prefs["WebSettings"]["Language"]
|
||||||
## TODO: extract the current "browser-language" - this should be the first guess
|
|
||||||
## maybe the language is still not valid
|
## maybe the language is still not valid
|
||||||
if not guess in availLangs:
|
if not guess in availLangs:
|
||||||
self.log.warn("the configured language is invalid: %s" % guess)
|
self.log.warn("the configured language is invalid: %s" % guess)
|
||||||
|
@ -459,6 +391,11 @@ class WebInterfaceSites:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def __getLanguageValue(self, value):
|
||||||
|
hdf = self.__getLanguageData(self.dataset["Settings.Language"])
|
||||||
|
return hdf.getValue(value, "")
|
||||||
|
|
||||||
|
|
||||||
def __getLanguageData(self, web_lang="en"):
|
def __getLanguageData(self, web_lang="en"):
|
||||||
import neo_cgi, neo_util, os
|
import neo_cgi, neo_util, os
|
||||||
default_lang = "en"
|
default_lang = "en"
|
||||||
|
@ -572,7 +509,6 @@ class WebInterfaceSites:
|
||||||
## to make the sites visible through the webserver they must be exposed here
|
## to make the sites visible through the webserver they must be exposed here
|
||||||
index.exposed = True
|
index.exposed = True
|
||||||
doc.exposed = True
|
doc.exposed = True
|
||||||
logs.exposed = True
|
|
||||||
system.exposed = True
|
system.exposed = True
|
||||||
status.exposed = True
|
status.exposed = True
|
||||||
show_volume.exposed = True
|
show_volume.exposed = True
|
||||||
|
|
|
@ -161,6 +161,16 @@ WarningMessage {
|
||||||
Text = Could not change the name of the container. Take a look at the log files for details.
|
Text = Could not change the name of the container. Take a look at the log files for details.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CreateFailed {
|
||||||
|
Title = Initialization failed
|
||||||
|
Text = Initialization of the volume failed for some unknown reasons - sorry!
|
||||||
|
}
|
||||||
|
|
||||||
|
InvalidType {
|
||||||
|
Title = Unknown type
|
||||||
|
Text = The type of this volume is unknown.
|
||||||
|
}
|
||||||
|
|
||||||
VolumeMayNotBeMounted {
|
VolumeMayNotBeMounted {
|
||||||
Title = The container is mounted
|
Title = The container is mounted
|
||||||
Text = This action is not available while the container is active. Please turn it off first.
|
Text = This action is not available while the container is active. Please turn it off first.
|
||||||
|
|
|
@ -375,65 +375,3 @@ button:hover {
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------=-=-=- special things -=-=-=------------- */
|
|
||||||
|
|
||||||
#partition_info p, #log p.console {
|
|
||||||
margin-left: 10%;
|
|
||||||
margin-right: 10%;
|
|
||||||
font-family: monospace;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------=-=-=-=- onscreen help -=-=-=-=--------- */
|
|
||||||
/* not active anymore */
|
|
||||||
|
|
||||||
#words a.popup {
|
|
||||||
line-height: inherit;
|
|
||||||
color: inherit;
|
|
||||||
background-color: inherit;
|
|
||||||
text-decoration: inherit;
|
|
||||||
font-weight: inherit;
|
|
||||||
font-size: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
#words a.popup:hover {
|
|
||||||
text-decoration: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
#words a.popup span {
|
|
||||||
display: none;
|
|
||||||
position: fixed;
|
|
||||||
bottom: 10px;
|
|
||||||
left: 9%;
|
|
||||||
width: 80%;
|
|
||||||
background: #f0f0f0;
|
|
||||||
padding: 10px;
|
|
||||||
border-color: #e0e0e0;
|
|
||||||
border-width: 2px;
|
|
||||||
border-style: solid;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#words a.popup:hover span {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
|
|
||||||
#words a.popup span p {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
#words a.popup span h3 {
|
|
||||||
color: #909090;
|
|
||||||
margin-top: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// TODO: move this to the plugin "partition" (inline include with cs)
|
|
||||||
#words div.partition {
|
|
||||||
text-align: center;
|
|
||||||
align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.partition tr td{
|
|
||||||
text-align: center
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue