def test_demo_registration(self): self.config.include('arche_2fa.app.demo') from arche_2fa.models import get_registered_2fas from arche.api import Root context = Root() request = testing.DummyRequest() res = dict(get_registered_2fas(context, request)) self.assertIn('demo', res)
def type_2fa_widget(node, kw): context = kw['context'] request = kw['request'] values = [] values.extend([(name, obj.title) for (name, obj) in get_registered_2fas(context, request)]) if len(values) != 1: #Insert at either 0 length or anything with more than one choice. values.insert(0, ('', _("<Select>"))) return deform.widget.SelectWidget(values = values)
def __call__(self, node, value): type_2fa = self.request.GET.get('type_2fa', None) methods = dict(get_registered_2fas(self.context, self.request)) if type_2fa not in methods: msg = _("authentication_method_invalid", default = "The authentication method is invalid.") raise colander.Invalid(node, msg) if not methods[type_2fa].validate(value): raise colander.Invalid(node, _("Invalid code"))
def insert_2fa_node(schema, event): """ Inject the 2fa node in the schema, or abort if something seems fishy. """ methods = dict(get_registered_2fas(event.context, event.request)) type_2fa = event.request.GET.get('type_2fa', None) if type_2fa not in methods: raise HTTPForbidden() schema.add(colander.SchemaNode(colander.String(), name = '2fa_code', title = _("two_factor_auth_code_title", default = "Two factor authentication code"), validator = login_2fa_validator)) if 'email_or_userid' in schema: schema['email_or_userid'].widget = deform.widget.HiddenWidget() schema['email_or_userid'].default = event.request.GET.get('userid', '')
def methods(self): return dict(get_registered_2fas(self.context, self.request))
def registered_2fa_names_validator(node, kw): context = kw['context'] request = kw['request'] return colander.OneOf(dict(get_registered_2fas(context, request)).keys())