Diff between ed8602eb3a2bcdfd67d61e1995ff847ecd65c5bb and cb2e24883472d1102d665aa7348490b2d947b4b5

Changed Files

File Additions Deletions Status
.gitignore +1 -0 modified
app.lua +79 -18 modified
config.lua +2 -0 modified
koivuhaka.sqlite +0 -0 modified
logs/access.log +0 -138 deleted
logs/error.log +0 -2 deleted
logs/nginx.pid +0 -1 deleted
views/hallintapaneeli.etlua +10 -0 added
views/index.etlua +0 -2 modified
views/kirjaudu.etlua +11 -0 added

Full Patch

diff --git a/.gitignore b/.gitignore
index e69de29..5292519 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+logs/
\ No newline at end of file
diff --git a/app.lua b/app.lua
index 3af69ce..446cd10 100644
--- a/app.lua
+++ b/app.lua
@@ -1,33 +1,94 @@
 local lapis = require("lapis")
+local bcrypt = require("bcrypt")
 local db = require("lapis.db")
 local app = lapis.Application()
+local respond_to = require("lapis.application").respond_to
 
 app:enable("etlua")
 app.layout = require "views.layout"
 
--- Source - https://stackoverflow.com/a
--- Posted by hookenz, modified by community. See post 'Timeline' for change history
--- Retrieved 2025-11-26, License - CC BY-SA 4.0
-
-local function dump(o)
-   if type(o) == 'table' then
-      local s = '{ '
-      for k,v in pairs(o) do
-         if type(k) ~= 'number' then k = '"'..k..'"' end
-         s = s .. '['..k..'] = ' .. dump(v) .. ','
-      end
-      return s .. '} '
-   else
-      return tostring(o)
-   end
+-- removes leading and trailing spaces
+local function strip(str)
+   return str:match( "^%s*(.-)%s*$" )
 end
 
+-- checks if str is number (not float)
+local function isNumber(str)
+    if not str:match("^%-?%d+$") then
+	return false
+    else
+	return true
+    end
+end
 
-app:get("/", function(self)
+app:get("index", "/", function(self)
     local res = db.query("SELECT * FROM asunnot")
-    self.dump = dump(res)
     self.asunnot = res
-    return { render = "index" }
+    return { render = true }
 end)
 
+app:match("kirjaudu", "/kirjaudu", respond_to({
+  GET = function(self)
+    self.err = self.params.error
+    return { render = true }
+  end,
+
+  POST = function(self)
+    local name = strip(self.params.name)
+    local password = strip(self.params.password)
+
+    if name == "" or password == "" then
+	return { redirect_to = "/kirjaudu"}
+    end
+
+    local user = db.query("SELECT * FROM kayttajat WHERE nimi = ?", name)[1]
+    if not user then
+	return { redirect_to = self:url_for("kirjaudu", {}, { error = "Käyttäjää ei löytynyt " }) }
+    end
+
+    local ok, _ = pcall(function()
+	assert(bcrypt.verify(password, user["salasana_hash"]))
+    end)
+
+    if user["nimi"] == name and ok then
+	self.session.user = {}
+	self.session.user.id = user["id"]
+	self.session.user.name = user["nimi"]
+    else
+	return { redirect_to = self:url_for("kirjaudu", {}, { error = "Väärä salasana" }) }
+    end
+
+    return { redirect_to = "/hallintapaneeli" }
+  end
+}))
+
+app:match("hallintapaneeli", "/hallintapaneeli", respond_to({
+  before = function(self)
+    if not self.session.user then
+      self:write({ redirect_to = "/kirjaudu" })
+    end
+  end,
+
+  GET = function()
+    return { render = true }
+  end,
+  -- luo asunto entry ja muokkaa sivua
+  POST = function(self)
+    local address = strip(self.params.address)
+    local picture = strip(self.params.picture)
+    local price = strip(self.params.price)
+
+    if address == "" or picture == "" or price == "" then
+	return { redirect_to = "/hallintapaneeli"}
+    end
+
+    if not isNumber(price) then
+	return { redirect_to = "/hallintapaneeli"}
+    end
+
+    db.query("INSERT INTO asunnot (osoite, kuva, hinta) VALUES (?, ?, ?)", address, picture, price)
+    return { redirect_to = "/" }
+  end
+}))
+
 return app
diff --git a/config.lua b/config.lua
index a38fde4..cb9ce58 100644
--- a/config.lua
+++ b/config.lua
@@ -4,6 +4,8 @@ config("development", {
   server = "nginx",
   code_cache = "off",
   num_workers = "1",
+  session_name = "auth",
+  secret = "pomerianille-talvitossut",
   sqlite = {
     database = "koivuhaka.sqlite",
   }
diff --git a/koivuhaka.sqlite b/koivuhaka.sqlite
index 4e7ad2a..9fe4509 100644
Binary files a/koivuhaka.sqlite and b/koivuhaka.sqlite differ
diff --git a/logs/access.log b/logs/access.log
deleted file mode 100644
index de3be99..0000000
--- a/logs/access.log
+++ /dev/null
@@ -1,138 +0,0 @@
-127.0.0.1 - - [25/Nov/2025:14:43:15 +0200] "GET / HTTP/1.1" 200 4229 "http://localhost:8080/Pentulive" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [25/Nov/2025:14:44:24 +0200] "GET / HTTP/1.1" 200 4847 "http://localhost:8080/Pentulive" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [25/Nov/2025:14:44:59 +0200] "GET / HTTP/1.1" 200 5039 "http://localhost:8080/Pentulive" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [25/Nov/2025:14:45:33 +0200] "GET / HTTP/1.1" 200 4931 "http://localhost:8080/Pentulive" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [25/Nov/2025:14:46:07 +0200] "GET / HTTP/1.1" 200 4949 "http://localhost:8080/Pentulive" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [25/Nov/2025:14:46:12 +0200] "GET / HTTP/1.1" 200 4955 "http://localhost:8080/Pentulive" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [25/Nov/2025:14:46:13 +0200] "GET / HTTP/1.1" 200 4955 "http://localhost:8080/Pentulive" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:03:51 +0200] "GET / HTTP/1.1" 200 4955 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:03:51 +0200] "GET /favicon.ico HTTP/1.1" 404 159 "http://localhost:8080/" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:03:51 +0200] "GET / HTTP/1.1" 200 4955 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:13:20 +0200] "GET / HTTP/1.1" 200 4955 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:17:39 +0200] "GET / HTTP/1.1" 200 5129 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:18:12 +0200] "GET / HTTP/1.1" 200 5067 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:22:43 +0200] "GET / HTTP/1.1" 200 5375 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:23:03 +0200] "GET / HTTP/1.1" 200 5393 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:24:18 +0200] "GET / HTTP/1.1" 200 5389 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:25:23 +0200] "GET / HTTP/1.1" 200 5419 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:25:35 +0200] "GET / HTTP/1.1" 200 5406 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:26:48 +0200] "GET / HTTP/1.1" 200 5411 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:27:05 +0200] "GET / HTTP/1.1" 200 5411 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:28:39 +0200] "GET / HTTP/1.1" 200 5428 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:29:07 +0200] "GET / HTTP/1.1" 200 5434 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:30:01 +0200] "GET / HTTP/1.1" 200 5396 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:32:08 +0200] "GET / HTTP/1.1" 200 5806 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:32:25 +0200] "GET / HTTP/1.1" 200 5812 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:32:55 +0200] "GET / HTTP/1.1" 200 5804 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:33:12 +0200] "GET / HTTP/1.1" 200 5809 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:33:36 +0200] "GET / HTTP/1.1" 200 5359 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:34:27 +0200] "GET / HTTP/1.1" 200 5375 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:34:40 +0200] "GET / HTTP/1.1" 200 5398 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:34:47 +0200] "GET / HTTP/1.1" 200 5398 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:35:09 +0200] "GET / HTTP/1.1" 200 5404 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:35:21 +0200] "GET / HTTP/1.1" 200 5398 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:35:58 +0200] "GET / HTTP/1.1" 200 5406 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:36:09 +0200] "GET / HTTP/1.1" 200 5361 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:36:35 +0200] "GET / HTTP/1.1" 200 5386 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:36:47 +0200] "GET / HTTP/1.1" 200 5392 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:37:14 +0200] "GET / HTTP/1.1" 200 5405 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:37:27 +0200] "GET / HTTP/1.1" 200 5405 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:38:24 +0200] "GET / HTTP/1.1" 200 5388 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:08:38:43 +0200] "GET / HTTP/1.1" 200 5393 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:14:19 +0200] "GET / HTTP/1.1" 200 5421 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:14:40 +0200] "GET / HTTP/1.1" 200 5449 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:15:06 +0200] "GET / HTTP/1.1" 200 5393 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:15:12 +0200] "GET / HTTP/1.1" 200 5393 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:15:12 +0200] "GET /favicon.ico HTTP/1.1" 404 159 "http://localhost:8080/" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:16:53 +0200] "GET / HTTP/1.1" 200 5411 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:18:31 +0200] "GET / HTTP/1.1" 200 5475 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:20:35 +0200] "GET / HTTP/1.1" 200 5492 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:21:28 +0200] "GET / HTTP/1.1" 200 5503 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:21:39 +0200] "GET / HTTP/1.1" 200 5512 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:21:49 +0200] "GET / HTTP/1.1" 200 5516 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:22:00 +0200] "GET / HTTP/1.1" 200 5519 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:22:28 +0200] "GET / HTTP/1.1" 200 5526 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:22:35 +0200] "GET / HTTP/1.1" 200 5525 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:22:56 +0200] "GET / HTTP/1.1" 200 5521 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:23:22 +0200] "GET / HTTP/1.1" 200 5527 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:24:52 +0200] "GET / HTTP/1.1" 200 5529 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:25:40 +0200] "GET / HTTP/1.1" 200 5537 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:27:24 +0200] "GET / HTTP/1.1" 200 5547 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:27:30 +0200] "GET / HTTP/1.1" 200 5547 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:27:36 +0200] "GET / HTTP/1.1" 200 5547 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:35:23 +0200] "GET / HTTP/1.1" 200 5569 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:35:24 +0200] "GET /favicon.ico HTTP/1.1" 404 159 "http://localhost:8080/" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:35:38 +0200] "GET / HTTP/1.1" 200 5566 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:35:53 +0200] "GET / HTTP/1.1" 200 5572 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:35:54 +0200] "GET / HTTP/1.1" 200 5572 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:35:54 +0200] "GET / HTTP/1.1" 200 5572 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:36:27 +0200] "GET / HTTP/1.1" 200 5572 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:36:58 +0200] "GET / HTTP/1.1" 200 5585 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:37:48 +0200] "GET / HTTP/1.1" 200 5584 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:38:59 +0200] "GET / HTTP/1.1" 200 5585 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:39:19 +0200] "GET / HTTP/1.1" 200 5601 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:39:29 +0200] "GET / HTTP/1.1" 200 5600 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:42:28 +0200] "GET / HTTP/1.1" 200 5584 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:42:37 +0200] "GET / HTTP/1.1" 200 5584 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:42:42 +0200] "GET / HTTP/1.1" 200 5584 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:42:55 +0200] "GET / HTTP/1.1" 200 5584 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:43:52 +0200] "GET / HTTP/1.1" 200 5583 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:52:43 +0200] "GET / HTTP/1.1" 200 7553 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:52:44 +0200] "GET /favicon.ico HTTP/1.1" 404 159 "http://localhost:8080/" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:52:57 +0200] "GET / HTTP/1.1" 200 6569 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:53:52 +0200] "GET / HTTP/1.1" 200 6569 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:54:33 +0200] "GET / HTTP/1.1" 200 6659 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:54:40 +0200] "GET / HTTP/1.1" 200 6659 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:55:07 +0200] "GET / HTTP/1.1" 200 6209 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:55:16 +0200] "GET / HTTP/1.1" 200 6185 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:09:55:48 +0200] "GET / HTTP/1.1" 200 6215 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:06:06 +0200] "GET / HTTP/1.1" 200 5874 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:06:10 +0200] "GET / HTTP/1.1" 200 5874 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:06:10 +0200] "GET /favicon.ico HTTP/1.1" 404 159 "http://localhost:8080/" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:06:11 +0200] "GET / HTTP/1.1" 200 5874 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:06:12 +0200] "GET / HTTP/1.1" 200 5874 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:06:12 +0200] "GET / HTTP/1.1" 200 5874 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:06:13 +0200] "GET /favicon.ico HTTP/1.1" 404 159 "http://localhost:8080/" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:09:13 +0200] "GET / HTTP/1.1" 200 5874 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:09:15 +0200] "GET / HTTP/1.1" 200 5874 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:09:15 +0200] "GET / HTTP/1.1" 200 5874 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:09:16 +0200] "GET /favicon.ico HTTP/1.1" 404 159 "http://localhost:8080/" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:09:25 +0200] "GET / HTTP/1.1" 200 5264 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:10:21 +0200] "GET / HTTP/1.1" 200 5244 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:27:51 +0200] "GET / HTTP/1.1" 200 5274 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:27:52 +0200] "GET / HTTP/1.1" 200 5274 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:29:33 +0200] "GET / HTTP/1.1" 200 5244 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:30:48 +0200] "GET / HTTP/1.1" 200 5301 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:33:55 +0200] "GET / HTTP/1.1" 500 1806 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:34:26 +0200] "GET / HTTP/1.1" 200 7772 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:35:19 +0200] "GET / HTTP/1.1" 200 7772 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:36:09 +0200] "GET / HTTP/1.1" 200 6479 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:36:29 +0200] "GET / HTTP/1.1" 200 4520 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:51:42 +0200] "GET / HTTP/1.1" 200 4520 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:51:56 +0200] "GET / HTTP/1.1" 200 4504 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:53:45 +0200] "GET / HTTP/1.1" 200 4550 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:10:54:27 +0200] "GET / HTTP/1.1" 200 4547 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:11:56:35 +0200] "GET / HTTP/1.1" 500 1620 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:11:56:35 +0200] "GET /favicon.ico HTTP/1.1" 404 159 "http://localhost:8080/" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:11:56:37 +0200] "GET / HTTP/1.1" 500 1620 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:11:58:54 +0200] "GET / HTTP/1.1" 200 4873 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:11:59:58 +0200] "GET / HTTP/1.1" 200 4885 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:00:02 +0200] "GET / HTTP/1.1" 200 4885 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:00:03 +0200] "GET /favicon.ico HTTP/1.1" 404 159 "http://localhost:8080/" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:00:09 +0200] "GET / HTTP/1.1" 200 4885 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:01:12 +0200] "GET / HTTP/1.1" 200 4900 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:01:31 +0200] "GET / HTTP/1.1" 200 4912 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:02:08 +0200] "GET / HTTP/1.1" 200 4910 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:02:18 +0200] "GET / HTTP/1.1" 200 4909 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:04:52 +0200] "GET / HTTP/1.1" 200 4906 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:04:53 +0200] "GET / HTTP/1.1" 200 4906 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:05:13 +0200] "GET / HTTP/1.1" 200 4906 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:08:05 +0200] "GET / HTTP/1.1" 200 8159 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:08:06 +0200] "GET / HTTP/1.1" 200 8159 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:08:18 +0200] "GET / HTTP/1.1" 200 8159 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:08:19 +0200] "GET /favicon.ico HTTP/1.1" 404 159 "http://localhost:8080/" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:08:44 +0200] "GET / HTTP/1.1" 200 7780 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:08:44 +0200] "GET /favicon.ico HTTP/1.1" 404 159 "http://localhost:8080/" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:08:59 +0200] "GET / HTTP/1.1" 200 6190 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:09:08 +0200] "GET / HTTP/1.1" 200 6190 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
-127.0.0.1 - - [26/Nov/2025:12:09:23 +0200] "GET / HTTP/1.1" 200 6190 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0"
diff --git a/logs/error.log b/logs/error.log
deleted file mode 100644
index 7fee899..0000000
--- a/logs/error.log
+++ /dev/null
@@ -1,2 +0,0 @@
-2025/11/25 14:43:13 [alert] 47449#0: lua_code_cache is off; this will hurt performance in /home/lhietala/repos/koivuhaka/nginx.conf.compiled:20
-2025/11/26 08:03:47 [alert] 4333#0: lua_code_cache is off; this will hurt performance in /home/lhietala/repos/koivuhaka/nginx.conf.compiled:20
diff --git a/logs/nginx.pid b/logs/nginx.pid
deleted file mode 100644
index 736d2a9..0000000
--- a/logs/nginx.pid
+++ /dev/null
@@ -1 +0,0 @@
-4333
diff --git a/views/hallintapaneeli.etlua b/views/hallintapaneeli.etlua
new file mode 100644
index 0000000..6c29b5f
--- /dev/null
+++ b/views/hallintapaneeli.etlua
@@ -0,0 +1,10 @@
+<form action="" method="post">
+    <label for="name">Osoite:</label><br>
+    <input type="text" id="address" name="address" required/><br>
+    <label for="picture">Kuva:</label><br>
+    <input type="text" id="picture" name="picture" required/><br>
+    <label for="price">Hinta:</label><br>
+    <input type="number" id="price" name="price" required min="1" max="10000000"/><br>
+    <button type="submit">Luo</button>
+</form> 
+
diff --git a/views/index.etlua b/views/index.etlua
index c9bbbd0..267eafd 100644
--- a/views/index.etlua
+++ b/views/index.etlua
@@ -46,8 +46,6 @@
 			    </h4>
 			    <div class="d-inline-flex gap-2">
 				<small class="text-body-secondary"><%= asunto["hinta"]%> €</small>
-				<small class="text-body-secondary"><%= asunto["pinta-ala"]%> m²</small>
-				<small class="text-body-secondary"><%= asunto["rakennusvuosi"]%></small>
 			    </div>
 			</div>
 		    </div>
diff --git a/views/kirjaudu.etlua b/views/kirjaudu.etlua
new file mode 100644
index 0000000..20b5d33
--- /dev/null
+++ b/views/kirjaudu.etlua
@@ -0,0 +1,11 @@
+<form action="" method="post">
+  <label for="name">Nimi:</label><br>
+  <input type="text" id="name" name="name" required/><br>
+  <label for="password">Salasana</label><br>
+  <input type="password" id="password" name="password" required/><br><br>
+  <button type="submit">Kirjaudu</button>
+</form> 
+
+<% if err then %>
+<%= err %>
+<% end %>