mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-29 03:26:37 +08:00
99 lines
2.6 KiB
Go
99 lines
2.6 KiB
Go
package handler
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/ShukeBta/MediaStationGo/internal/service"
|
|
)
|
|
|
|
func embySystemInfoHandler(svc *service.Container) gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
c.JSON(http.StatusOK, embyWithRequestAddress(c, svc.Emby.SystemInfo()))
|
|
}
|
|
}
|
|
|
|
func embySystemInfoPublicHandler(svc *service.Container) gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
c.JSON(http.StatusOK, embyWithRequestAddress(c, svc.Emby.SystemInfoPublic()))
|
|
}
|
|
}
|
|
|
|
func embyRequestBaseURL(c *gin.Context) string {
|
|
proto := strings.TrimSpace(c.GetHeader("X-Forwarded-Proto"))
|
|
if proto == "" {
|
|
if c.Request != nil && c.Request.TLS != nil {
|
|
proto = "https"
|
|
} else {
|
|
proto = "http"
|
|
}
|
|
}
|
|
if comma := strings.Index(proto, ","); comma >= 0 {
|
|
proto = strings.TrimSpace(proto[:comma])
|
|
}
|
|
|
|
host := strings.TrimSpace(c.GetHeader("X-Forwarded-Host"))
|
|
if host == "" && c.Request != nil {
|
|
host = strings.TrimSpace(c.Request.Host)
|
|
}
|
|
if host == "" {
|
|
return ""
|
|
}
|
|
return strings.TrimRight(proto+"://"+host, "/")
|
|
}
|
|
|
|
func embyWithRequestAddress(c *gin.Context, payload map[string]any) map[string]any {
|
|
out := make(map[string]any, len(payload)+2)
|
|
for key, value := range payload {
|
|
out[key] = value
|
|
}
|
|
if address := embyRequestBaseURL(c); address != "" {
|
|
out["LocalAddress"] = address
|
|
out["WanAddress"] = address
|
|
out["PublishedServerUrl"] = address
|
|
}
|
|
return out
|
|
}
|
|
|
|
func embySystemEndpointHandler(_ *service.Container) gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"IsLocal": true,
|
|
"IsInNetwork": true,
|
|
})
|
|
}
|
|
}
|
|
|
|
func embyPingHandler(_ *service.Container) gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
// Emby/Jellyfin 期望 plain text "Emby Server"
|
|
c.String(http.StatusOK, "Emby Server")
|
|
}
|
|
}
|
|
|
|
func embyRootHandler(svc *service.Container) gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
c.JSON(http.StatusOK, embyPublicSystemInfoPayload(c, svc))
|
|
}
|
|
}
|
|
|
|
func embyPublicSystemInfoPayload(c *gin.Context, svc *service.Container) map[string]any {
|
|
if svc != nil && svc.Emby != nil {
|
|
return embyWithRequestAddress(c, svc.Emby.SystemInfoPublic())
|
|
}
|
|
return embyWithRequestAddress(c, map[string]any{
|
|
"Id": "mediastation-go-001",
|
|
"ServerId": "mediastation-go-001",
|
|
"ServerName": "MediaStationGo",
|
|
"Version": "4.8.10.0",
|
|
"ServerVersion": "4.8.10.0",
|
|
"ProductName": "Emby Server",
|
|
"OperatingSystem": "Windows",
|
|
"SupportsHttps": false,
|
|
"SupportsAutoDiscovery": true,
|
|
"StartupWizardCompleted": true,
|
|
})
|
|
}
|