diff options
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.""" |
