Clash.Meta/hub/route/configs.go

71 lines
1.5 KiB
Go
Raw Normal View History

2018-11-21 13:47:46 +08:00
package route
import (
"net/http"
"github.com/Dreamacro/clash/hub/executor"
"github.com/Dreamacro/clash/log"
P "github.com/Dreamacro/clash/proxy"
2018-11-28 10:38:30 +08:00
T "github.com/Dreamacro/clash/tunnel"
2018-11-21 13:47:46 +08:00
"github.com/go-chi/chi"
"github.com/go-chi/render"
)
func configRouter() http.Handler {
r := chi.NewRouter()
r.Get("/", getConfigs)
2018-11-28 10:38:30 +08:00
r.Patch("/", patchConfigs)
2018-11-21 13:47:46 +08:00
return r
}
type configSchema struct {
Port *int `json:"port"`
SocksPort *int `json:"socket-port"`
RedirPort *int `json:"redir-port"`
AllowLan *bool `json:"allow-lan"`
Mode *T.Mode `json:"mode"`
LogLevel *log.LogLevel `json:"log-level"`
}
func getConfigs(w http.ResponseWriter, r *http.Request) {
general := executor.GetGeneral()
render.Respond(w, r, general)
}
2018-11-28 10:38:30 +08:00
func pointerOrDefault(p *int, def int) int {
2018-11-21 13:47:46 +08:00
if p != nil {
return *p
}
return def
}
2018-11-28 10:38:30 +08:00
func patchConfigs(w http.ResponseWriter, r *http.Request) {
2018-11-21 13:47:46 +08:00
general := &configSchema{}
if err := render.DecodeJSON(r.Body, general); err != nil {
w.WriteHeader(http.StatusBadRequest)
render.Respond(w, r, ErrBadRequest)
return
}
if general.AllowLan != nil {
P.SetAllowLan(*general.AllowLan)
}
2018-11-28 10:38:30 +08:00
2018-11-21 13:47:46 +08:00
ports := P.GetPorts()
P.ReCreateHTTP(pointerOrDefault(general.Port, ports.Port))
P.ReCreateSocks(pointerOrDefault(general.SocksPort, ports.SocksPort))
P.ReCreateRedir(pointerOrDefault(general.RedirPort, ports.RedirPort))
if general.Mode != nil {
T.Instance().SetMode(*general.Mode)
}
if general.LogLevel != nil {
log.SetLevel(*general.LogLevel)
}
w.WriteHeader(http.StatusNoContent)
}