From bad2a96a61e5618bcd0c422cfa53dc4ec467c744 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 7 Apr 2021 09:54:38 +0200 Subject: [PATCH] Removed django-braces requirement. --- modoboa/core/forms.py | 2 +- modoboa/core/views/auth.py | 11 ++++++----- modoboa/lib/form_utils.py | 8 ++++++++ modoboa/lib/views.py | 10 ++++++++++ requirements.txt | 1 - 5 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 modoboa/lib/views.py diff --git a/modoboa/core/forms.py b/modoboa/core/forms.py index f06118530..b5d107658 100644 --- a/modoboa/core/forms.py +++ b/modoboa/core/forms.py @@ -9,10 +9,10 @@ from django.contrib.auth import ( from django.db.models import Q from django.utils.translation import ugettext as _, ugettext_lazy -from braces.forms import UserKwargModelFormMixin import django_otp from modoboa.core.models import User +from modoboa.lib.form_utils import UserKwargModelFormMixin from modoboa.parameters import tools as param_tools diff --git a/modoboa/core/views/auth.py b/modoboa/core/views/auth.py index f23b41927..892ec1d2d 100644 --- a/modoboa/core/views/auth.py +++ b/modoboa/core/views/auth.py @@ -4,7 +4,8 @@ import logging import oath -from django.http import HttpResponse, HttpResponseRedirect, Http404 +from django.http import ( + HttpResponse, HttpResponseRedirect, Http404, JsonResponse) from django.template.loader import render_to_string from django.urls import reverse from django.utils import translation @@ -17,15 +18,15 @@ from django.views.decorators.cache import never_cache from django.contrib.auth import ( authenticate, login, logout, views as auth_views ) +from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.tokens import default_token_generator -from braces.views import ( - JSONResponseMixin, LoginRequiredMixin, UserFormKwargsMixin) import django_otp from modoboa.core import forms from modoboa.core.password_hashers import get_password_hasher from modoboa.lib import cryptutils +from modoboa.lib.views import UserFormKwargsMixin from modoboa.parameters import tools as param_tools from .. import models @@ -204,7 +205,7 @@ class VerifySMSCodeView(generic.FormView): return HttpResponseRedirect(url) -class ResendSMSCodeView(JSONResponseMixin, generic.View): +class ResendSMSCodeView(generic.View): """A view to resend validation code.""" def get(self, request, *args, **kwargs): @@ -230,7 +231,7 @@ class ResendSMSCodeView(JSONResponseMixin, generic.View): if not backend.send(text, [user.phone_number]): raise Http404 self.request.session["totp_secret"] = secret - return self.render_json_response({"status": "ok"}) + return JsonResponse({"status": "ok"}) class TwoFactorCodeVerifyView(LoginRequiredMixin, diff --git a/modoboa/lib/form_utils.py b/modoboa/lib/form_utils.py index c98036884..771840bfe 100644 --- a/modoboa/lib/form_utils.py +++ b/modoboa/lib/form_utils.py @@ -360,6 +360,14 @@ class TabForms(object): context["tabs"].active_id = active_tab_id return render(self.request, self.template_name, context) + +class UserKwargModelFormMixin: + """Simple form mixin to add support for user kwargs in constructor.""" + + def __init__(self, *args, **kwargs): + self.user = kwargs.pop("user") + super().__init__(*args, **kwargs) + # # Custom fields from here # diff --git a/modoboa/lib/views.py b/modoboa/lib/views.py new file mode 100644 index 000000000..352b40593 --- /dev/null +++ b/modoboa/lib/views.py @@ -0,0 +1,10 @@ +"""Views utilities.""" + + +class UserFormKwargsMixin: + """A mixin to automatically add a user arg to form instantiation.""" + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs.update({"user": self.request.user}) + return kwargs diff --git a/requirements.txt b/requirements.txt index ff2f1cc0d..c2f877427 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,4 @@ django>=2.2,<2.3 -django-braces==1.14.0 django-ckeditor==6.0.0 django-phonenumber-field[phonenumbers]==5.0.0 django-reversion==3.0.9