mirror of
https://github.com/xiaoxinpro/nginx-proxy-manager-zh.git
synced 2025-03-14 09:38:15 -04:00
Add endpoints to return nginx config from disk
This commit is contained in:
parent
ca4d92d793
commit
5586d16afd
@ -164,6 +164,45 @@ func DeleteHost() func(http.ResponseWriter, *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetHostNginxConfig will return a Host's nginx config from disk
|
||||||
|
// Route: GET /hosts/{hostID}/nginx-config
|
||||||
|
// Route: GET /hosts/{hostID}/nginx-config.txt
|
||||||
|
func GetHostNginxConfig(format string) func(http.ResponseWriter, *http.Request) {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var err error
|
||||||
|
var hostID int
|
||||||
|
if hostID, err = getURLParamInt(r, "hostID"); err != nil {
|
||||||
|
h.ResultErrorJSON(w, r, http.StatusBadRequest, err.Error(), nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
item, err := host.GetByID(hostID)
|
||||||
|
switch err {
|
||||||
|
case sql.ErrNoRows:
|
||||||
|
h.ResultErrorJSON(w, r, http.StatusNotFound, "Not found", nil)
|
||||||
|
case nil:
|
||||||
|
// Get the config from disk
|
||||||
|
content, nErr := nginx.GetHostConfigContent(item)
|
||||||
|
if nErr != nil {
|
||||||
|
h.ResultErrorJSON(w, r, http.StatusBadRequest, nErr.Error(), nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if format == "text" {
|
||||||
|
h.ResultResponseText(w, r, http.StatusOK, content)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
j := struct {
|
||||||
|
Content string `json:"content"`
|
||||||
|
}{Content: content}
|
||||||
|
|
||||||
|
h.ResultResponseJSON(w, r, http.StatusOK, j)
|
||||||
|
default:
|
||||||
|
h.ResultErrorJSON(w, r, http.StatusBadRequest, err.Error(), nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func configureHost(h host.Model) {
|
func configureHost(h host.Model) {
|
||||||
err := jobqueue.AddJob(jobqueue.Job{
|
err := jobqueue.AddJob(jobqueue.Job{
|
||||||
Name: "NginxConfigureHost",
|
Name: "NginxConfigureHost",
|
||||||
|
@ -117,6 +117,45 @@ func DeleteUpstream() func(http.ResponseWriter, *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetHostNginxConfig will return a Host's nginx config from disk
|
||||||
|
// Route: GET /upstreams/{upstreamID}/nginx-config
|
||||||
|
// Route: GET /upstreams/{upstreamID}/nginx-config.txt
|
||||||
|
func GetUpstreamNginxConfig(format string) func(http.ResponseWriter, *http.Request) {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var err error
|
||||||
|
var upstreamID int
|
||||||
|
if upstreamID, err = getURLParamInt(r, "upstreamID"); err != nil {
|
||||||
|
h.ResultErrorJSON(w, r, http.StatusBadRequest, err.Error(), nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
item, err := upstream.GetByID(upstreamID)
|
||||||
|
switch err {
|
||||||
|
case sql.ErrNoRows:
|
||||||
|
h.ResultErrorJSON(w, r, http.StatusNotFound, "Not found", nil)
|
||||||
|
case nil:
|
||||||
|
// Get the config from disk
|
||||||
|
content, nErr := nginx.GetUpstreamConfigContent(item)
|
||||||
|
if nErr != nil {
|
||||||
|
h.ResultErrorJSON(w, r, http.StatusBadRequest, nErr.Error(), nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if format == "text" {
|
||||||
|
h.ResultResponseText(w, r, http.StatusOK, content)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
j := struct {
|
||||||
|
Content string `json:"content"`
|
||||||
|
}{Content: content}
|
||||||
|
|
||||||
|
h.ResultResponseJSON(w, r, http.StatusOK, j)
|
||||||
|
default:
|
||||||
|
h.ResultErrorJSON(w, r, http.StatusBadRequest, err.Error(), nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func configureUpstream(u upstream.Model) {
|
func configureUpstream(u upstream.Model) {
|
||||||
err := jobqueue.AddJob(jobqueue.Job{
|
err := jobqueue.AddJob(jobqueue.Job{
|
||||||
Name: "NginxConfigureUpstream",
|
Name: "NginxConfigureUpstream",
|
||||||
|
@ -81,6 +81,13 @@ func ResultErrorJSON(w http.ResponseWriter, r *http.Request, status int, message
|
|||||||
ResultResponseJSON(w, r, status, errorResponse)
|
ResultResponseJSON(w, r, status, errorResponse)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ResultResponseText will write the result as text to the http output
|
||||||
|
func ResultResponseText(w http.ResponseWriter, r *http.Request, status int, content string) {
|
||||||
|
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
|
||||||
|
w.WriteHeader(status)
|
||||||
|
fmt.Fprint(w, content)
|
||||||
|
}
|
||||||
|
|
||||||
// getPrettyPrintFromContext returns the PrettyPrint setting
|
// getPrettyPrintFromContext returns the PrettyPrint setting
|
||||||
func getPrettyPrintFromContext(r *http.Request) bool {
|
func getPrettyPrintFromContext(r *http.Request) bool {
|
||||||
pretty, ok := r.Context().Value(c.PrettyPrintCtxKey).(bool)
|
pretty, ok := r.Context().Value(c.PrettyPrintCtxKey).(bool)
|
||||||
|
@ -168,6 +168,8 @@ func applyRoutes(r chi.Router) chi.Router {
|
|||||||
Post("/", handler.CreateHost())
|
Post("/", handler.CreateHost())
|
||||||
r.With(middleware.Enforce(user.CapabilityHostsManage)).With(middleware.EnforceRequestSchema(schema.UpdateHost())).
|
r.With(middleware.Enforce(user.CapabilityHostsManage)).With(middleware.EnforceRequestSchema(schema.UpdateHost())).
|
||||||
Put("/{hostID:[0-9]+}", handler.UpdateHost())
|
Put("/{hostID:[0-9]+}", handler.UpdateHost())
|
||||||
|
r.With(middleware.Enforce(user.CapabilityHostsManage)).Get("/{hostID:[0-9]+}/nginx-config", handler.GetHostNginxConfig("json"))
|
||||||
|
r.With(middleware.Enforce(user.CapabilityHostsManage)).Get("/{hostID:[0-9]+}/nginx-config.txt", handler.GetHostNginxConfig("text"))
|
||||||
})
|
})
|
||||||
|
|
||||||
// Nginx Templates
|
// Nginx Templates
|
||||||
@ -202,6 +204,8 @@ func applyRoutes(r chi.Router) chi.Router {
|
|||||||
r.With(middleware.Enforce(user.CapabilityHostsManage)).Delete("/{upstreamID:[0-9]+}", handler.DeleteUpstream())
|
r.With(middleware.Enforce(user.CapabilityHostsManage)).Delete("/{upstreamID:[0-9]+}", handler.DeleteUpstream())
|
||||||
r.With(middleware.Enforce(user.CapabilityHostsManage)).With(middleware.EnforceRequestSchema(schema.CreateUpstream())).
|
r.With(middleware.Enforce(user.CapabilityHostsManage)).With(middleware.EnforceRequestSchema(schema.CreateUpstream())).
|
||||||
Post("/", handler.CreateUpstream())
|
Post("/", handler.CreateUpstream())
|
||||||
|
r.With(middleware.Enforce(user.CapabilityHostsManage)).Get("/{upstreamID:[0-9]+}/nginx-config", handler.GetUpstreamNginxConfig("json"))
|
||||||
|
r.With(middleware.Enforce(user.CapabilityHostsManage)).Get("/{upstreamID:[0-9]+}/nginx-config.txt", handler.GetUpstreamNginxConfig("text"))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -185,3 +185,42 @@ func removeFiles(files []string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetHostConfigContent returns nginx config as it exists on disk
|
||||||
|
func GetHostConfigContent(h host.Model) (string, error) {
|
||||||
|
filename := getHostFilename(h, "")
|
||||||
|
if h.ErrorMessage != "" {
|
||||||
|
filename = getHostFilename(h, ErrorSuffix)
|
||||||
|
}
|
||||||
|
if h.IsDisabled {
|
||||||
|
filename = getHostFilename(h, DisabledSuffix)
|
||||||
|
}
|
||||||
|
if h.IsDeleted {
|
||||||
|
filename = getHostFilename(h, DeletedSuffix)
|
||||||
|
}
|
||||||
|
|
||||||
|
// nolint: gosec
|
||||||
|
cnt, err := os.ReadFile(filename)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return string(cnt), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUpstreamConfigContent returns nginx config as it exists on disk
|
||||||
|
func GetUpstreamConfigContent(u upstream.Model) (string, error) {
|
||||||
|
filename := getUpstreamFilename(u, "")
|
||||||
|
if u.ErrorMessage != "" {
|
||||||
|
filename = getUpstreamFilename(u, ErrorSuffix)
|
||||||
|
}
|
||||||
|
if u.IsDeleted {
|
||||||
|
filename = getUpstreamFilename(u, DeletedSuffix)
|
||||||
|
}
|
||||||
|
|
||||||
|
// nolint: gosec
|
||||||
|
cnt, err := os.ReadFile(filename)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return string(cnt), nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user