mirror of
https://github.com/akyaiy/GoSally-mvp.git
synced 2026-01-03 09:12:25 +00:00
add headers lua runtime support
This commit is contained in:
@@ -6,6 +6,9 @@ local log = require("internal.log")
|
||||
local session = require("internal.session")
|
||||
local crypt = require("internal.crypt.bcrypt")
|
||||
|
||||
local params = session.request.params.get()
|
||||
local token = session.request.headers.get("x-session-token")
|
||||
|
||||
local function close_db()
|
||||
if db then
|
||||
db:close()
|
||||
@@ -22,20 +25,14 @@ local function error_response(message, code, data)
|
||||
close_db()
|
||||
end
|
||||
|
||||
if not session.request.params then
|
||||
if not params then
|
||||
return error_response("no params provided")
|
||||
end
|
||||
|
||||
if not session.request.params.token then
|
||||
if not (token and token == require("_config").token()) then
|
||||
return error_response("access denied")
|
||||
end
|
||||
|
||||
if session.request.params.token ~= require("_config").token() then
|
||||
return error_response("access denied")
|
||||
end
|
||||
|
||||
local params = session.request.params
|
||||
|
||||
if not (params.username and params.email and params.password) then
|
||||
return error_response("no username/email/password provided")
|
||||
end
|
||||
|
||||
@@ -6,6 +6,9 @@ local log = require("internal.log")
|
||||
local session = require("internal.session")
|
||||
local crypt = require("internal.crypt.bcrypt")
|
||||
|
||||
local params = session.request.params.get()
|
||||
local token = session.request.headers.get("x-session-token")
|
||||
|
||||
local function close_db()
|
||||
if db then
|
||||
db:close()
|
||||
@@ -22,16 +25,11 @@ local function error_response(message, code, data)
|
||||
close_db()
|
||||
end
|
||||
|
||||
local params = session.request.params
|
||||
if not params then
|
||||
return error_response("No params provided")
|
||||
end
|
||||
|
||||
if not session.request.params.token then
|
||||
return error_response("access denied")
|
||||
end
|
||||
|
||||
if session.request.params.token ~= require("_config").token() then
|
||||
if not (token and token == require("_config").token()) then
|
||||
return error_response("access denied")
|
||||
end
|
||||
|
||||
|
||||
@@ -6,6 +6,9 @@ local log = require("internal.log")
|
||||
local session = require("internal.session")
|
||||
local crypt = require("internal.crypt.bcrypt")
|
||||
|
||||
local params = session.request.params.get()
|
||||
local token = session.request.headers.get("x-session-token")
|
||||
|
||||
local function close_db()
|
||||
if db then
|
||||
db:close()
|
||||
@@ -22,19 +25,14 @@ local function error_response(message, code, data)
|
||||
close_db()
|
||||
end
|
||||
|
||||
if not session.request.params then
|
||||
if not params then
|
||||
return error_response("no params provided")
|
||||
end
|
||||
|
||||
if not session.request.params.token then
|
||||
if not (token and token == require("_config").token()) then
|
||||
return error_response("access denied")
|
||||
end
|
||||
|
||||
if session.request.params.token ~= require("_config").token() then
|
||||
return error_response("access denied")
|
||||
end
|
||||
|
||||
local params = session.request.params
|
||||
if not (params.username and params.email and params.password) then
|
||||
return error_response("no username/email/password provided")
|
||||
end
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
|
||||
local session = require("internal.session")
|
||||
|
||||
if session.request.params.about then
|
||||
local params = session.request.params.get()
|
||||
|
||||
if params.about then
|
||||
session.response.result = {
|
||||
description = "Returns a list of available methods",
|
||||
params = {
|
||||
@@ -48,7 +50,7 @@ local function scanDirectory(basePath, targetPath)
|
||||
end
|
||||
|
||||
local basePath = "com"
|
||||
local layer = session.request and session.request.params.layer and session.request.params.layer:gsub(">", "/") or nil
|
||||
local layer = params.layer and params.layer:gsub(">", "/") or nil
|
||||
|
||||
session.response.result = {
|
||||
answer = layer and scanDirectory(basePath, layer) or scanDirectory(basePath, "")
|
||||
|
||||
@@ -53,6 +53,35 @@ func (h *HandlerV1) handleLUA(sid string, r *http.Request, req *rpc.RPCRequest,
|
||||
sessionMod := L.NewTable()
|
||||
inTable := L.NewTable()
|
||||
paramsTable := L.NewTable()
|
||||
headersTable := L.NewTable()
|
||||
|
||||
fetchedHeadersTable := L.NewTable()
|
||||
for k, v := range r.Header {
|
||||
L.SetField(fetchedHeadersTable, k, ConvertGolangTypesToLua(L, v))
|
||||
}
|
||||
|
||||
headersGetter := L.NewFunction(func(L *lua.LState) int {
|
||||
path := L.OptString(1, "")
|
||||
def := L.Get(2)
|
||||
|
||||
get := func(path string) lua.LValue {
|
||||
if path == "" {
|
||||
return fetchedHeadersTable
|
||||
}
|
||||
fetched := r.Header.Get(path)
|
||||
if fetched == "" {
|
||||
return lua.LNil
|
||||
}
|
||||
return lua.LString(fetched)
|
||||
}
|
||||
val := get(path)
|
||||
if val == lua.LNil && def != lua.LNil {
|
||||
L.Push(def)
|
||||
} else {
|
||||
L.Push(val)
|
||||
}
|
||||
return 1
|
||||
})
|
||||
|
||||
fetchedParamsTable := L.NewTable()
|
||||
if fetchedParams, ok := req.Params.(map[string]any); ok {
|
||||
@@ -61,7 +90,7 @@ func (h *HandlerV1) handleLUA(sid string, r *http.Request, req *rpc.RPCRequest,
|
||||
}
|
||||
}
|
||||
|
||||
getter := L.NewFunction(func(L *lua.LState) int {
|
||||
paramsGetter := L.NewFunction(func(L *lua.LState) int {
|
||||
path := L.OptString(1, "")
|
||||
def := L.Get(2)
|
||||
|
||||
@@ -94,8 +123,14 @@ func (h *HandlerV1) handleLUA(sid string, r *http.Request, req *rpc.RPCRequest,
|
||||
}
|
||||
return 1
|
||||
})
|
||||
L.SetField(headersTable, "__fetched", fetchedHeadersTable)
|
||||
|
||||
L.SetField(paramsTable, "get", getter)
|
||||
L.SetField(headersTable, "get", headersGetter)
|
||||
L.SetField(inTable, "headers", headersTable)
|
||||
|
||||
L.SetField(paramsTable, "__fetched", fetchedParamsTable)
|
||||
|
||||
L.SetField(paramsTable, "get", paramsGetter)
|
||||
L.SetField(inTable, "params", paramsTable)
|
||||
|
||||
outTable := L.NewTable()
|
||||
|
||||
@@ -45,32 +45,83 @@ func ConvertLuaTypesToGolang(value lua.LValue) any {
|
||||
|
||||
func ConvertGolangTypesToLua(L *lua.LState, val any) lua.LValue {
|
||||
switch v := val.(type) {
|
||||
|
||||
case nil:
|
||||
return lua.LNil
|
||||
|
||||
case string:
|
||||
return lua.LString(v)
|
||||
case bool:
|
||||
return lua.LBool(v)
|
||||
case int:
|
||||
return lua.LNumber(float64(v))
|
||||
return lua.LNumber(v)
|
||||
case int8:
|
||||
return lua.LNumber(v)
|
||||
case int16:
|
||||
return lua.LNumber(v)
|
||||
case int32:
|
||||
return lua.LNumber(v)
|
||||
case int64:
|
||||
return lua.LNumber(float64(v))
|
||||
return lua.LNumber(v)
|
||||
case uint:
|
||||
return lua.LNumber(v)
|
||||
case uint8:
|
||||
return lua.LNumber(v)
|
||||
case uint16:
|
||||
return lua.LNumber(v)
|
||||
case uint32:
|
||||
return lua.LNumber(v)
|
||||
case uint64:
|
||||
return lua.LNumber(v)
|
||||
case float32:
|
||||
return lua.LNumber(float64(v))
|
||||
return lua.LNumber(v)
|
||||
case float64:
|
||||
return lua.LNumber(v)
|
||||
|
||||
case []string:
|
||||
tbl := L.NewTable()
|
||||
for i, s := range v {
|
||||
tbl.RawSetInt(i+1, lua.LString(s))
|
||||
}
|
||||
return tbl
|
||||
case []int:
|
||||
tbl := L.NewTable()
|
||||
for i, n := range v {
|
||||
tbl.RawSetInt(i+1, lua.LNumber(n))
|
||||
}
|
||||
return tbl
|
||||
case []float64:
|
||||
tbl := L.NewTable()
|
||||
for i, f := range v {
|
||||
tbl.RawSetInt(i+1, lua.LNumber(f))
|
||||
}
|
||||
return tbl
|
||||
case []any:
|
||||
tbl := L.NewTable()
|
||||
for i, item := range v {
|
||||
tbl.RawSetInt(i+1, ConvertGolangTypesToLua(L, item))
|
||||
}
|
||||
return tbl
|
||||
case map[string]any:
|
||||
|
||||
case map[string]string:
|
||||
tbl := L.NewTable()
|
||||
for key, value := range v {
|
||||
tbl.RawSetString(key, ConvertGolangTypesToLua(L, value))
|
||||
for k, s := range v {
|
||||
tbl.RawSetString(k, lua.LString(s))
|
||||
}
|
||||
return tbl
|
||||
case nil:
|
||||
return lua.LNil
|
||||
case map[string]int:
|
||||
tbl := L.NewTable()
|
||||
for k, n := range v {
|
||||
tbl.RawSetString(k, lua.LNumber(n))
|
||||
}
|
||||
return tbl
|
||||
case map[string]any:
|
||||
tbl := L.NewTable()
|
||||
for k, val := range v {
|
||||
tbl.RawSetString(k, ConvertGolangTypesToLua(L, val))
|
||||
}
|
||||
return tbl
|
||||
|
||||
default:
|
||||
return lua.LString(fmt.Sprintf("%v", v))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user