Browse Source

HUE-8530 [organization] Unify get_organization function

Romain 5 years ago
parent
commit
70bc31c9eb

+ 1 - 1
apps/useradmin/src/useradmin/models.py

@@ -361,7 +361,7 @@ def install_sample_user(django_user=None):
     else:
       user_attributes = lookup.copy()
       if ENABLE_ORGANIZATIONS.get():
-        user_attributes['organization'] = get_organization(django_user)
+        user_attributes['organization'] = get_organization(user=django_user)
       user_attributes.update({
         'password': '!',
         'is_active': False,

+ 13 - 8
apps/useradmin/src/useradmin/models2.py

@@ -22,24 +22,29 @@ from django.contrib.auth.models import models, AbstractUser, BaseUserManager
 from django.utils.translation import ugettext_lazy as _t
 
 
-
 LOG = logging.getLogger(__name__)
 
 
 '''
-Organizations handle contained sets of setups (user, group, connectors).
+Organizations handle contained sets of setups (user, group, connectors...).
 '''
 
 def default_organization():
-  default_organization, created = Organization.objects.get_or_create(name='default')
+  default_organization, created = Organization.objects.get_or_create(name='default', domain='default')
   return default_organization
 
-def get_organization(user):
-  # TODO: depends on the logged-in user and its organization
-  return default_organization()
 
-def uuid_default():
-  return str(uuid.uuid4())
+def get_organization(email, is_multi_user=False):
+  domain = email.split('@')[1]
+
+  if domain:
+    organization, created = Organization.objects.get_or_create(name=domain, domain=domain, is_multi_user=is_multi_user)
+    LOG.info("Materializing organization %s in the database, is_multi_user=%s" % (domain, is_multi_user))
+  else:
+    LOG.warn('No organization domain found for email %s' % email)  # For Backends without emails or when organization enabled by default
+    organization = default_organization()
+
+  return organization
 
 
 def uuid_default():

+ 12 - 9
desktop/core/src/desktop/auth/backend.py

@@ -53,12 +53,14 @@ from desktop.conf import AUTH, LDAP, OIDC, ENABLE_ORGANIZATIONS
 from desktop.settings import LOAD_BALANCER_COOKIE
 
 from useradmin import ldap_access
-from useradmin.models import get_profile, get_default_user_group, UserProfile, User, Organization
+from useradmin.models import get_profile, get_default_user_group, UserProfile, User, Organization, get_organization
 
 
 LOG = logging.getLogger(__name__)
 
 
+# TODO: slowly move those utils to the useradmin module
+
 def load_augmentation_class():
   """
   Loads the user augmentation class.
@@ -98,8 +100,8 @@ def rewrite_user(user):
     for attr in ('get_groups', 'get_home_directory', 'has_hue_permission', 'get_permissions'):
       setattr(user, attr, getattr(augment, attr))
 
-    profile_data = get_profile(user).data
-    setattr(user, 'auth_backend', profile_data.get('auth_backend'))
+    setattr(user, 'profile', get_profile(user))
+    setattr(user, 'auth_backend', user.profile.data.get('auth_backend'))
   return user
 
 
@@ -166,7 +168,13 @@ def create_user(username, password, is_superuser=True):
     user.set_unusable_password()
   else:
     user.set_password(password)
-  user.is_superuser = is_superuser
+
+  if ENABLE_ORGANIZATIONS.get():
+    user.is_admin = is_superuser
+    user.is_superuser = User.objects.exists()
+  else:
+    user.is_superuser = is_superuser
+
   user.save()
 
   return user
@@ -191,11 +199,6 @@ def force_username_case(username):
     username = username.upper()
   return username
 
-def get_organization(email):
-  domain = email.split('@')[1]
-  organization, created = Organization.objects.get_or_create(name=domain)
-  return organization
-
 
 class DesktopBackendBase(object):
   """

+ 1 - 1
desktop/core/src/desktop/models.py

@@ -95,7 +95,7 @@ def _version_from_properties(f):
 
 def get_sample_user_install(user):
   if ENABLE_ORGANIZATIONS.get():
-   return SAMPLE_USER_INSTALL + '@' + get_organization(user).name + '.com' # TODO: proper default domain
+   return SAMPLE_USER_INSTALL + '@' + get_organization(email=user.email).domain
   else:
     return SAMPLE_USER_INSTALL
 

+ 3 - 0
desktop/core/src/desktop/templates/login.mako

@@ -149,6 +149,9 @@ ${ commonheader(_("Welcome to Hue"), "login", user, request, "50px", True, True)
       % else:
         <input type="submit" class="btn btn-primary" value="${ _('Sign In') }"/>
       % endif
+      % if ENABLE_ORGANIZATIONS.get():
+        <input type="submit" class="btn btn-primary" value="${ _('Create Account') }"/>
+      % endif
     % endif
 
     <input type="hidden" name="next" value="${next}"/>