2020-12-20 09:16:23 +01:00
|
|
|
local sql = require("lsqlite3")
|
|
|
|
|
|
|
|
local db = require("db")
|
|
|
|
local util = require("util")
|
2020-12-21 05:22:22 +01:00
|
|
|
local queries = require("queries")
|
2020-12-20 09:16:23 +01:00
|
|
|
|
|
|
|
local oldconfigure = configure
|
|
|
|
local stmnt_get_session, stmnt_insert_session
|
|
|
|
function configure(...)
|
2020-12-21 05:22:22 +01:00
|
|
|
stmnt_get_session = assert(db.conn:prepare(queries.select_valid_sessions))
|
|
|
|
stmnt_insert_session = assert(db.conn:prepare(queries.insert_session))
|
2020-12-20 09:16:23 +01:00
|
|
|
return oldconfigure(...)
|
|
|
|
end
|
|
|
|
|
|
|
|
local session = {}
|
|
|
|
|
|
|
|
--[[
|
|
|
|
Retreive the name and authorid of the logged in person,
|
|
|
|
or nil+error message if not logged in
|
|
|
|
]]
|
|
|
|
function session.get(req)
|
|
|
|
http_populate_cookies(req)
|
|
|
|
local sessionid = http_request_cookie(req,"session")
|
|
|
|
if sessionid == nil then
|
|
|
|
return nil, "No session cookie passed by client"
|
|
|
|
end
|
|
|
|
stmnt_get_session:bind_names{
|
|
|
|
key = sessionid
|
|
|
|
}
|
|
|
|
local err = util.do_sql(stmnt_get_session)
|
|
|
|
if err ~= sql.ROW then
|
|
|
|
return nil, "No such session by logged in users"
|
|
|
|
end
|
|
|
|
print("get session err:",err)
|
|
|
|
local data = stmnt_get_session:get_values()
|
|
|
|
stmnt_get_session:reset()
|
|
|
|
local author = data[1]
|
|
|
|
local authorid = data[2]
|
|
|
|
return author,authorid
|
|
|
|
end
|
|
|
|
|
|
|
|
--[[
|
|
|
|
Start a session for someone who logged in
|
|
|
|
]]
|
2020-12-21 05:22:22 +01:00
|
|
|
function session.start(who)
|
2020-12-20 09:16:23 +01:00
|
|
|
local rngf = assert(io.open("/dev/urandom","rb"))
|
|
|
|
local session_t = {}
|
|
|
|
for i = 1,64 do
|
|
|
|
local r = string.byte(rngf:read(1))
|
|
|
|
local s = string.char((r % 26) + 65)
|
|
|
|
table.insert(session_t,s)
|
|
|
|
end
|
|
|
|
local session = table.concat(session_t)
|
|
|
|
rngf:close()
|
|
|
|
print("sessionid:",session)
|
|
|
|
print("authorid:",who)
|
|
|
|
stmnt_insert_session:bind_names{
|
|
|
|
sessionid = session,
|
|
|
|
authorid = who
|
|
|
|
}
|
|
|
|
local err = util.do_sql(stmnt_insert_session)
|
|
|
|
stmnt_insert_session:reset()
|
|
|
|
print("Err:",err)
|
|
|
|
assert(err == sql.DONE)
|
|
|
|
return session
|
|
|
|
end
|
|
|
|
|
|
|
|
return session
|