Software /
code /
prosody-modules
Diff
mod_rest/apidemo.lib.lua @ 4488:eea62d30ae08
mod_rest: Add option for serving interactive openapi documentation
Swagger not included.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 02 Mar 2021 18:38:13 +0100 |
child | 4498:1776831d0fab |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_rest/apidemo.lib.lua Tue Mar 02 18:38:13 2021 +0100 @@ -0,0 +1,44 @@ + +local _M = {}; + +local api_demo = module:get_option_path("rest_demo_resources", nil); +local http_files = require "net.http.files"; + +local mime_map = module:shared("/*/http_files/mime").types or {css = "text/css"; js = "application/javascript"}; +_M.resources = http_files.serve({ + path = api_demo; + mime_map = mime_map; + }); + +local index do + local f = assert(io.open(api_demo.."/index.html"), "'api_demo_resources' should point to the 'dist' directory"); + index = f:read("*a"); + f:close(); + + -- SUCH HACK, VERY GSUB, WOW! + index = index:gsub("(%s?url%s*:%s*)%b\"\"", string.format("%%1%q", module:http_url().."/demo/openapi.yaml"), 1); +end + +do + local f = module:load_resource("openapi.yaml"); + _M.schema = { + body = f:read("*a"); + } + f:close(); +end + +_M.redirect = { + status_code = 303; + headers = { + location = module:http_url().."/demo/"; + }; +}; + +_M.main_page = { + headers = { + content_type = "text/html"; + }; + body = index; +} + +return _M