diff options
| author | J08nY | 2017-08-07 19:00:49 +0200 |
|---|---|---|
| committer | J08nY | 2017-08-07 19:00:49 +0200 |
| commit | ee9da27283ffb7adc836f764f1442cd06e3fb2a5 (patch) | |
| tree | 2b687f39714580b1de70baf9e3dd9957326c4989 /src/mailman/rest/validator.py | |
| parent | d107fd41f03b57f7731b60bb7ba921febc3ce3b9 (diff) | |
| parent | b902d7858d8302d248add89a5983c521c3581c4c (diff) | |
| download | mailman-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.py | 49 |
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.""" |
