Browse Source

HUE-8530 [organization] Simplify the user auth lookup attributes

Romain 5 years ago
parent
commit
8f4beb5b01

+ 9 - 5
apps/useradmin/src/useradmin/organization.py

@@ -32,7 +32,7 @@ LOG = logging.getLogger(__name__)
 
 
 def default_organization():
 def default_organization():
   from useradmin.models import Organization
   from useradmin.models import Organization
-  default_organization, created = Organization.objects.get_or_create(name='default', domain='default')
+  default_organization, created = Organization.objects.get_or_create(name='default', domain='default')  # Used in SyncDb currently
   return default_organization
   return default_organization
 
 
 
 
@@ -58,10 +58,6 @@ def _fitered_queryset(queryset, by_owner=False):
   return queryset
   return queryset
 
 
 
 
-"""
-Organizations handle contained sets of setups (user, group, connectors...).
-"""
-
 def get_organization(email, is_multi_user=False):
 def get_organization(email, is_multi_user=False):
   domain = email.split('@')[1] if is_multi_user else email
   domain = email.split('@')[1] if is_multi_user else email
 
 
@@ -89,6 +85,14 @@ class OrganizationManager(models.Manager):
 
 
 if ENABLE_ORGANIZATIONS.get():
 if ENABLE_ORGANIZATIONS.get():
   class Organization(models.Model):
   class Organization(models.Model):
+    """
+    Organizations handle contained sets of setups (user, group, connectors...).
+
+    An external user create an account and gets attached to its single user organization and becomes its admin. The organization can
+    be later converted to a multi user organization (if the domain name is owned by the first user).
+
+    An organization admin is not a Hue admin. The later is the true super user and has access to the server logs and metrics.
+    """
     name = models.CharField(max_length=200, help_text=_t("The name of the organization"), unique=True)
     name = models.CharField(max_length=200, help_text=_t("The name of the organization"), unique=True)
     uuid = models.CharField(default=uuid_default, max_length=36, unique=True)
     uuid = models.CharField(default=uuid_default, max_length=36, unique=True)
     domain = models.CharField(max_length=200, help_text=_t("The domain name of the organization, e.g. gethue.com"), unique=True)
     domain = models.CharField(max_length=200, help_text=_t("The domain name of the organization, e.g. gethue.com"), unique=True)

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

@@ -53,8 +53,8 @@ from desktop.conf import AUTH, LDAP, OIDC, ENABLE_ORGANIZATIONS
 from desktop.settings import LOAD_BALANCER_COOKIE
 from desktop.settings import LOAD_BALANCER_COOKIE
 
 
 from useradmin import ldap_access
 from useradmin import ldap_access
-from useradmin.organization import default_organization
-from useradmin.models import get_profile, get_default_user_group, UserProfile, User, get_organization
+from useradmin.models import get_profile, get_default_user_group, UserProfile, User
+from useradmin.organization import get_organization
 
 
 
 
 LOG = logging.getLogger(__name__)
 LOG = logging.getLogger(__name__)
@@ -70,7 +70,7 @@ def load_augmentation_class():
   try:
   try:
     class_name = AUTH.USER_AUGMENTOR.get()
     class_name = AUTH.USER_AUGMENTOR.get()
     i = class_name.rfind('.')
     i = class_name.rfind('.')
-    module, attr = class_name[:i], class_name[i+1:]
+    module, attr = class_name[:i], class_name[i + 1:]
     mod = import_module(module)
     mod = import_module(module)
     klass = getattr(mod, attr)
     klass = getattr(mod, attr)
     LOG.info("Augmenting users with class: %s" % (klass,))
     LOG.info("Augmenting users with class: %s" % (klass,))
@@ -162,36 +162,31 @@ class DefaultUserAugmentor(object):
 
 
 
 
 def find_user(username):
 def find_user(username):
-  lookup = {'email': username} if ENABLE_ORGANIZATIONS.get() else {'username': username}
-
   try:
   try:
-    user = User.objects.get(**lookup)
-    LOG.debug("Found user %s in the db" % username)
+    user = User.objects.get(username=username)
+    LOG.debug("Found user %s" % username)
   except User.DoesNotExist:
   except User.DoesNotExist:
     user = None
     user = None
   return user
   return user
 
 
 
 
 def create_user(username, password, is_superuser=True):
 def create_user(username, password, is_superuser=True):
-  if ENABLE_ORGANIZATIONS.get():
-    organization = get_organization(email=username)
-    lookup = {'email': username, 'organization': organization}
-  else:
-    lookup = {'username': username}
-
-  LOG.info("Materializing user %s in the database" % lookup)
-
-  user = User(**lookup)
+  user = User(username=username, is_superuser=is_superuser)
 
 
   if password is None:
   if password is None:
     user.set_unusable_password()
     user.set_unusable_password()
   else:
   else:
     user.set_password(password)
     user.set_password(password)
 
 
-  user.is_superuser = is_superuser
+  if ENABLE_ORGANIZATIONS.get():
+    user.email = username
+    organization = get_organization(email=username)
+    user.organization = organization
 
 
   user.save()
   user.save()
 
 
+  LOG.info("User %s was created." % username)
+
   if ENABLE_ORGANIZATIONS.get():
   if ENABLE_ORGANIZATIONS.get():
     user.is_admin = is_superuser or not organization.organizationuser_set.exists() or not organization.is_multi_user
     user.is_admin = is_superuser or not organization.organizationuser_set.exists() or not organization.is_multi_user
     ensure_has_a_group(user)
     ensure_has_a_group(user)

+ 1 - 1
desktop/core/src/desktop/templates/connectors/connectors.mako

@@ -358,7 +358,7 @@ ${ layout.menubar(section='connectors') }
       <tbody data-bind="foreach: settings">
       <tbody data-bind="foreach: settings">
         <tr>
         <tr>
           <td data-bind="text: name"></td>
           <td data-bind="text: name"></td>
-          <td><input data-bind="value: value"></td>
+          <td><input data-bind="value: value" class="input-xxlarge"></td>
         </tr>
         </tr>
       </tbody>
       </tbody>
     </table>
     </table>