index.lua 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. require "json"
  2. -- json library needs to be available
  3. local http_status = "200 OK";
  4. local response_table = {};
  5. if mg.request_info.request_method == "GET" then
  6. response_table["result"] = "ok";
  7. response_table["data"] = {};
  8. for i=1,10 do
  9. response_table.data[i] = {name = "sensor" .. i, value = 20+i};
  10. end
  11. elseif mg.request_info.request_method == "PUT" then
  12. local request_len = mg.request_info.content_length
  13. local read_len = 0
  14. local request_body_sep = {}
  15. local error_reading = false
  16. repeat
  17. local chunk = mg.read()
  18. if chunk then
  19. read_len = read_len + #chunk
  20. request_body_sep[#request_body_sep+1] = chunk
  21. else
  22. error_reading = true;
  23. end
  24. until ((read_len == request_len) or error_reading);
  25. if (error_reading) then
  26. response_table["error"] = "ok";
  27. response_table["status"] = "error reading request body data";
  28. else
  29. local request_body = table.concat(request_body_sep)
  30. local isok, request_table = pcall(json.parse, request_body)
  31. -- TODO: check "isok", then check all arguments in "request_table",
  32. response_table["result"] = "ok";
  33. response_table["data"] = {name = request_table};
  34. end
  35. else
  36. http_status = "403 Forbidden";
  37. response_table["result"] = "error";
  38. response_table["status"] = "invalid method " .. mg.request_info.request_method;
  39. end
  40. local response_body = json.stringify(response_table)
  41. mg.write("HTTP/1.1 " .. http_status .. "\r\n")
  42. mg.write("Content-Type: application/javascript; charset=UTF-8\r\n")
  43. mg.write("Content-Length: ".. #response_body .."\r\n")
  44. mg.write("\r\n")
  45. mg.write(response_body)