From be50be75fe56a617713efe1cc56de3a14ec7e0c9 Mon Sep 17 00:00:00 2001 From: MHSanaei <ho3ein.sanaei@gmail.com> Date: Wed, 17 May 2023 01:07:35 +0330 Subject: [PATCH] [sub] add more headers Co-Authored-By: Alireza Ahmadi <alireza7@gmail.com> --- web/controller/sub.go | 8 +++++--- web/service/sub.go | 15 ++++++++------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/web/controller/sub.go b/web/controller/sub.go index 5ab1fe46..2b218c21 100644 --- a/web/controller/sub.go +++ b/web/controller/sub.go @@ -29,7 +29,7 @@ func (a *SUBController) initRouter(g *gin.RouterGroup) { func (a *SUBController) subs(c *gin.Context) { subId := c.Param("subid") host := strings.Split(c.Request.Host, ":")[0] - subs, header, err := a.subService.GetSubs(subId, host) + subs, headers, err := a.subService.GetSubs(subId, host) if err != nil || len(subs) == 0 { c.String(400, "Error!") } else { @@ -38,8 +38,10 @@ func (a *SUBController) subs(c *gin.Context) { result += sub + "\n" } - // Add subscription-userinfo - c.Writer.Header().Set("Subscription-Userinfo", header) + // 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]) c.String(200, base64.StdEncoding.EncodeToString([]byte(result))) } diff --git a/web/service/sub.go b/web/service/sub.go index bc34366f..01cd29dd 100644 --- a/web/service/sub.go +++ b/web/service/sub.go @@ -11,7 +11,6 @@ import ( "x-ui/xray" "github.com/goccy/go-json" - "gorm.io/gorm" ) type SubService struct { @@ -19,15 +18,15 @@ type SubService struct { inboundService InboundService } -func (s *SubService) GetSubs(subId string, host string) ([]string, string, error) { +func (s *SubService) GetSubs(subId string, host string) ([]string, []string, error) { s.address = host var result []string - var header string + var headers []string var traffic xray.ClientTraffic var clientTraffics []xray.ClientTraffic inbounds, err := s.getInboundsBySubId(subId) if err != nil { - return nil, "", err + return nil, nil, err } for _, inbound := range inbounds { clients, err := s.inboundService.getClients(inbound) @@ -66,15 +65,17 @@ func (s *SubService) GetSubs(subId string, host string) ([]string, string, error } } } - header = fmt.Sprintf("upload=%d; download=%d; total=%d; expire=%d", traffic.Up, traffic.Down, traffic.Total, traffic.ExpiryTime/1000) - return result, header, nil + headers = append(headers, fmt.Sprintf("upload=%d; download=%d; total=%d; expire=%d", traffic.Up, traffic.Down, traffic.Total, traffic.ExpiryTime/1000)) + headers = append(headers, "12") + headers = append(headers, subId) + return result, headers, nil } func (s *SubService) getInboundsBySubId(subId string) ([]*model.Inbound, error) { db := database.GetDB() var inbounds []*model.Inbound err := db.Model(model.Inbound{}).Preload("ClientStats").Where("settings like ? and enable = ?", fmt.Sprintf(`%%"subId": "%s"%%`, subId), true).Find(&inbounds).Error - if err != nil && err != gorm.ErrRecordNotFound { + if err != nil { return nil, err } return inbounds, nil