You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
887 B
Go
50 lines
887 B
Go
5 years ago
|
package main
|
||
|
|
||
|
import (
|
||
|
"io/ioutil"
|
||
|
"net"
|
||
|
"net/http"
|
||
|
|
||
|
"github.com/fangdingjun/go-log"
|
||
|
luar "layeh.com/gopher-luar"
|
||
|
)
|
||
|
|
||
|
type luaHandler struct {
|
||
|
scriptFile string
|
||
|
}
|
||
|
|
||
|
func (l *luaHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||
|
vm := luaPool.Get()
|
||
|
defer luaPool.Put(vm)
|
||
|
|
||
|
vm.SetGlobal("request", luar.New(vm, &req{r}))
|
||
|
vm.SetGlobal("response", luar.New(vm, w))
|
||
|
|
||
|
if err := runFile(vm, l.scriptFile); err != nil {
|
||
|
log.Errorln(err)
|
||
|
http.Error(w, "server error", http.StatusInternalServerError)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type req struct {
|
||
|
*http.Request
|
||
|
}
|
||
|
|
||
|
func (r1 *req) GetBody() (string, error) {
|
||
|
d, err := ioutil.ReadAll(r1.Body)
|
||
|
return string(d), err
|
||
|
}
|
||
|
|
||
|
func (r1 *req) GetIP() string {
|
||
|
ip := r1.Header.Get("x-real-ip")
|
||
|
if ip != "" {
|
||
|
return ip
|
||
|
}
|
||
|
ip = r1.Header.Get("x-forwarded-for")
|
||
|
if ip != "" {
|
||
|
return ip
|
||
|
}
|
||
|
host, _, _ := net.SplitHostPort(r1.RemoteAddr)
|
||
|
return host
|
||
|
}
|