2023-07-19 18:18:34 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
read basic config from DB
diff --git a/cogit/cfg.lua b/cogit/cfg.lua new file mode 100644 index 0000000..4780053 --- /dev/null +++ b/cogit/cfg.lua @@ -0,0 +1,57 @@ +local lud = require "ludweb" + +local schema = [[ +CREATE TABLE IF NOT EXISTS Config ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + title TEXT NOT NULL, + port INTEGER NOT NULL, + pg_size INTEGER NOT NULL, + ses_age INTEGER NOT NULL, + log_lvl INTEGER NOT NULL +); +]] + +local CFG = {} +CFG.__index = CFG + +function CFG:add_defaults() + self.db:execute[[ + INSERT INTO Config(id, name, title, port, pg_size, ses_age, log_lvl) Values + (1, "default", "cogit", 8080, 20, 72*60*60, 2); + ]] + return 1 +end + +function CFG:init() + self.db:execute_many(schema) + local config = self.db:execute("SELECT * FROM Config;")[1] + if config == nil then + self.cid = self:add_defaults() + else + self.cid = config.id + end +end + +function CFG:set_cid(cid) self.cid = cid end + +function CFG:get_config(col) + return self.db:execute("SELECT * FROM Config WHERE id = ?;", self.cid)[1][col] +end + +function CFG:title() return self:get_config("title") end +function CFG:port() return self:get_config("port") end +function CFG:pg_size() return self:get_config("pg_size") end +function CFG:ses_age() return self:get_config("ses_age") end +function CFG:log_lvl() return self:get_config("log_lvl") end + +function CFG:close() self.db:close() end + +local function new_cfg(path) + local self = setmetatable({}, CFG) + self.db = lud.sqlite.open(path) + self:init() + return self +end + +return {new_cfg=new_cfg} diff --git a/cogit/cogit.lua b/cogit/cogit.lua index becf486..919fe37 100644 --- a/cogit/cogit.lua +++ b/cogit/cogit.lua @@ -1,6 +1,7 @@ local git = require "cogit.git" local scan = require "cogit.scan" local hash = require "cogit.hash" +local cfg = require "cogit.cfg" local lud = require "ludweb" @@ -79,8 +80,9 @@ end function Cogit:run() self:init() - self:log(LOG_INFO, "server running on port "..self.conf.port) - self.app:run(self.conf.port) + local port = self.cfg:port() + self:log(LOG_INFO, "server running on port "..port) + self.app:run(port) end function Cogit:scan() @@ -102,17 +104,16 @@ function Cogit:get_user(cookies) if session_id == nil then return nil end - local uname = sessions[session_id] + local uname = self.sessions[session_id] if uname == nil then return nil end - return self.conf.users[uname] + return self.users[uname] end function Cogit:routes() - local conf = self.conf - title = conf.title - sessions = self.sessions + local title = self.cfg:title() + local limit = self.cfg:pg_size() return { {"GET", "/?", function (req) @@ -140,7 +141,7 @@ function Cogit:routes() function (req) local uname = req.form.username local pass = req.form.password - local user = conf.users[uname] + local user = self.users[uname] local salt, h if user == nil then -- hash something as if we're trying to login anyway @@ -152,9 +153,9 @@ function Cogit:routes() h = hash.hash_pass(pass, salt) if h == lud.crypt.b64_dec(user.hash) then local session_id = lud.crypt.b64_enc(lud.crypt.uuid4()) - sessions[session_id] = uname + self.sessions[session_id] = uname self:log(LOG_INFO, "logged in as "..uname) - local age = conf.session_age + local age = self.cfg:ses_age() local cookie = {key="sid", val=session_id, path="/", age=age} return "/", 303, "See Other", {cookie} else @@ -167,8 +168,8 @@ function Cogit:routes() function (req) local session_id = req.cookies["sid"] if session_id ~= nil then - self:log(LOG_INFO, "logged out as "..sessions[session_id]) - sessions[session_id] = nil + self:log(LOG_INFO, "logged out as "..self.sessions[session_id]) + self.sessions[session_id] = nil end return "/", 303 end}, @@ -208,10 +209,10 @@ function Cogit:routes() end local repo = self.groups[gname][rname] local commit = repo:commit(first) - local prev = repo:find_prev(commit:id(), conf.limit) + local prev = repo:find_prev(commit:id(), limit) local env = { title=title, user=user, gname=gname, rname=rname, bname=bname, - commit=commit, limit=conf.limit, prev=prev, first=first, + commit=commit, limit=limit, prev=prev, first=first, } return lud.template.render_file("view/history.html", env) end}, @@ -271,7 +272,8 @@ local function new_cogit(path) self.sessions = {} self.initialized = false self.log_level = LOG_INFO - self.conf = dofile(path.."/conf.lua") + self.users = dofile(path.."/conf.lua") + self.cfg = cfg.new_cfg(path.."/conf.db") self:init() self:scan() self.app = lud.app.new_app(self:routes()) diff --git a/conf.lua b/conf.lua index 56b7c07..b3f029e 100644 --- a/conf.lua +++ b/conf.lua @@ -3,17 +3,11 @@ Put this file on the same folder as public/ and customize it. ]] return { - title = "cogit", - port = 8080, - limit = 20, -- page size, for pagination - session_age = 2*60*60, -- login session duration in seconds - users = { - ["guest"] = { - salt = "GfwhQ/F6HYnv6g5qrpv58NgMWmOF6nsQXc8RVr6C8Fc=", - hash = "uxfQEiPSWAuu96rYpqYfi0kcue0ZiTvSCDX3ngFjC3RqLa7v9OouFd5UglJ7vh52nNDh2E9cG/f0RlVrLzIE9Q==", - nick = "guest", - name = "Guest", - groups = {"guests"}, - }, + ["guest"] = { + salt = "GfwhQ/F6HYnv6g5qrpv58NgMWmOF6nsQXc8RVr6C8Fc=", + hash = "uxfQEiPSWAuu96rYpqYfi0kcue0ZiTvSCDX3ngFjC3RqLa7v9OouFd5UglJ7vh52nNDh2E9cG/f0RlVrLzIE9Q==", + nick = "guest", + name = "Guest", + groups = {"guests"}, }, }