fix(sub): {{INBOUND}} = inbound remark, fix {{TRAFFIC_LEFT}} across inbounds (#5443)

Issue 1: the host endpoint remark no longer substitutes the inbound remark
as the config name. {{INBOUND}} always resolves to the inbound's own remark
and {{HOST}} to the host remark, so both can be shown side by side instead
of the host name appearing twice. configName() drops hostRemark entirely;
token help text updated in all locales.

Issue 2: client_traffics.email is globally unique, so a client shared across
several inbounds of one subscription has a single traffic row owned by one
inbound. statsForClient only searched the current inbound's preloaded
ClientStats, missing on every other inbound's link and falling back to
Up=Down=0 -- so {{TRAFFIC_LEFT}} printed the full quota. Build a per-request
email->stats map from all the subscription's inbounds (no extra queries) and
fall back to it.
This commit is contained in:
MHSanaei
2026-06-20 10:54:26 +02:00
parent 6a032bcb2a
commit 6d9fd4b41b
17 changed files with 95 additions and 46 deletions
+2 -1
View File
@@ -149,7 +149,8 @@ func (a *SUBController) subs(c *gin.Context) {
} else {
var result strings.Builder
for _, sub := range subs {
result.WriteString(sub + "\n")
result.WriteString(sub)
result.WriteString("\n")
}
// If the request expects HTML (e.g., browser) or explicitly asked (?html=1 or ?view=html), render the info page here