Browse Source

[raz] Inject proper username in case it is not present

Romain Rigaux 4 years ago
parent
commit
fd8cdf7dcd

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

@@ -73,6 +73,7 @@ class ProxyFS(object):
 
   def _has_access(self, fs):
     from desktop.auth.backend import rewrite_user  # Avoid cyclic loop
+    from desktop.conf import RAZ
     try:
       filebrowser_action = fs.filebrowser_action()
       # If not filebrowser_action (hdfs) then handle permission via doas else check permission in hue
@@ -80,7 +81,7 @@ class ProxyFS(object):
         return True
       user = rewrite_user(User.objects.get(username=self.getuser()))
       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"))
+        (is_admin(user) or not filebrowser_action or user.has_hue_permission(action=filebrowser_action, app="filebrowser") or RAZ.IS_ENABLED.get())
 
     except User.DoesNotExist:
       LOG.exception('proxyfs.has_access()')

+ 8 - 0
desktop/core/src/desktop/lib/raz/raz_client.py

@@ -181,6 +181,14 @@ class RazClient(object):
 
 
 def get_raz_client(raz_url, username, auth='kerberos', service='s3', service_name='cm_s3', cluster_name='myCluster'):
+  if not username:
+    from crequest.middleware import CrequestMiddleware
+    request = CrequestMiddleware.get_request()
+    username = request.user.username if request and hasattr(request, 'user') and request.user.is_authenticated else None
+
+  if not username:
+    raise PopupException('No username set.')
+
   if auth == 'kerberos' or True:  # True until JWT option
     auth_handler = requests_kerberos.HTTPKerberosAuth(mutual_authentication=requests_kerberos.OPTIONAL)
 

+ 4 - 0
desktop/core/src/desktop/middleware.py

@@ -147,6 +147,10 @@ class ClusterMiddleware(MiddlewareMixin):
 
       if request.fs is not None:
         request.fs.setuser(request.user.username)
+      else:
+        LOG.warning("request.fs user was not set")
+    else:
+      LOG.warning("request.fs was not set")
 
     # Deprecated
     request.jt = None