mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-11 02:15:48 +02:00
78 lines
2 KiB
Go
78 lines
2 KiB
Go
package pages
|
|
|
|
import (
|
|
"embed"
|
|
"html/template"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/0xJacky/Nginx-UI/settings"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
//go:embed *.tmpl
|
|
var tmplFS embed.FS
|
|
|
|
// MaintenancePageData maintenance page data structure
|
|
type 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 page
|
|
func 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 substring
|
|
func contains(s, substr string) bool {
|
|
return strings.Contains(s, substr)
|
|
}
|