From d10d8d4d09cd82cd339c1df0153db0da47dcadd9 Mon Sep 17 00:00:00 2001
From: Stefano Alberto Russo <stefano.russo@gmail.com>
Date: Fri, 8 Apr 2022 01:59:02 +0200
Subject: [PATCH] Fixes in the file manager API, including creating the base
 path user directory if not existent.

---
 services/webapp/code/rosetta/core_app/api.py | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/services/webapp/code/rosetta/core_app/api.py b/services/webapp/code/rosetta/core_app/api.py
index c52dd77..77f5e26 100644
--- a/services/webapp/code/rosetta/core_app/api.py
+++ b/services/webapp/code/rosetta/core_app/api.py
@@ -516,7 +516,10 @@ class FileManagerAPI(PrivateGETAPI, PrivatePOSTAPI):
             
             # Did we just get a "cannot stat - No such file or directory error?
             if 'No such file or directory' in out.stderr:
-                pass
+                if path == '/':
+                    self.mkdir(self.sanitize_and_prepare_shell_path('/', storage, user), user, storage, force=True)
+                else:
+                    return data
             else:
                 raise Exception(out.stderr)
                             
@@ -630,12 +633,15 @@ class FileManagerAPI(PrivateGETAPI, PrivatePOSTAPI):
         return out.stdout
 
 
-    def mkdir(self, path, user, storage):
+    def mkdir(self, path, user, storage, force=False):
         
         path = self.sanitize_and_prepare_shell_path(path, storage, user)
         
         # Prepare command
-        command = self.ssh_command('mkdir {}'.format(path), user, storage.computing)
+        if force:
+            command = self.ssh_command('mkdir -p {}'.format(path), user, storage.computing)
+        else:
+            command = self.ssh_command('mkdir {}'.format(path), user, storage.computing)
         
         # Execute_command
         out = os_shell(command, capture=True)
-- 
GitLab