diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index d96ffe2..5b76f1c 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -49,6 +49,7 @@ tasks.jar { ":contact:jar", ":core:jar", ":documents:jar", + ":files:jar", ":items:jar", ":legacy:jar", ":markdown:jar", diff --git a/files/src/main/java/de/srsoftware/umbrella/files/FileModule.java b/files/src/main/java/de/srsoftware/umbrella/files/FileModule.java index 6eeea6b..01b5414 100644 --- a/files/src/main/java/de/srsoftware/umbrella/files/FileModule.java +++ b/files/src/main/java/de/srsoftware/umbrella/files/FileModule.java @@ -199,15 +199,36 @@ public class FileModule extends BaseHandler implements FileService { return getFile(ex, file); } - private boolean postCompanyDirectory(Path path, HttpExchange ex, UmbrellaUser umbrellaUser) { + private boolean postCompanyDirectory(Path path, HttpExchange ex, UmbrellaUser user) throws IOException { return false; } - private boolean postProjectDirectory(Path path, HttpExchange ex, UmbrellaUser umbrellaUser) { + private boolean postProjectDirectory(Path path, HttpExchange ex, UmbrellaUser user) throws IOException { return false; } - private boolean postUserDirectory(Path path, HttpExchange ex, UmbrellaUser umbrellaUser) { - return false; + private boolean postUserDirectory(Path path, HttpExchange ex, UmbrellaUser user) throws IOException { + var userId = path.pop(); + if (userId == null) throw missingFieldException(USER_ID); + long uid; + try { + uid = Long.parseLong(userId); + } catch (NumberFormatException e) { + throw invalidFieldException(PROJECT_ID,"Long"); + } + var filename = "/user/"+uid; + if (!path.empty()) filename += "/"+URLDecoder.decode(path.toString(),UTF_8); + if (uid != user.id() && !fileDb.isPermitted(user,filename)) throw forbidden("You are not allowed to access {0}",filename); + var file = new File(baseDir+filename); + if (file.exists()) throw unprocessable("{0} already exists!",filename); + try { + file.mkdirs(); + } catch (Exception e) { + throw unprocessable("Failed to create {0}",filename); + } + Map map = getDirectory(file.getParentFile()); + map.put("title",filename); + return sendContent(ex,map); + } } diff --git a/frontend/src/routes/files/Index.svelte b/frontend/src/routes/files/Index.svelte index 5a2cc31..f2c366d 100644 --- a/frontend/src/routes/files/Index.svelte +++ b/frontend/src/routes/files/Index.svelte @@ -35,15 +35,15 @@ async function create_dir(ev){ ev.preventDefault(); ev.stopPropagation(); - const url = api('files/'+path+'/'+new_dir); - alert(url); + const url = api('files'+path+'/'+new_dir); const res = await fetch(url,{ credentials: 'include', method: 'POST' }); if (res.ok) { yikes(); - loadChildren(window.location.pathname) + loadChildren(window.location.pathname); + new_dir = null; } else { error(res); }