mirror of https://github.com/fatedier/frp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.0 KiB
41 lines
1.0 KiB
package plugin |
|
|
|
import ( |
|
"crypto/tls" |
|
"encoding/json" |
|
"io" |
|
"net/http" |
|
|
|
plugin "github.com/fatedier/frp/pkg/plugin/server" |
|
"github.com/fatedier/frp/pkg/util/log" |
|
"github.com/fatedier/frp/test/e2e/mock/server/httpserver" |
|
) |
|
|
|
type Handler func(req *plugin.Request) *plugin.Response |
|
|
|
type NewPluginRequest func() *plugin.Request |
|
|
|
func NewHTTPPluginServer(port int, newFunc NewPluginRequest, handler Handler, tlsConfig *tls.Config) *httpserver.Server { |
|
return httpserver.New( |
|
httpserver.WithBindPort(port), |
|
httpserver.WithTLSConfig(tlsConfig), |
|
httpserver.WithHandler(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { |
|
r := newFunc() |
|
buf, err := io.ReadAll(req.Body) |
|
if err != nil { |
|
w.WriteHeader(500) |
|
return |
|
} |
|
log.Tracef("plugin request: %s", string(buf)) |
|
err = json.Unmarshal(buf, &r) |
|
if err != nil { |
|
w.WriteHeader(500) |
|
return |
|
} |
|
resp := handler(r) |
|
buf, _ = json.Marshal(resp) |
|
log.Tracef("plugin response: %s", string(buf)) |
|
_, _ = w.Write(buf) |
|
})), |
|
) |
|
}
|
|
|