Esempio n. 1
0
    def form_valid(self, form: Form) -> HttpResponse:
        """Complete the registration and return response."""
        try:
            # Return value is ignored, because we need whole attestation.
            self.complete_registration(form)
        except ValidationError as error:
            form.add_error(None, error)
            return self.form_invalid(form)

        Authenticator.objects.create(user=self.request.user, attestation=form.cleaned_data['attestation'],
                                     user_handle=form.cleaned_data.get('user_handle'),
                                     label=form.cleaned_data.get('label'))
        return super().form_valid(form)
Esempio n. 2
0
    def clean(self, form: forms.Form, cleaned_data):
        if self.minimum_required is not None:
            all_fields = self.subset or list(product(self.rows, self.columns))
            has_error = any(
                form.has_error(self.get_id(r, c)) for r, c in all_fields)
            if has_error:
                return cleaned_data

            n_values = sum(1 for r, c in all_fields
                           if cleaned_data.get(self.get_id(r, c)))

            if n_values < self.minimum_required:
                form.add_error(
                    self.fake_field_id,
                    f"Vous devez remplir au moins {self.minimum_required} champs.",
                )
            return cleaned_data
Esempio n. 3
0
    def form_valid(self, form: forms.Form) -> HttpResponse:
        """Complete the FIDO token registration."""
        try:
            # Return value is ignored, because we need whole attestation.
            self.complete_registration(form)
        except ValidationError as error:
            form.add_error(None, error)
            return self.form_invalid(form)

        authenticator = Authenticator.objects.create(
            user=form.cleaned_data['user'],
            attestation=form.cleaned_data['attestation'],
            label=form.cleaned_data.get('label'),
        )
        return HttpResponseRedirect(
            reverse('admin:django_fido_authenticator_change',
                    args=(authenticator.pk, )))
Esempio n. 4
0
    def form_valid(self, form: Form) -> HttpResponse:
        """Complete the authentication and return response."""
        user = None
        if SETTINGS.two_step_auth:
            try:
                user = self.complete_authentication(form)
            except ValidationError as error:
                form.add_error(None, error)
        else:
            user = form.get_user()

        if user is not None:
            login(self.request, user)
            # Ensure user is deleted from session.
            self.request.session.pop(AUTHENTICATION_USER_SESSION_KEY, None)
            return redirect(self.get_success_url())
        else:
            return self.form_invalid(form)
Esempio n. 5
0
    def form_valid(self, form: Form):
        groups = [list for list in [
            self._format_array(form.cleaned_data['group1']),
            self._format_array(form.cleaned_data['group2']),
            self._format_array(form.cleaned_data['group3']),
            self._format_array(form.cleaned_data['group4'])] if list != ['']]

        try:
            sc = ScheduleCreator(
                schedule=Schedule(gameday_format=self.object.format, groups=groups),
                gameday=self.object)
            sc.create()
        except FileNotFoundError:
            form.add_error(None,
                           'Spielplan konnte nicht erstellt werden, '
                           'da es das Format als Spielplan nicht gibt: "{0}"'.format(self.object.format))
            return super(GamedayUpdateView, self).form_invalid(form)
        except (IndexError, ScheduleTeamMismatchError):
            form.add_error(None,
                           'Spielplan konnte nicht erstellt werden, '
                           'da die Kombination #Teams und #Format nicht zum Spielplan passen')
            return super(GamedayUpdateView, self).form_invalid(form)
        except TeamNotExistent as err:
            form.add_error(None,
                           f'Spielplan konnte nicht erstellt werden, da dass Team "{err}" nicht gefunden wurde.')
            return super(GamedayUpdateView, self).form_invalid(form)

        return super(GamedayUpdateView, self).form_valid(form)
Esempio n. 6
0
def process_error_response_into_form_errors(
        form: forms.Form,
        error_data: dict,
        field_mapping: Optional[dict] = None) -> bool:
    """It process error response from REST API.

    It tries to add errors from response into form as field errors
    or form errors.

    Args:
        form: Local form with invalid data.
        error_data: Error response from server in format of drf-friendly-errors.
        field_mapping: Mapping to allow display field error in another field.
            Mapping is in format error_data.field_name -> form.field_name.

    Returns:
        True if error data was processed else False.
    """
    code = error_data.get('code', None)
    if field_mapping is None:
        field_mapping = {}

    # 1000 = Validation Failed
    if code != '1000':
        return False

    for error in error_data.get('errors'):
        field = error.get('field')
        mapped_field = field_mapping.get(field, None)

        if mapped_field and mapped_field in form.fields.keys():
            form.add_error(mapped_field, error.get('message'))
            continue

        if field in form.fields.keys():
            form.add_error(field, error.get('message'))
            continue

        form.add_error(None, error.get('message'))
    return True