No One Can Stop Me Now
This commit is contained in:
97
services/setec-manager/internal/handlers/nginx.go
Normal file
97
services/setec-manager/internal/handlers/nginx.go
Normal file
@@ -0,0 +1,97 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"setec-manager/internal/nginx"
|
||||
"setec-manager/internal/system"
|
||||
)
|
||||
|
||||
type nginxStatus struct {
|
||||
Running bool `json:"running"`
|
||||
Status string `json:"status"`
|
||||
ConfigTest string `json:"config_test"`
|
||||
ConfigOK bool `json:"config_ok"`
|
||||
}
|
||||
|
||||
func (h *Handler) NginxStatus(w http.ResponseWriter, r *http.Request) {
|
||||
status := nginxStatus{}
|
||||
status.Status, status.Running = nginx.Status()
|
||||
|
||||
testOut, testErr := nginx.Test()
|
||||
status.ConfigTest = testOut
|
||||
status.ConfigOK = testErr == nil
|
||||
|
||||
if acceptsJSON(r) {
|
||||
writeJSON(w, http.StatusOK, status)
|
||||
return
|
||||
}
|
||||
h.render(w, "nginx.html", status)
|
||||
}
|
||||
|
||||
func (h *Handler) NginxReload(w http.ResponseWriter, r *http.Request) {
|
||||
// Validate config first
|
||||
if _, err := nginx.Test(); err != nil {
|
||||
writeError(w, http.StatusBadRequest, "nginx config test failed — not reloading")
|
||||
return
|
||||
}
|
||||
if err := nginx.Reload(); err != nil {
|
||||
writeError(w, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
writeJSON(w, http.StatusOK, map[string]string{"status": "reloaded"})
|
||||
}
|
||||
|
||||
func (h *Handler) NginxRestart(w http.ResponseWriter, r *http.Request) {
|
||||
if err := nginx.Restart(); err != nil {
|
||||
writeError(w, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
writeJSON(w, http.StatusOK, map[string]string{"status": "restarted"})
|
||||
}
|
||||
|
||||
func (h *Handler) NginxConfigView(w http.ResponseWriter, r *http.Request) {
|
||||
domain := paramStr(r, "domain")
|
||||
path := filepath.Join(h.Config.Nginx.SitesAvailable, domain)
|
||||
|
||||
data, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
writeError(w, http.StatusNotFound, "config not found for "+domain)
|
||||
return
|
||||
}
|
||||
writeJSON(w, http.StatusOK, map[string]string{"domain": domain, "config": string(data)})
|
||||
}
|
||||
|
||||
func (h *Handler) NginxTest(w http.ResponseWriter, r *http.Request) {
|
||||
out, err := nginx.Test()
|
||||
ok := err == nil
|
||||
writeJSON(w, http.StatusOK, map[string]interface{}{
|
||||
"output": strings.TrimSpace(out),
|
||||
"valid": ok,
|
||||
})
|
||||
}
|
||||
|
||||
func (h *Handler) NginxInstallBase(w http.ResponseWriter, r *http.Request) {
|
||||
// Install nginx if not present
|
||||
if _, err := exec.LookPath("nginx"); err != nil {
|
||||
if _, installErr := system.PackageInstall("nginx"); installErr != nil {
|
||||
writeError(w, http.StatusInternalServerError, installErr.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Install snippets
|
||||
if err := nginx.InstallSnippets(h.Config); err != nil {
|
||||
writeError(w, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// Ensure certbot webroot exists
|
||||
os.MkdirAll(h.Config.Nginx.CertbotWebroot, 0755)
|
||||
|
||||
writeJSON(w, http.StatusOK, map[string]string{"status": "nginx configured"})
|
||||
}
|
||||
Reference in New Issue
Block a user