1
0

subController.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package sub
  2. import (
  3. "encoding/base64"
  4. "strings"
  5. "x-ui/web/service"
  6. "github.com/gin-gonic/gin"
  7. )
  8. type SUBController struct {
  9. subService SubService
  10. settingService service.SettingService
  11. }
  12. func NewSUBController(g *gin.RouterGroup) *SUBController {
  13. a := &SUBController{}
  14. a.initRouter(g)
  15. return a
  16. }
  17. func (a *SUBController) initRouter(g *gin.RouterGroup) {
  18. g = g.Group("/")
  19. g.GET("/:subid", a.subs)
  20. }
  21. func (a *SUBController) subs(c *gin.Context) {
  22. subEncrypt, _ := a.settingService.GetSubEncrypt()
  23. subShowInfo, _ := a.settingService.GetSubShowInfo()
  24. subId := c.Param("subid")
  25. host := strings.Split(c.Request.Host, ":")[0]
  26. subs, headers, err := a.subService.GetSubs(subId, host, subShowInfo)
  27. if err != nil || len(subs) == 0 {
  28. c.String(400, "Error!")
  29. } else {
  30. result := ""
  31. for _, sub := range subs {
  32. result += sub + "\n"
  33. }
  34. // Add headers
  35. c.Writer.Header().Set("Subscription-Userinfo", headers[0])
  36. c.Writer.Header().Set("Profile-Update-Interval", headers[1])
  37. c.Writer.Header().Set("Profile-Title", headers[2])
  38. if subEncrypt {
  39. c.String(200, base64.StdEncoding.EncodeToString([]byte(result)))
  40. } else {
  41. c.String(200, result)
  42. }
  43. }
  44. }