fc88f5a509
- Implement HEAD method for retrieving sub resource metadata for some clients (example: Karing)
66 lines
1.3 KiB
Go
66 lines
1.3 KiB
Go
package sub
|
|
|
|
import (
|
|
"github.com/alireza0/s-ui/logger"
|
|
"github.com/alireza0/s-ui/service"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type SubHandler struct {
|
|
service.SettingService
|
|
SubService
|
|
JsonService
|
|
ClashService
|
|
}
|
|
|
|
func NewSubHandler(g *gin.RouterGroup) {
|
|
a := &SubHandler{}
|
|
a.initRouter(g)
|
|
}
|
|
|
|
func (s *SubHandler) initRouter(g *gin.RouterGroup) {
|
|
g.GET("/:subid", s.subs)
|
|
g.HEAD("/:subid", s.subs)
|
|
}
|
|
|
|
func (s *SubHandler) subs(c *gin.Context) {
|
|
var headers []string
|
|
var result *string
|
|
var err error
|
|
subId := c.Param("subid")
|
|
format, isFormat := c.GetQuery("format")
|
|
if isFormat {
|
|
switch format {
|
|
case "json":
|
|
result, headers, err = s.JsonService.GetJson(subId, format)
|
|
case "clash":
|
|
result, headers, err = s.ClashService.GetClash(subId)
|
|
}
|
|
if err != nil || result == nil {
|
|
logger.Error(err)
|
|
c.String(400, "Error!")
|
|
return
|
|
}
|
|
} else {
|
|
result, headers, err = s.SubService.GetSubs(subId)
|
|
if err != nil || result == nil {
|
|
logger.Error(err)
|
|
c.String(400, "Error!")
|
|
return
|
|
}
|
|
}
|
|
// Add headers
|
|
c.Writer.Header().Set("Subscription-Userinfo", headers[0])
|
|
c.Writer.Header().Set("Profile-Update-Interval", headers[1])
|
|
c.Writer.Header().Set("Profile-Title", headers[2])
|
|
|
|
// For HEAD requests
|
|
if c.Request.Method == "HEAD" {
|
|
c.Status(200)
|
|
return
|
|
}
|
|
|
|
c.String(200, *result)
|
|
}
|