AIRAVATA-3682 Make shared directory work with remote user storage API
diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index b259c71..030b4a8 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -2,6 +2,7 @@
 import datetime
 import json
 import logging
+from pathlib import Path
 from urllib.parse import quote
 
 from airavata.model.appcatalog.appdeployment.ttypes import (
@@ -944,6 +945,26 @@
 
     def get_userHasWriteAccess(self, instance):
         request = self.context['request']
+        # Special handling when using remote API to access user data storage
+        if hasattr(settings, 'GATEWAY_DATA_STORE_REMOTE_API'):
+            if "userHasWriteAccess" in instance:
+                return instance["userHasWriteAccess"]
+            elif instance.get("isDir", False):
+                path = Path(instance.get("path", ""))
+                if path != Path(""):
+                    # get parent directory listing and use that to figure out if
+                    # there is write access to this directory
+                    directories, _ = user_storage.listdir(request, path.parent)
+                    for d in directories:
+                        if Path(d["path"]) == path:
+                            return d.get("userHasWriteAccess", False)
+                    return False
+                else:
+                    # User always has write access on home directory
+                    return True
+            else:
+                return False
+
         is_shared_dir = view_utils.is_shared_dir(instance["path"])
         is_shared_path = view_utils.is_shared_path(instance["path"])
         if is_shared_dir:
@@ -984,6 +1005,8 @@
     isSharedDir = serializers.SerializerMethodField()
 
     def get_isSharedDir(self, directory):
+        if "isSharedDir" in directory:
+            return directory["isSharedDir"]
         return view_utils.is_shared_dir(directory["path"])
 
 
diff --git a/django_airavata/apps/api/view_utils.py b/django_airavata/apps/api/view_utils.py
index bda38db..a827434 100644
--- a/django_airavata/apps/api/view_utils.py
+++ b/django_airavata/apps/api/view_utils.py
@@ -2,6 +2,7 @@
 import os
 from collections.__init__ import OrderedDict
 from datetime import datetime
+from pathlib import Path
 
 import pytz
 from airavata_django_portal_sdk import user_storage
@@ -232,7 +233,7 @@
 
 def is_shared_dir(path):
     shared_dirs: dict = getattr(settings, 'GATEWAY_DATA_SHARED_DIRECTORIES', {})
-    return any(map(lambda n: n == path, shared_dirs.keys()))
+    return any(map(lambda n: Path(n) == Path(path), shared_dirs.keys()))
 
 
 def is_shared_path(path):