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'})