123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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)
- }
|