|
@@ -504,11 +504,15 @@ func (a *SUBController) subs(c *gin.Context) {
|
|
|
metadata := a.metadataForSubRequest(func() *SubService { return subReq }, subId, builtinProfileURL(c, scheme, hostWithPort))
|
|
metadata := a.metadataForSubRequest(func() *SubService { return subReq }, subId, builtinProfileURL(c, scheme, hostWithPort))
|
|
|
a.ApplyCommonHeaders(c, header, a.updateInterval, metadata.Title, metadata.SupportURL, metadata.ProfileURL, metadata.Announce, a.subEnableRouting, a.subRoutingRules, a.subHideSettings)
|
|
a.ApplyCommonHeaders(c, header, a.updateInterval, metadata.Title, metadata.SupportURL, metadata.ProfileURL, metadata.Announce, a.subEnableRouting, a.subRoutingRules, a.subHideSettings)
|
|
|
|
|
|
|
|
- if a.subIncyEnableRouting && a.subIncyRoutingRules != "" {
|
|
|
|
|
|
|
+ // Incy's profile rides the raw body; other clients must not see that line (#6062).
|
|
|
|
|
+ if IsIncyClient(userAgent) && a.subIncyEnableRouting && a.subIncyRoutingRules != "" {
|
|
|
incyRules, _, err := resolveIncyRoutingSource(a.subIncyRoutingRules)
|
|
incyRules, _, err := resolveIncyRoutingSource(a.subIncyRoutingRules)
|
|
|
if err == nil && strings.TrimSpace(incyRules) != "" {
|
|
if err == nil && strings.TrimSpace(incyRules) != "" {
|
|
|
result.WriteString(incyRules)
|
|
result.WriteString(incyRules)
|
|
|
result.WriteString("\n")
|
|
result.WriteString("\n")
|
|
|
|
|
+ // INCY ranks a Routing header above a body line, so the shared
|
|
|
|
|
+ // profile must not override INCY's own one here.
|
|
|
|
|
+ c.Writer.Header().Del("Routing")
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -957,6 +961,12 @@ func (a *SUBController) ApplyCommonHeaders(
|
|
|
c.Writer.Header().Set("Announce", "base64:"+base64.StdEncoding.EncodeToString([]byte(profileAnnounce)))
|
|
c.Writer.Header().Set("Announce", "base64:"+base64.StdEncoding.EncodeToString([]byte(profileAnnounce)))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // The Happ tab is Happ-only, so INCY reads it as blank and gets the shared
|
|
|
|
|
+ // JSON profile instead; INCY takes a routing link of any scheme (#6062).
|
|
|
|
|
+ incyClient := c.Request != nil && IsIncyClient(c.GetHeader("User-Agent"))
|
|
|
|
|
+ if incyClient {
|
|
|
|
|
+ profileEnableRouting, profileRoutingRules = false, ""
|
|
|
|
|
+ }
|
|
|
rules, remote, routingErr := resolveRoutingSource(remoteRoutingHapp, profileRoutingRules)
|
|
rules, remote, routingErr := resolveRoutingSource(remoteRoutingHapp, profileRoutingRules)
|
|
|
if strings.TrimSpace(profileRoutingRules) == "" {
|
|
if strings.TrimSpace(profileRoutingRules) == "" {
|
|
|
// Happ/INCY fetch the geo files the baked rules reference through this
|
|
// Happ/INCY fetch the geo files the baked rules reference through this
|
|
@@ -981,5 +991,5 @@ func (a *SUBController) ApplyCommonHeaders(
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
ApplyHappHeaders(c, a.happConfig, happManaged)
|
|
ApplyHappHeaders(c, a.happConfig, happManaged)
|
|
|
- ApplyIncyHeaders(c, a.incyConfig, a.incyConfig.AutoDetect && c.Request != nil && IsIncyClient(c.GetHeader("User-Agent")))
|
|
|
|
|
|
|
+ ApplyIncyHeaders(c, a.incyConfig, a.incyConfig.AutoDetect && incyClient)
|
|
|
}
|
|
}
|