浏览代码

HUE-4023 [useradmin] update AuthenticationForm to allow activated users to login

krish 9 年之前
父节点
当前提交
288681b
共有 2 个文件被更改,包括 31 次插入0 次删除
  1. 3 0
      desktop/core/src/desktop/auth/forms.py
  2. 28 0
      desktop/core/src/desktop/auth/views_test.py

+ 3 - 0
desktop/core/src/desktop/auth/forms.py

@@ -58,12 +58,15 @@ class AuthenticationForm(AuthAuthenticationForm):
 
 
         expires_delta = datetime.timedelta(seconds=conf.AUTH.EXPIRES_AFTER.get())
         expires_delta = datetime.timedelta(seconds=conf.AUTH.EXPIRES_AFTER.get())
         if user.is_active and user.last_login + expires_delta < datetime.datetime.now():
         if user.is_active and user.last_login + expires_delta < datetime.datetime.now():
+          INACTIVE_EXPIRATION_DELTA = datetime.timedelta(days=365)
           if user.is_superuser:
           if user.is_superuser:
             if conf.AUTH.EXPIRE_SUPERUSERS.get():
             if conf.AUTH.EXPIRE_SUPERUSERS.get():
               user.is_active = False
               user.is_active = False
+              user.last_login = datetime.datetime.now() + INACTIVE_EXPIRATION_DELTA
               user.save()
               user.save()
           else:
           else:
             user.is_active = False
             user.is_active = False
+            user.last_login = datetime.datetime.now() + INACTIVE_EXPIRATION_DELTA
             user.save()
             user.save()
 
 
         if not user.is_active:
         if not user.is_active:

+ 28 - 0
desktop/core/src/desktop/auth/views_test.py

@@ -15,6 +15,7 @@
 # See the License for the specific language governing permissions and
 # See the License for the specific language governing permissions and
 # limitations under the License.
 # limitations under the License.
 
 
+import datetime
 from nose.tools import assert_true, assert_false, assert_equal
 from nose.tools import assert_true, assert_false, assert_equal
 
 
 from django.conf import settings
 from django.conf import settings
@@ -101,6 +102,33 @@ class TestLoginWithHadoop(PseudoHdfsTestBase):
     # Custom login process should not do 'http-equiv="refresh"' but call the correct view
     # Custom login process should not do 'http-equiv="refresh"' but call the correct view
     # 'Could not create home directory.' won't show up because the messages are consumed before
     # 'Could not create home directory.' won't show up because the messages are consumed before
 
 
+  def test_login_expiration(self):
+    response = self.c.post('/accounts/login/', {
+        'username': self.test_username,
+        'password': "test-hue-foo2",
+      }, follow=True)
+    assert_equal(200, response.status_code, "Expected ok status.")
+
+    self.reset.append(conf.AUTH.EXPIRES_AFTER.set_for_testing(10000))
+    user = User.objects.get(username=self.test_username)
+    user.last_login = datetime.datetime.now() + datetime.timedelta(days=-365)
+    user.save()
+
+    # Deactivate user
+    response = self.c.post('/accounts/login/', {
+        'username': self.test_username,
+        'password': "test-hue-foo2",
+      }, follow=True)
+    assert_equal(200, response.status_code, "Expected ok status.")
+    assert_true("Account deactivated. Please contact an administrator." in response.content, response.content)
+
+    # Activate user
+    user = User.objects.get(username=self.test_username)
+    user.is_active = True
+    user.save()
+    response = self.c.post('/accounts/login/', dict(username=self.test_username, password="foo"))
+    assert_equal(200, response.status_code, "Expected ok status.")
+
 
 
 class TestLdapLogin(PseudoHdfsTestBase):
 class TestLdapLogin(PseudoHdfsTestBase):