diff --git a/internal/logic/subscribe/subscribeLogic.go b/internal/logic/subscribe/subscribeLogic.go index 29a5a94..28f9ecb 100644 --- a/internal/logic/subscribe/subscribeLogic.go +++ b/internal/logic/subscribe/subscribeLogic.go @@ -10,6 +10,7 @@ import ( "github.com/perfect-panel/server/internal/model/client" "github.com/perfect-panel/server/internal/model/log" "github.com/perfect-panel/server/internal/model/node" + "github.com/perfect-panel/server/internal/report" "github.com/perfect-panel/server/internal/model/user" @@ -106,11 +107,13 @@ func (l *SubscribeLogic) Handler(req *types.SubscribeRequest) (resp *types.Subsc Download: userSubscribe.Download, Upload: userSubscribe.Upload, Traffic: userSubscribe.Traffic, - SubscribeURL: l.getSubscribeV2URL(req.Token), + SubscribeURL: l.getSubscribeV2URL(), }), adapter.WithParams(req.Params), ) + logger.Debugf("[SubscribeLogic] Building client config for user %d with URI %s", userSubscribe.UserId, l.getSubscribeV2URL()) + // Get client config adapterClient, err := a.Client() if err != nil { @@ -144,17 +147,20 @@ func (l *SubscribeLogic) Handler(req *types.SubscribeRequest) (resp *types.Subsc return } -func (l *SubscribeLogic) getSubscribeV2URL(token string) string { - if l.svc.Config.Subscribe.PanDomain { - return fmt.Sprintf("https://%s", l.ctx.Request.Host) - } +func (l *SubscribeLogic) getSubscribeV2URL() string { + uri := l.ctx.Request.RequestURI + // is gateway mode, add /sub prefix + if report.IsGatewayMode() { + uri = "/sub" + uri + } + // use custom domain if configured if l.svc.Config.Subscribe.SubscribeDomain != "" { domains := strings.Split(l.svc.Config.Subscribe.SubscribeDomain, "\n") - return fmt.Sprintf("https://%s%s?token=%s", domains[0], l.svc.Config.Subscribe.SubscribePath, token) + return fmt.Sprintf("https://%s%s", domains[0], uri) } - - return fmt.Sprintf("https://%s%s?token=%s&", l.ctx.Request.Host, l.svc.Config.Subscribe.SubscribePath, token) + // use current request host + return fmt.Sprintf("https://%s%s", l.ctx.Request.Host, uri) } func (l *SubscribeLogic) getUserSubscribe(token string) (*user.Subscribe, error) {