浏览代码

[sub] add more headers

Co-Authored-By: Alireza Ahmadi <[email protected]>
MHSanaei 1 年之前
父节点
当前提交
be50be75fe
共有 2 个文件被更改,包括 13 次插入10 次删除
  1. 5 3
      web/controller/sub.go
  2. 8 7
      web/service/sub.go

+ 5 - 3
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)))
 	}

+ 8 - 7
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