Config validator

- config options can have validators
- limit maxoutboundconnections to max 8
This commit is contained in:
Peter Šurda 2017-06-27 13:19:12 +02:00
parent 20e01860cf
commit f5a143d0b8
Signed by untrusted user: PeterSurda
GPG Key ID: 0C5F50C0B5F37D87
2 changed files with 32 additions and 1 deletions

View File

@ -165,7 +165,7 @@ class Ui_settingsDialog(object):
self.lineEditMaxOutboundConnections.setSizePolicy(sizePolicy) self.lineEditMaxOutboundConnections.setSizePolicy(sizePolicy)
self.lineEditMaxOutboundConnections.setMaximumSize(QtCore.QSize(60, 16777215)) self.lineEditMaxOutboundConnections.setMaximumSize(QtCore.QSize(60, 16777215))
self.lineEditMaxOutboundConnections.setObjectName(_fromUtf8("lineEditMaxOutboundConnections")) self.lineEditMaxOutboundConnections.setObjectName(_fromUtf8("lineEditMaxOutboundConnections"))
self.lineEditMaxOutboundConnections.setValidator(QtGui.QIntValidator(0, 4096, self.lineEditMaxOutboundConnections)) self.lineEditMaxOutboundConnections.setValidator(QtGui.QIntValidator(0, 8, self.lineEditMaxOutboundConnections))
self.gridLayout_9.addWidget(self.lineEditMaxOutboundConnections, 2, 2, 1, 1) self.gridLayout_9.addWidget(self.lineEditMaxOutboundConnections, 2, 2, 1, 1)
self.gridLayout_4.addWidget(self.groupBox_3, 2, 0, 1, 1) self.gridLayout_4.addWidget(self.groupBox_3, 2, 0, 1, 1)
self.groupBox_2 = QtGui.QGroupBox(self.tabNetworkSettings) self.groupBox_2 = QtGui.QGroupBox(self.tabNetworkSettings)

View File

@ -37,6 +37,8 @@ class BMConfigParser(ConfigParser.SafeConfigParser):
if self._optcre is self.OPTCRE or value: if self._optcre is self.OPTCRE or value:
if not isinstance(value, basestring): if not isinstance(value, basestring):
raise TypeError("option values must be strings") raise TypeError("option values must be strings")
if not self.validate(section, option, value):
raise ValueError("Invalid value %s" % str(value))
return ConfigParser.ConfigParser.set(self, section, option, value) return ConfigParser.ConfigParser.set(self, section, option, value)
def get(self, section, option, raw=False, variables=None): def get(self, section, option, raw=False, variables=None):
@ -76,6 +78,20 @@ class BMConfigParser(ConfigParser.SafeConfigParser):
def addresses(self): def addresses(self):
return filter(lambda x: x.startswith('BM-'), BMConfigParser().sections()) return filter(lambda x: x.startswith('BM-'), BMConfigParser().sections())
def read(self, filenames):
ConfigParser.ConfigParser.read(self, filenames)
for section in self.sections():
for option in self.options(section):
try:
if not self.validate(section, option, ConfigParser.ConfigParser.get(self, section, option)):
try:
newVal = BMConfigDefaults[section][option]
except KeyError:
continue
ConfigParser.ConfigParser.set(self, section, option, newVal)
except ConfigParser.InterpolationError:
continue
def save(self): def save(self):
fileName = os.path.join(state.appdata, 'keys.dat') fileName = os.path.join(state.appdata, 'keys.dat')
fileNameBak = fileName + "." + datetime.datetime.now().strftime("%Y%j%H%M%S%f") + '.bak' fileNameBak = fileName + "." + datetime.datetime.now().strftime("%Y%j%H%M%S%f") + '.bak'
@ -93,3 +109,18 @@ class BMConfigParser(ConfigParser.SafeConfigParser):
# delete the backup # delete the backup
if fileNameExisted: if fileNameExisted:
os.remove(fileNameBak) os.remove(fileNameBak)
def validate(self, section, option, value):
try:
return getattr(self, "validate_%s_%s" % (section, option))(value)
except AttributeError:
return True
def validate_bitmessagesettings_maxoutboundconnections(self, value):
try:
value = int(value)
except ValueError:
return False
if value < 0 or value > 8:
return False
return True