24 lines
860 B
Lua
24 lines
860 B
Lua
local policies_key = KEYS[1]
|
|
local policies_json = ARGV[1]
|
|
|
|
local decoded, policies = pcall(cjson.decode, policies_json or '')
|
|
if not decoded or type(policies) ~= 'table' then
|
|
return cjson.encode({status = 'invalid'})
|
|
end
|
|
|
|
local seen = {}
|
|
for _, policy in ipairs(policies) do
|
|
if type(policy) ~= 'table' or type(policy.upstreamId) ~= 'string' or policy.upstreamId == '' or
|
|
type(policy.revision) ~= 'string' or not string.match(policy.revision, '^[0-9]+$') or
|
|
policy.revision == '0' or type(policy.enabled) ~= 'boolean' or seen[policy.upstreamId] then
|
|
return cjson.encode({status = 'invalid'})
|
|
end
|
|
seen[policy.upstreamId] = true
|
|
end
|
|
|
|
redis.call('DEL', policies_key)
|
|
for _, policy in ipairs(policies) do
|
|
redis.call('HSET', policies_key, policy.upstreamId, cjson.encode(policy))
|
|
end
|
|
return cjson.encode({status = 'ok'})
|