import os import CryptoBoxContainer ## useful constant for some functions CONT_TYPES = CryptoBoxContainer.CryptoBoxContainer.Types class WebInterfaceDataset(dict): """this class contains all data that should be available for the clearsilver templates """ def __init__(self, cbox, prefs, plugins): self.prefs = prefs self.cbox = cbox self.__setConfigValues() self.__setCryptoBoxState() self.plugins = plugins self.setPluginData() def setPluginData(self): self.__setPluginList(self.plugins) def setCurrentDiskState(self, device): for container in self.cbox.getContainerList(): if container.getDevice() == device: isEncrypted = (container.getType() == CONT_TYPES["luks"]) and 1 or 0 isPlain = (container.getType() == CONT_TYPES["plain"]) and 1 or 0 isMounted = container.isMounted() and 1 or 0 self["Data.CurrentDisk.device"] = container.getDevice() self["Data.CurrentDisk.name"] = container.getName() self["Data.CurrentDisk.encryption"] = isEncrypted self["Data.CurrentDisk.plaintext"] = isPlain self["Data.CurrentDisk.active"] = isMounted if isMounted: (size, avail, used) = container.getCapacity() percent = used / size self["Data.CurrentDisk.capacity.used"] = used self["Data.CurrentDisk.capacity.free"] = avail self["Data.CurrentDisk.capacity.size"] = size self["Data.CurrentDisk.capacity.percent"] = percent def setContainersState(self): avail_counter = 0 active_counter = 0 for container in self.cbox.getContainerList(): ## useful if the container was changed during an action container.resetObject() isEncrypted = (container.getType() == CONT_TYPES["luks"]) and 1 or 0 isPlain = (container.getType() == CONT_TYPES["plain"]) and 1 or 0 isMounted = container.isMounted() and 1 or 0 self["Data.Disks.%d.device" % avail_counter] = container.getDevice() self["Data.Disks.%d.name" % avail_counter] = container.getName() self["Data.Disks.%d.encryption" % avail_counter] = isEncrypted self["Data.Disks.%d.plaintext" % avail_counter] = isPlain self["Data.Disks.%d.active" % avail_counter] = isMounted if isMounted: active_counter += 1 avail_counter += 1 self["Data.activeDisksCount"] = active_counter def __setConfigValues(self): self["Settings.TemplateDir"] = os.path.abspath(self.prefs["Locations"]["TemplateDir"]) self["Settings.LanguageDir"] = os.path.abspath(self.prefs["Locations"]["LangDir"]) self["Settings.DocDir"] = os.path.abspath(self.prefs["Locations"]["DocDir"]) self["Settings.Stylesheet"] = self.prefs["WebSettings"]["Stylesheet"] self["Settings.Language"] = self.prefs["WebSettings"]["Language"] self["Settings.PluginDir"] = self.prefs["Locations"]["PluginDir"] self["Settings.SettingsDir"] = self.prefs["Locations"]["SettingsDir"] def __setCryptoBoxState(self): self["Data.Version"] = self.cbox.VERSION for lang in self.cbox.getAvailableLanguages(): self["Data.Languages." + lang] = self.__getLanguageName(lang) ## TODO: open issues: Data.Config.AdminPasswordIsSet def __getLanguageName(self, lang): try: import neo_cgi, neo_util, neo_cs except: raise CryptoBoxExceptions.CBEnvironmentError("couldn't import 'neo_*'! Try 'apt-get install python-clearsilver'.") hdf_path = os.path.join(self.prefs["Locations"]["LangDir"], lang + ".hdf") hdf = neo_util.HDF() hdf.readFile(hdf_path) return hdf.getValue("Name",lang) def __setPluginList(self, plugins): for p in plugins: lang_data = p.getLanguageData() entryName = "Settings.PluginList." + p.getName() self[entryName] = p.getName() self[entryName + ".Link"] = lang_data.getValue("Link", p.getName()) self[entryName + ".Rank"] = p.getRank() self[entryName + ".RequestAuth"] = p.isAuthRequired() and "1" or "0" self[entryName + ".Enabled"] = p.isEnabled() and "1" or "0" for a in p.pluginCapabilities: self[entryName + ".Types." + a] = "1"