VirtualMailManager/Config.py
changeset 571 a4aead244f75
parent 465 c0e1fb1b0145
parent 570 28230a8230bf
child 572 3238c58d01ae
--- a/VirtualMailManager/Config.py	Mon Nov 07 03:22:15 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,187 +0,0 @@
-# -*- coding: UTF-8 -*-
-# Copyright (c) 2007 - 2010, Pascal Volk
-# See COPYING for distribution information.
-
-"""Configuration class for read, modify and write the
-configuration from Virtual Mail Manager.
-
-"""
-
-from shutil import copy2
-from ConfigParser import ConfigParser, MissingSectionHeaderError, ParsingError
-from cStringIO import StringIO
-
-from __main__ import ENCODING, ERR, w_std
-from Exceptions import VMMConfigException
-
-class Config(ConfigParser):
-    """This class is for reading and modifying vmm's configuration file."""
-
-    def __init__(self, filename):
-        """Creates a new Config instance
-
-        Arguments:
-        filename -- path to the configuration file
-        """
-        ConfigParser.__init__(self)
-        self.__cfgFileName = filename
-        self.__cfgFile = None
-        self.__VMMsections = ['database', 'maildir', 'services', 'domdir',
-                'bin', 'misc', 'config']
-        self.__changes = False
-        self.__missing = {}
-        self.__dbopts = [
-                ['host', 'localhot'],
-                ['user', 'vmm'],
-                ['pass', 'your secret password'],
-                ['name', 'mailsys']
-                ]
-        self.__mdopts = [
-                ['name', 'Maildir'],
-                ['folders', 'Drafts:Sent:Templates:Trash'],
-                ['mode', 448],
-                ['diskusage', 'false'],
-                ['delete', 'false']
-                ]
-        self.__serviceopts = [
-                ['smtp', 'true'],
-                ['pop3', 'true'],
-                ['imap', 'true'],
-                ['sieve', 'true']
-                ]
-        self.__domdopts = [
-                ['base', '/srv/mail'],
-                ['mode', 504],
-                ['delete', 'false']
-                ]
-        self.__binopts = [
-                ['dovecotpw', '/usr/sbin/dovecotpw'],
-                ['du', '/usr/bin/du'],
-                ['postconf', '/usr/sbin/postconf']
-                ]
-        self.__miscopts = [
-                ['passwdscheme', 'PLAIN'],
-                ['gid_mail', 8],
-                ['forcedel', 'false'],
-                ['transport', 'dovecot:'],
-                ['dovecotvers', '11']
-                ]
-
-    def load(self):
-        """Loads the configuration, read only.
-
-        Raises a VMMConfigException if the configuration syntax is invalid.
-        """
-        try:
-            self.__cfgFile = file(self.__cfgFileName, 'r')
-            self.readfp(self.__cfgFile)
-        except (MissingSectionHeaderError, ParsingError), e:
-            self.__cfgFile.close()
-            raise VMMConfigException(str(e), ERR.CONF_ERROR)
-        self.__cfgFile.close()
-
-    def check(self):
-        """Performs a configuration check.
-
-        Raises a VMMConfigException if the check fails.
-        """
-        if not self.__chkSections():
-            errmsg = StringIO()
-            errmsg.write(_("Using configuration file: %s\n") %\
-                    self.__cfgFileName)
-            for k,v in self.__missing.items():
-                if v[0] is True:
-                    errmsg.write(_(u"missing section: %s\n") % k)
-                else:
-                    errmsg.write(_(u"missing options in section %s:\n") % k)
-                    for o in v:
-                        errmsg.write(" * %s\n" % o)
-            raise VMMConfigException(errmsg.getvalue(), ERR.CONF_ERROR)
-
-    def getsections(self):
-        """Return a list with all configurable sections."""
-        return self.__VMMsections[:-1]
-
-    def get(self, section, option, raw=False, vars=None):
-        return unicode(ConfigParser.get(self, section, option, raw, vars),
-                ENCODING, 'replace')
-
-    def configure(self, sections):
-        """Interactive method for configuring all options in the given sections
-
-        Arguments:
-        sections -- list of strings with section names
-        """
-        if not isinstance(sections, list):
-            raise TypeError("Argument 'sections' is not a list.")
-        # if [config] done = false (default at 1st run),
-        # then set changes true
-        try:
-            if not self.getboolean('config', 'done'):
-                self.__changes = True
-        except ValueError:
-            self.set('config', 'done', 'False')
-            self.__changes = True
-        w_std(_(u'Using configuration file: %s\n') % self.__cfgFileName)
-        for s in sections:
-            if s != 'config':
-                w_std(_(u'* Config section: ā€œ%sā€') % s )
-            for opt, val in self.items(s):
-                newval = raw_input(
-                _('Enter new value for option %(opt)s [%(val)s]: ').encode(
-                    ENCODING, 'replace') % {'opt': opt, 'val': val})
-                if newval and newval != val:
-                    self.set(s, opt, newval)
-                    self.__changes = True
-            print
-        if self.__changes:
-            self.__saveChanges()
-
-    def __saveChanges(self):
-        """Writes changes to the configuration file."""
-        self.set('config', 'done', 'true')
-        copy2(self.__cfgFileName, self.__cfgFileName+'.bak')
-        self.__cfgFile = file(self.__cfgFileName, 'w')
-        self.write(self.__cfgFile)
-        self.__cfgFile.close()
-
-    def __chkSections(self):
-        """Checks if all configuration sections are existing."""
-        errors = False
-        for s in self.__VMMsections:
-            if not self.has_section(s):
-                self.__missing[s] = [True]
-                errors = True
-            elif not self.__chkOptions(s):
-                errors = True
-        return not errors
-
-    def __chkOptions(self, section):
-        """Checks if all configuration options in section are existing.
-
-        Arguments:
-        section -- the section to be checked
-        """
-        retval = True
-        missing = []
-        if section == 'database':
-            opts = self.__dbopts
-        elif section == 'maildir':
-            opts = self.__mdopts
-        elif section == 'services':
-            opts = self.__serviceopts
-        elif section == 'domdir':
-            opts = self.__domdopts
-        elif section == 'bin':
-            opts = self.__binopts
-        elif section == 'misc':
-            opts = self.__miscopts
-        elif section == 'config':
-            opts = [['done', 'false']]
-        for o, v in opts:
-            if not self.has_option(section, o):
-                missing.append(o)
-                retval = False
-        if len(missing):
-            self.__missing[section] = missing
-        return retval