From 7124eb9362818d79082666262d6d12d3550d2549 Mon Sep 17 00:00:00 2001 From: Luka Hietala Date: Mon, 8 Dec 2025 12:18:21 +0200 Subject: [PATCH] =?UTF-8?q?lis=C3=A4=C3=A4=20file=20upload?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.lua | 20 ++++++++++++++++++- koivuhaka.sqlite | Bin 16384 -> 16384 bytes static/images/n02112018_4583.jpg | Bin 0 -> 15966 bytes views/hallintapaneeli.etlua | 33 ++++++++++++++++++++++--------- views/index.etlua | 2 -- views/layout.etlua | 4 +++- 6 files changed, 46 insertions(+), 13 deletions(-) create mode 100644 static/images/n02112018_4583.jpg diff --git a/app.lua b/app.lua index 446cd10..862c663 100644 --- a/app.lua +++ b/app.lua @@ -75,9 +75,26 @@ app:match("hallintapaneeli", "/hallintapaneeli", respond_to({ -- luo asunto entry ja muokkaa sivua POST = function(self) local address = strip(self.params.address) - local picture = strip(self.params.picture) + local picture_file = self.params.file local price = strip(self.params.price) + local picture = "" + -- write img binary to file, risky and not validation :D. all params are TRUSTED + -- path traversal attacks possible + -- https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Disposition#Directives + local out = io.open("./static/images/" .. picture_file.filename, "wb") + if out == nil then + return { redirect_to = "/" } + end + -- nginx limits the img size to 1mb by defaykt + + local data = picture_file.content + data = string.gsub(data, "\r\n", "\n") -- for unix + out:write(data) + out:close() + + picture = "http://localhost:8080/static/images/" .. picture_file.filename --öaldsfkölsadkfölakdsfölkasöldfkö + if address == "" or picture == "" or price == "" then return { redirect_to = "/hallintapaneeli"} end @@ -92,3 +109,4 @@ app:match("hallintapaneeli", "/hallintapaneeli", respond_to({ })) return app + diff --git a/koivuhaka.sqlite b/koivuhaka.sqlite index 9fe4509ccf53e1322d43be991d098743eac7f501..e596de10da18af87587300b127ef5340793efc76 100644 GIT binary patch delta 128 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 literal 0 HcmV?d00001 diff --git a/views/hallintapaneeli.etlua b/views/hallintapaneeli.etlua index 6c29b5f..4f0e570 100644 --- a/views/hallintapaneeli.etlua +++ b/views/hallintapaneeli.etlua @@ -1,10 +1,25 @@ -
-
-
-
-
-
-
- -
+
+

Luo uusi asunto

+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ + + + + diff --git a/views/index.etlua b/views/index.etlua index 267eafd..2247dcc 100644 --- a/views/index.etlua +++ b/views/index.etlua @@ -4,7 +4,6 @@ Koivuhaan asunto -