diff --git a/.gitignore b/.gitignore
index e69de29..5292519 100644
--- a/.gitignore
+++ b/.gitignore
+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
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
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
-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
-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
-4333
diff --git a/views/hallintapaneeli.etlua b/views/hallintapaneeli.etlua
new file mode 100644
index 0000000..6c29b5f
--- /dev/null
+++ b/views/hallintapaneeli.etlua
+<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
</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
+<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 %>