64 lines
1.5 KiB
Lua
64 lines
1.5 KiB
Lua
local b64 = require("ssso_base64")
|
|
|
|
local function build_profile(user, password, name, email)
|
|
return {
|
|
u = user,
|
|
p = password,
|
|
n = name,
|
|
e = email,
|
|
}
|
|
end
|
|
|
|
local function serialize(profile)
|
|
return (profile.u or "\025") .. "\031" ..
|
|
(profile.p or "\025") .. "\031" ..
|
|
(profile.n or "\025") .. "\031" ..
|
|
(profile.e or "\025") .. "\031"
|
|
end
|
|
|
|
local function deserialize(ser)
|
|
local profile
|
|
local remainder = ser:gsub("^(.-)\031(.-)\031(.-)\031(.-)\031", function (u, p, n, e)
|
|
if u == "\025" then u = nil end
|
|
if p == "\025" then p = nil end
|
|
if n == "\025" then n = nil end
|
|
if e == "\025" then e = nil end
|
|
profile = build_profile(u, p, n, e)
|
|
return ""
|
|
end)
|
|
return profile, remainder
|
|
end
|
|
|
|
local function format(template, profile)
|
|
local s = template
|
|
s = s:gsub("\ru%.", profile.u or "")
|
|
s = s:gsub("\rp%.", profile.p or "")
|
|
s = s:gsub("\rn%.", profile.n or "")
|
|
s = s:gsub("\re%.", profile.e or "")
|
|
s = s:gsub("\rb64%(([^\r]-)%)%.", function(x) return b64.encode_base64(x) end)
|
|
s = s:gsub("\ru64%(([^\r]-)%)%.", function(x) return b64.encode_base64url(x) end)
|
|
return s
|
|
end
|
|
|
|
local function email(profile)
|
|
return profile.e
|
|
end
|
|
|
|
local function name(profile)
|
|
return profile.n
|
|
end
|
|
|
|
local function user(profile)
|
|
return profile.u
|
|
end
|
|
|
|
return {
|
|
build_profile = build_profile,
|
|
deserialize = deserialize, -- TODO: test
|
|
serialize = serialize, -- TODO: test
|
|
email = email,
|
|
format = format,
|
|
name = name,
|
|
user = user,
|
|
}
|