From b026e86741ecfd07a177e19c9dcebb32c875cced Mon Sep 17 00:00:00 2001
From: BaiJiangJie <bugatti_it@163.com>
Date: Wed, 6 Jun 2018 15:35:26 +0800
Subject: [PATCH] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E5=88=A4=E6=96=AD?=
 =?UTF-8?q?MFA=E6=98=AF=E5=90=A6=E5=85=A8=E5=B1=80=E5=90=AF=E7=94=A8?=
 =?UTF-8?q?=E7=9A=84=E9=80=BB=E8=BE=91=EF=BC=8C=E6=94=BE=E5=88=B0User.otp?=
 =?UTF-8?q?=5Fforce=5Fenabled=E4=B8=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 apps/users/models/user.py                    |  6 +++-
 apps/users/templates/users/user_profile.html |  2 +-
 apps/users/views/login.py                    | 29 ++++++++------------
 apps/users/views/user.py                     |  1 -
 4 files changed, 17 insertions(+), 21 deletions(-)

diff --git a/apps/users/models/user.py b/apps/users/models/user.py
index 025fe7c8..fa01ba82 100644
--- a/apps/users/models/user.py
+++ b/apps/users/models/user.py
@@ -14,6 +14,7 @@ from django.utils import timezone
 from django.shortcuts import reverse
 
 from common.utils import get_signer, date_expired_default
+from common.models import Setting
 
 
 __all__ = ['User']
@@ -248,10 +249,13 @@ class User(AbstractUser):
 
     @property
     def otp_enabled(self):
-        return self.otp_level > 0
+        return self.otp_force_enabled or self.otp_level > 0
 
     @property
     def otp_force_enabled(self):
+        mfa_setting = Setting.objects.filter(name='SECURITY_MFA_AUTH').first()
+        if mfa_setting and mfa_setting.cleaned_value:
+            return True
         return self.otp_level == 2
 
     def enable_otp(self):
diff --git a/apps/users/templates/users/user_profile.html b/apps/users/templates/users/user_profile.html
index 0d586902..50dabeab 100644
--- a/apps/users/templates/users/user_profile.html
+++ b/apps/users/templates/users/user_profile.html
@@ -155,7 +155,7 @@
                                                 <a type="button" class="btn btn-primary btn-xs" style="width: 54px" id=""
                                                    href="
                                                         {% if request.user.otp_enabled and request.user.otp_secret_key %}
-                                                            {% if request.user.otp_force_enabled or mfa_setting %}
+                                                            {% if request.user.otp_force_enabled %}
                                                                 " disabled >{% trans 'Disable' %}
                                                             {% else %}
                                                                 {% url 'users:user-otp-disable-authentication' %}
diff --git a/apps/users/views/login.py b/apps/users/views/login.py
index 411a2f95..c058b440 100644
--- a/apps/users/views/login.py
+++ b/apps/users/views/login.py
@@ -82,24 +82,17 @@ class UserLoginView(FormView):
     def get_success_url(self):
         user = get_user_or_tmp_user(self.request)
 
-        mfa_setting = Setting.objects.filter(name='SECURITY_MFA_AUTH').first()
-        if mfa_setting and mfa_setting.cleaned_value:
-            if user.otp_enabled and user.otp_secret_key:
-                return reverse('users:login-otp')
-            else:
-                return reverse('users:user-otp-enable-authentication')
-        else:
-            if user.otp_enabled and user.otp_secret_key:
-                # 1,2 & T
-                return reverse('users:login-otp')
-            elif user.otp_enabled and not user.otp_secret_key:
-                # 1,2 & F
-                return reverse('users:user-otp-enable-authentication')
-            elif not user.otp_enabled:
-                # 0 & T,F
-                auth_login(self.request, user)
-                self.write_login_log()
-                return redirect_user_first_login_or_index(self.request, self.redirect_field_name)
+        if user.otp_enabled and user.otp_secret_key:
+            # 1,2 & T
+            return reverse('users:login-otp')
+        elif user.otp_enabled and not user.otp_secret_key:
+            # 1,2 & F
+            return reverse('users:user-otp-enable-authentication')
+        elif not user.otp_enabled:
+            # 0 & T,F
+            auth_login(self.request, user)
+            self.write_login_log()
+            return redirect_user_first_login_or_index(self.request, self.redirect_field_name)
 
     def get_context_data(self, **kwargs):
         context = {
diff --git a/apps/users/views/user.py b/apps/users/views/user.py
index 414a96a6..598726fc 100644
--- a/apps/users/views/user.py
+++ b/apps/users/views/user.py
@@ -337,7 +337,6 @@ class UserProfileView(LoginRequiredMixin, TemplateView):
 
     def get_context_data(self, **kwargs):
         mfa_setting = Setting.objects.filter(name='SECURITY_MFA_AUTH').first()
-
         context = {
             'action': _('Profile'),
             'mfa_setting': mfa_setting.cleaned_value if mfa_setting else False,
-- 
2.18.0