| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | package pagesimport (	"embed"	"html/template"	"net/http"	"strings"	"github.com/0xJacky/Nginx-UI/settings"	"github.com/gin-gonic/gin")//go:embed *.tmplvar tmplFS embed.FS// MaintenancePageData maintenance page data structuretype MaintenancePageData struct {	Title                string `json:"title"`	Message              string `json:"message"`	Description          string `json:"description"`	ICPNumber            string `json:"icp_number"`	PublicSecurityNumber string `json:"public_security_number"`}const (	Title       = "System Maintenance"	Message     = "We are currently performing system maintenance to improve your experience."	Description = "Please check back later. Thank you for your understanding and patience.")// MaintenancePage returns a maintenance pagefunc MaintenancePage(c *gin.Context) {	// Prepare template data	data := MaintenancePageData{		Title:                Title,		Message:              Message,		Description:          Description,		ICPNumber:            settings.NodeSettings.ICPNumber,		PublicSecurityNumber: settings.NodeSettings.PublicSecurityNumber,	}	// Check User-Agent	userAgent := c.GetHeader("User-Agent")	isBrowser := len(userAgent) > 0 && (contains(userAgent, "Mozilla") ||		contains(userAgent, "Chrome") ||		contains(userAgent, "Safari") ||		contains(userAgent, "Edge") ||		contains(userAgent, "Firefox") ||		contains(userAgent, "Opera"))	if !isBrowser {		c.JSON(http.StatusServiceUnavailable, data)		return	}	// Parse template	tmpl, err := template.ParseFS(tmplFS, "maintenance.tmpl")	if err != nil {		c.String(http.StatusInternalServerError, "503 Service Unavailable")		return	}	// Set content type	c.Header("Content-Type", "text/html; charset=utf-8")	c.Status(http.StatusServiceUnavailable)	// Render template	err = tmpl.Execute(c.Writer, data)	if err != nil {		c.String(http.StatusInternalServerError, "503 Service Unavailable")		return	}}// Helper function to check if a string contains a substringfunc contains(s, substr string) bool {	return strings.Contains(s, substr)}
 |