Files
new-api-custom/controller/status_page.go
T
cneicy ceddfd3d6b feat: sync deployed v1.0.0-rc.38-custom.42
Sync production source including routing, billing, Astra detection and public uptime. Update custom build instructions and license packaging.
2026-09-26 04:49:11 +08:00

85 lines
2.4 KiB
Go

package controller
import (
"net/http"
"strings"
"unicode/utf8"
"github.com/QuantumNous/new-api/common"
"github.com/QuantumNous/new-api/model"
"github.com/gin-gonic/gin"
)
func GetStatusPageAdmin(c *gin.Context) {
results, err := currentGroupMonitors(c.Request.Context(), true)
if err != nil {
common.ApiError(c, err)
return
}
c.JSON(http.StatusOK, gin.H{"success": true, "data": results})
}
func UpdateStatusPageGroup(c *gin.Context) {
var input struct {
Group string `json:"group"`
Alias string `json:"alias"`
Hidden *bool `json:"hidden"`
}
if c.ShouldBindJSON(&input) != nil || strings.TrimSpace(input.Group) == "" || utf8.RuneCountInString(input.Group) > 64 {
c.JSON(http.StatusBadRequest, gin.H{"success": false, "message": "Invalid group"})
return
}
reset := strings.HasSuffix(c.FullPath(), "/reset")
input.Alias = strings.TrimSpace(input.Alias)
if !reset && (input.Hidden == nil || utf8.RuneCountInString(input.Alias) > 80 || strings.ContainsAny(input.Alias, "\r\n\t")) {
c.JSON(http.StatusBadRequest, gin.H{"success": false, "message": "Invalid display settings"})
return
}
channels, err := model.GetStatusChannels(c.Request.Context())
if err != nil {
common.ApiError(c, err)
return
}
found := false
for _, channel := range channels {
for group := range strings.SplitSeq(channel.Group, ",") {
if strings.TrimSpace(group) == input.Group {
found = true
}
}
}
if !found {
c.JSON(http.StatusNotFound, gin.H{"success": false, "message": "Group not found"})
return
}
var display *model.StatusPageGroup
if !reset {
display = &model.StatusPageGroup{Alias: input.Alias, Hidden: *input.Hidden}
}
if err := model.SaveStatusPageGroup(c.Request.Context(), input.Group, display); err != nil {
common.ApiError(c, err)
return
}
c.JSON(http.StatusOK, gin.H{"success": true})
}
// Main-site group status is independent of the public uptime display settings.
func GetSiteGroupStatus(c *gin.Context) {
results, err := currentGroupMonitors(c.Request.Context(), true)
if err != nil {
common.ApiError(c, err)
return
}
for i := range results {
monitors := make([]Monitor, 0, len(results[i].Monitors))
for _, monitor := range results[i].Monitors {
monitor.Name = monitor.Group
monitor.Alias = ""
monitor.Hidden = false
monitors = append(monitors, monitor)
}
results[i].Monitors = monitors
}
c.JSON(http.StatusOK, gin.H{"success": true, "data": results})
}