summaryrefslogtreecommitdiff
path: root/src/mailman/rest/validator.py
diff options
context:
space:
mode:
authorJ08nY2017-08-07 19:00:49 +0200
committerJ08nY2017-08-07 19:00:49 +0200
commitee9da27283ffb7adc836f764f1442cd06e3fb2a5 (patch)
tree2b687f39714580b1de70baf9e3dd9957326c4989 /src/mailman/rest/validator.py
parentd107fd41f03b57f7731b60bb7ba921febc3ce3b9 (diff)
parentb902d7858d8302d248add89a5983c521c3581c4c (diff)
downloadmailman-ee9da27283ffb7adc836f764f1442cd06e3fb2a5.tar.gz
mailman-ee9da27283ffb7adc836f764f1442cd06e3fb2a5.tar.zst
mailman-ee9da27283ffb7adc836f764f1442cd06e3fb2a5.zip
Diffstat (limited to 'src/mailman/rest/validator.py')
-rw-r--r--src/mailman/rest/validator.py49
1 files changed, 48 insertions, 1 deletions
diff --git a/src/mailman/rest/validator.py b/src/mailman/rest/validator.py
index b325fdc84..d5f684df9 100644
--- a/src/mailman/rest/validator.py
+++ b/src/mailman/rest/validator.py
@@ -16,15 +16,35 @@
# GNU Mailman. If not, see <http://www.gnu.org/licenses/>.
"""REST web form validation."""
-
+from mailman.config import config
from mailman.interfaces.address import IEmailValidator
from mailman.interfaces.errors import MailmanError
from mailman.interfaces.languages import ILanguageManager
+from mailman.interfaces.workflows import (ISubscriptionWorkflow,
+ IUnsubscriptionWorkflow)
+from mailman.workflows.subscription import (
+ ConfirmModerationSubscriptionPolicy, ConfirmSubscriptionPolicy,
+ ModerationSubscriptionPolicy, OpenSubscriptionPolicy)
+from mailman.workflows.unsubscription import (
+ ConfirmModerationUnsubscriptionPolicy, ConfirmUnsubscriptionPolicy,
+ ModerationUnsubscriptionPolicy, OpenUnsubscriptionPolicy)
from public import public
from zope.component import getUtility
COMMASPACE = ', '
+OLD_SUB_MAP = {
+ 'open': OpenSubscriptionPolicy,
+ 'confirm': ConfirmSubscriptionPolicy,
+ 'moderate': ModerationSubscriptionPolicy,
+ 'confirm_then_moderate': ConfirmModerationSubscriptionPolicy
+ }
+OLD_UNSUB_MAP = {
+ 'open': OpenUnsubscriptionPolicy,
+ 'confirm': ConfirmUnsubscriptionPolicy,
+ 'moderate': ModerationUnsubscriptionPolicy,
+ 'confirm_then_moderate': ConfirmModerationUnsubscriptionPolicy
+ }
@public
@@ -100,6 +120,33 @@ def list_of_strings_validator(values):
@public
+class policy_validator:
+ """"""
+
+ def __init__(self, policy_interface):
+ self._policy_interface = policy_interface
+ if policy_interface is ISubscriptionWorkflow:
+ self._old_map = OLD_SUB_MAP
+ elif policy_interface is IUnsubscriptionWorkflow:
+ self._old_map = OLD_UNSUB_MAP
+ else:
+ raise ValueError('Expected a workflow interface.')
+
+ def __call__(self, policy):
+ if self._policy_interface.implementedBy(policy):
+ return policy
+ if (policy in config.workflows and
+ self._policy_interface.implementedBy(
+ config.workflows[policy])):
+ return config.workflows[policy]
+ # For backwards compatibility.
+ policy = self._old_map.get(policy, None)
+ if policy is not None:
+ return policy
+ raise ValueError('Unknown policy: {}'.format(policy))
+
+
+@public
class Validator:
"""A validator of parameter input."""