aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorGravatar jesopo2019-10-04 10:25:48 +0100
committerGravatar jesopo2019-10-04 10:25:48 +0100
commit3466a3c43e50cf6fc55636352b82eab3f407c7f3 (patch)
tree581634fbe538e4e0772f7eaacb0be01811ea559d /modules
parentcheck that `third_words` isn't empty (diff)
signature
Allow utils.Setting_ parse functions to throw detailed errors
Diffstat (limited to 'modules')
-rw-r--r--modules/config.py14
-rw-r--r--modules/ircv3_sasl/__init__.py9
2 files changed, 19 insertions, 4 deletions
diff --git a/modules/config.py b/modules/config.py
index 97638a93..5b76f376 100644
--- a/modules/config.py
+++ b/modules/config.py
@@ -7,7 +7,8 @@ import enum
from src import ModuleManager, utils
class ConfigInvalidValue(Exception):
- pass
+ def __init__(self, message: str=None):
+ self.message = message
class ConfigSettingInexistent(Exception):
pass
@@ -113,7 +114,11 @@ class Module(ModuleManager.BaseModule):
def _config(self, export_settings, target, setting, value=None):
if not value == None:
- validated_value = export_settings[setting].parse(value)
+ try:
+ validated_value = export_settings[setting].parse(value)
+ except utils.SettingParseException as e:
+ raise ConfigInvalidValue(str(e))
+
if not validated_value == None:
target.set_setting(setting, validated_value)
return ConfigResult(ConfigResults.Changed, validated_value)
@@ -199,7 +204,10 @@ class Module(ModuleManager.BaseModule):
try:
result = self._config(export_settings, target, setting, value)
- except ConfigInvalidValue:
+ except ConfigInvalidValue as e:
+ if not e.message == None:
+ raise utils.EventError("Invalid value: %s" % e.message)
+
example = export_settings[setting].get_example()
if not example == None:
raise utils.EventError("Invalid value. %s" %
diff --git a/modules/ircv3_sasl/__init__.py b/modules/ircv3_sasl/__init__.py
index 5eb704f7..40f5afc0 100644
--- a/modules/ircv3_sasl/__init__.py
+++ b/modules/ircv3_sasl/__init__.py
@@ -12,10 +12,17 @@ USERPASS_MECHANISMS = [
"SCRAM-SHA-1",
"PLAIN"
]
+ALL_MECHANISMS = USERPASS_MECHANISMS+["EXTERNAL"]
def _parse(value):
mechanism, _, arguments = value.partition(" ")
- return {"mechanism": mechanism.upper(), "args": arguments}
+ mechanism = mechanism.upper()
+
+ if mechanism in ALL_MECHANISMS:
+ return {"mechanism": mechanism.upper(), "args": arguments}
+ else:
+ raise utils.SettingParseException("Unknown SASL mechanism '%s'"
+ % mechanism)
HARDFAIL = utils.BoolSetting("sasl-hard-fail",
"Set whether a SASL failure should cause a disconnect")