Skip to content

Commit

Permalink
chore: improve subscription userinfo parsing (MetaCubeX#781)
Browse files Browse the repository at this point in the history
do not use regex parsing for `Subscription-UserInfo` header field
  • Loading branch information
septs authored Sep 29, 2023
1 parent c2b06a0 commit 0ed3c5a
Showing 1 changed file with 16 additions and 38 deletions.
54 changes: 16 additions & 38 deletions adapter/provider/subscription_info.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package provider

import (
"github.com/dlclark/regexp2"
"strconv"
"strings"
)
Expand All @@ -13,45 +12,24 @@ type SubscriptionInfo struct {
Expire int64
}

func NewSubscriptionInfo(str string) (si *SubscriptionInfo, err error) {
si = &SubscriptionInfo{}
str = strings.ToLower(str)
reTraffic := regexp2.MustCompile("upload=(\\d+); download=(\\d+); total=(\\d+)", 0)
reExpire := regexp2.MustCompile("expire=(\\d+)", 0)

match, err := reTraffic.FindStringMatch(str)
if err != nil || match == nil {
return nil, err
}
group := match.Groups()
si.Upload, err = str2uint64(group[1].String())
if err != nil {
return nil, err
}

si.Download, err = str2uint64(group[2].String())
if err != nil {
return nil, err
}

si.Total, err = str2uint64(group[3].String())
if err != nil {
return nil, err
}

match, _ = reExpire.FindStringMatch(str)
if match != nil {
group = match.Groups()
si.Expire, err = str2uint64(group[1].String())
func NewSubscriptionInfo(userinfo string) (si *SubscriptionInfo, err error) {
userinfo = strings.ToLower(userinfo)
userinfo = strings.ReplaceAll(userinfo, " ", "")
si = new(SubscriptionInfo)
for _, field := range strings.Split(userinfo, ";") {
switch name, value, _ := strings.Cut(field, "="); name {
case "upload":
si.Upload, err = strconv.ParseInt(value, 10, 64)
case "download":
si.Download, err = strconv.ParseInt(value, 10, 64)
case "total":
si.Total, err = strconv.ParseInt(value, 10, 64)
case "expire":
si.Expire, err = strconv.ParseInt(value, 10, 64)
}
if err != nil {
return nil, err
return
}
}

return
}

func str2uint64(str string) (int64, error) {
i, err := strconv.ParseInt(str, 10, 64)
return i, err
}

0 comments on commit 0ed3c5a

Please sign in to comment.