appactive-gateway/nginx-plugin/etc/nginx/conf/lua/kv/kv_set.lua (52 lines of code) (raw):

local cjson = require("cjson.safe") local kv = require("kv.kv_util") local function getRuleBody() ngx.req.read_body() local data = ngx.req.get_body_data() if data then return data end local fileName = ngx.req.get_body_file() if fileName then local file = io.open(fileName, "rb") if file then data = file:read("*all") file:close() end end return data end --main local req_method = ngx.var.request_method if "PUT" == req_method or "POST" == req_method then local data = getRuleBody() if data then local dataDecoded = cjson.decode(data) if not dataDecoded then kv.print("set value invalid", 400) end if dataDecoded.key and dataDecoded.value then local f = io.open(kv.storePath .. dataDecoded.key, "w+") if f then local ret = f:write(cjson.encode(dataDecoded.value)) f:close() if ret then local rule_ver = kv.kvShared:get(dataDecoded.key..kv.versionKey) if rule_ver == nil then rule_ver = 1 else rule_ver = rule_ver + 1 end kv.kvShared:set(dataDecoded.key..kv.versionKey, rule_ver) kv.kvShared:set(dataDecoded.key, cjson.encode(dataDecoded.value)) kv.print("success", 200) else kv.print("write disk failed", 500) end else kv.print("open file failed", 500) end else kv.print("null key or value not supported", 400) end end end