Browse Source

HUE-8530 [organization] Refactor to not hardcode user attribute lookup

Romain 6 years ago
parent
commit
31839a2c58

+ 2 - 2
apps/useradmin/src/useradmin/forms.py

@@ -31,7 +31,7 @@ from desktop.lib.django_util import get_username_re_rule, get_groupname_re_rule
 from desktop.settings import LANGUAGES
 
 from useradmin.hue_password_policy import hue_get_password_validators
-from useradmin.models import GroupPermission, HuePermission, get_default_user_group, User, Group, default_organization, Organization
+from useradmin.models import GroupPermission, HuePermission, get_default_user_group, User, Group, default_organization, Organization, orm_user_lookup
 
 
 LOG = logging.getLogger(__name__)
@@ -434,7 +434,7 @@ class GroupEditForm(forms.ModelForm):
   def __init__(self, *args, **kwargs):
     super(GroupEditForm, self).__init__(*args, **kwargs)
 
-    ordering_field = 'email' if ENABLE_ORGANIZATIONS.get() else 'username'
+    ordering_field = orm_user_lookup()
 
     if self.instance.id:
       self.fields['name'].widget.attrs['readonly'] = True

+ 3 - 0
apps/useradmin/src/useradmin/models.py

@@ -353,3 +353,6 @@ def install_sample_user():
     LOG.exception('Failed to create home directory for user %s: %s' % (SAMPLE_USER_INSTALL, str(ex)))
 
   return user
+
+def orm_user_lookup():
+  return 'email' if ENABLE_ORGANIZATIONS.get() else 'username'

+ 2 - 2
apps/useradmin/src/useradmin/views.py

@@ -52,7 +52,7 @@ from useradmin.forms import SyncLdapUsersGroupsForm, AddLdapGroupsForm, AddLdapU
   PermissionsEditForm, GroupEditForm, SuperUserChangeForm, validate_username, validate_first_name, \
   validate_last_name, PasswordChangeForm
 from useradmin.ldap_access import LdapBindException, LdapSearchException
-from useradmin.models import HuePermission, UserProfile, LdapGroup, get_profile, get_default_user_group, User, Group
+from useradmin.models import HuePermission, UserProfile, LdapGroup, get_profile, get_default_user_group, User, Group, orm_user_lookup
 
 if sys.version_info[0] > 2:
   unicode = str
@@ -458,7 +458,7 @@ def edit_group(request, name=None):
     if form.is_valid():
       form.save()
 
-      value_field = 'email' if ENABLE_ORGANIZATIONS.get() else 'username'
+      value_field = orm_user_lookup()
 
       if name is not None:
         usernames = instance.user_set.all().values_list(value_field, flat=True)

+ 3 - 2
desktop/core/src/desktop/lib/django_test_util.py

@@ -25,7 +25,7 @@ import json
 import django.test.client
 import nose.tools
 
-from useradmin.models import User, Group, default_organization
+from useradmin.models import User, Group, default_organization, orm_user_lookup
 
 from desktop.conf import ENABLE_ORGANIZATIONS
 
@@ -55,7 +55,8 @@ def make_logged_in_client(username="test", password="test", is_superuser=True, r
   mess with is_active and such.
   """
   try:
-    user = User.objects.get(username=username)
+    lookup = {orm_user_lookup(): username}
+    user = User.objects.get(**lookup)
     if recreate:
       user.delete()
       raise User.DoesNotExist

+ 2 - 2
desktop/core/src/desktop/lib/fs/proxyfs.py

@@ -22,7 +22,7 @@ from builtins import object
 import logging
 import sys
 
-from useradmin.models import User
+from useradmin.models import User, orm_user_lookup
 
 from desktop.auth.backend import is_admin
 from desktop.conf import DEFAULT_USER, ENABLE_ORGANIZATIONS
@@ -77,7 +77,7 @@ class ProxyFS(object):
       #if not filebrowser_action (hdfs) then handle permission via doas else check permission in hue
       if not filebrowser_action:
         return True
-      lookup = {'email' if ENABLE_ORGANIZATIONS.get() else 'username': self.getuser()}
+      lookup = {orm_user_lookup(): self.getuser()}
       user = rewrite_user(User.objects.get(**lookup))
       return user.is_authenticated() and user.is_active and (is_admin(user) or not filebrowser_action or user.has_hue_permission(action=filebrowser_action, app="filebrowser"))
     except User.DoesNotExist:

+ 2 - 2
desktop/libs/notebook/src/notebook/tasks.py

@@ -41,7 +41,7 @@ from desktop.conf import TASK_SERVER
 from desktop.lib import export_csvxls, fsmanager
 from desktop.models import Document2
 from desktop.settings import CACHES_CELERY_KEY, CACHES_CELERY_QUERY_RESULT_KEY
-from useradmin.models import User
+from useradmin.models import User, orm_user_lookup
 
 from notebook.api import _get_statement
 from notebook.connectors.base import get_api, QueryExpired, ExecutionWrapper
@@ -152,7 +152,7 @@ def run_sync_query(doc_id, user):
   # Add variable substitution
   # Send notifications: done/on failure
   if type(user) is str:
-    lookup = {'email' if ENABLE_ORGANIZATIONS.get() else 'username': user}
+    lookup = {orm_user_lookup(): user}
     user = User.objects.get(**lookup)
     user = rewrite_user(user)