summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/util-sql-logins.lua
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2018-03-10 19:29:49 +0100
committerContext Git Mirror Bot <phg42.2a@gmail.com>2018-03-10 19:29:49 +0100
commitf923c957a3b322ae3ee8e7a0b20df1580869bee7 (patch)
tree988b46f68add1068e6110a9b9223d0106a888e00 /tex/context/base/mkiv/util-sql-logins.lua
parent62185974cd9c16ad11788dbeebb30f466a2fb38c (diff)
downloadcontext-f923c957a3b322ae3ee8e7a0b20df1580869bee7.tar.gz
2018-03-10 15:02:00
Diffstat (limited to 'tex/context/base/mkiv/util-sql-logins.lua')
-rw-r--r--tex/context/base/mkiv/util-sql-logins.lua136
1 files changed, 65 insertions, 71 deletions
diff --git a/tex/context/base/mkiv/util-sql-logins.lua b/tex/context/base/mkiv/util-sql-logins.lua
index e4329ecc2..9717a8175 100644
--- a/tex/context/base/mkiv/util-sql-logins.lua
+++ b/tex/context/base/mkiv/util-sql-logins.lua
@@ -27,7 +27,13 @@ logins.cooldowntime = logins.cooldowntime or 10 * 60
logins.purgetime = logins.purgetime or 1 * 60 * 60
logins.autopurge = true
-local template_create = [[
+local function checkeddb(presets,datatable)
+ return sql.usedatabase(presets,datatable or presets.datatable or "logins")
+end
+
+logins.usedb = checkeddb
+
+local template = [[
CREATE TABLE
`logins`
(
@@ -46,6 +52,42 @@ CREATE TABLE
COMMENT='state: 0=unset 1=known 2=unknown'
]]
+function logins.createdb(presets,datatable)
+
+ local db = checkeddb(presets,datatable)
+
+ local data, keys = db.execute {
+ template = template,
+ variables = {
+ basename = db.basename,
+ },
+ }
+
+ report_logins("datatable %a created in %a",db.name,db.base)
+
+ return db
+
+end
+
+local template =[[
+ DROP TABLE IF EXISTS %basename% ;
+]]
+
+function logins.deletedb(presets,datatable)
+
+ local db = checkeddb(presets,datatable)
+
+ local data, keys = db.execute {
+ template = template,
+ variables = {
+ basename = db.basename,
+ },
+ }
+
+ report_logins("datatable %a removed in %a",db.name,db.base)
+
+end
+
local states = {
[0] = "unset",
[1] = "known",
@@ -105,58 +147,54 @@ local template_purge = [[
local cache = { } setmetatable(cache, { __mode = 'v' })
-local function usercreate(presets)
- sqlexecute {
- template = template_create,
- presets = presets,
- }
-end
+-- local function usercreate(presets)
+-- sqlexecute {
+-- template = template_create,
+-- presets = presets,
+-- }
+-- end
-local function userunknown(presets,name)
+function logins.userunknown(db,name)
local d = {
name = name,
state = 2,
time = ostime(),
n = 0,
}
- sqlexecute {
+ db.execute {
template = template_update,
- presets = presets,
variables = d,
}
cache[name] = d
report_logins("user %a is registered as unknown",name)
end
-local function userknown(presets,name)
+function logins.userknown(db,name)
local d = {
name = name,
state = 1,
time = ostime(),
n = 0,
}
- sqlexecute {
+ db.execute {
template = template_update,
- presets = presets,
variables = d,
}
cache[name] = d
report_logins("user %a is registered as known",name)
end
-local function userreset(presets,name)
- sqlexecute {
+function logins.userreset(db,name)
+ db.execute {
template = template_delete,
- presets = presets,
}
cache[name] = nil
report_logins("user %a is reset",name)
end
-local function userpurge(presets,delay)
- sqlexecute {
+local function userpurge(db,delay)
+ db.execute {
template = template_purge,
- presets = presets,
variables = {
time = ostime() - (delay or logins.purgetime),
}
@@ -165,6 +203,8 @@ local function userpurge(presets,delay)
report_logins("users are purged")
end
+logins.userpurge = userpurge
+
local function verdict(okay,...)
if not trace_logins then
-- no tracing
@@ -178,11 +218,11 @@ end
local lasttime = 0
-local function userpermitted(presets,name)
+function logins.userpermitted(db,name)
local currenttime = ostime()
if logins.autopurge and (lasttime == 0 or (currenttime - lasttime > logins.purgetime)) then
report_logins("automatic purge triggered")
- userpurge(presets)
+ userpurge(db)
lasttime = currenttime
end
local data = cache[name]
@@ -190,9 +230,8 @@ local function userpermitted(presets,name)
report_logins("user %a is cached",name)
else
report_logins("user %a is fetched",name)
- data = sqlexecute {
+ data = db.execute {
template = template_fetch,
- presets = presets,
converter = converter_fetch,
variables = {
name = name,
@@ -206,9 +245,8 @@ local function userpermitted(presets,name)
time = currenttime,
n = 1,
}
- sqlexecute {
+ db.execute {
template = template_insert,
- presets = presets,
variables = d,
}
cache[name] = d
@@ -237,9 +275,8 @@ local function userpermitted(presets,name)
time = currenttime,
n = 1,
}
- sqlexecute {
+ db.execute {
template = template_update,
- presets = presets,
variables = d,
}
cache[name] = d
@@ -251,9 +288,8 @@ local function userpermitted(presets,name)
time = currenttime,
n = n + 1,
}
- sqlexecute {
+ db.execute {
template = template_update,
- presets = presets,
variables = d,
}
cache[name] = d
@@ -261,46 +297,4 @@ local function userpermitted(presets,name)
end
end
-logins.create = usercreate
-logins.known = userknown
-logins.unknown = userunknown
-logins.reset = userreset
-logins.purge = userpurge
-logins.permitted = userpermitted
-
return logins
-
--- --
-
--- sql.setmethod("client")
-
--- local presets = {
--- database = "test",
--- username = "root",
--- password = "something",
--- }
-
--- logins.cooldowntime = 2*60
--- logins.maxnoflogins = 3
-
--- sql.logins.purge(presets,0)
-
--- for i=1,6 do
--- print("")
--- sql.logins.permitted(presets,"hans")
--- sql.logins.permitted(presets,"kees")
--- sql.logins.permitted(presets,"ton")
--- if i == 1 then
--- -- sql.logins.unknown(presets,"hans")
--- -- sql.logins.known(presets,"kees")
--- end
--- end
-
--- if loginpermitted(presets,username) then
--- if validlogin(username,...) then
--- -- sql.logins.known(presets,username)
--- elseif unknownuser(username) then
--- sql.logins.unknown(presets,username)
--- end
--- end
-