mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-09-14 02:12:11 +03:00
* feat(sub): let the panel set the JSON subscription DNS servers A baked routing profile (#6402) carries only the DNS its preset defines, so an operator who wants their own resolvers has to override the whole profile or patch the subscription behind a proxy. Add the subJsonDns setting: either a full xray dns block or a bare array of servers. It wins over the profile's DNS while leaving the profile's routing rules intact, and reaches per-inbound, balancer and info-node documents alike. The value is validated with xray's own schema (internal/xray/dnsconf): a block the client could not load is rejected when the settings are saved and ignored with a warning at request time, instead of being baked into every document. Both the sub server and the settings API share that validator, so a stored value can never be silently dropped. xray's Build() is deliberately not used for validation: it resolves geosite tokens from the geodata files and would reject valid configs whenever those are absent from the panel's working directory. * style(dnsconf): drop the ineffectual initial map assignment golangci's ineffassign flagged the zero-value map whose value both paths overwrite: the object branch now assigns the decoded map directly. * docs(sub): scope the DNS setting to the documents it rewrites The Routing header mirrored to Happ/INCY keeps the routing profile's own resolvers, so the setting description and the header-source comment now say so instead of claiming the profile's DNS is replaced everywhere. Also trims two comments in the new dnsconf package to the repo's two-line cap.
21 lines
633 B
Go
21 lines
633 B
Go
package sub
|
|
|
|
import (
|
|
"github.com/mhsanaei/3x-ui/v3/internal/logger"
|
|
"github.com/mhsanaei/3x-ui/v3/internal/xray/dnsconf"
|
|
)
|
|
|
|
// The subJsonDns setting holds either a full xray dns block or a bare array of
|
|
// servers; dnsconf validates it against the parser the client runs.
|
|
|
|
// SetDnsConfig overrides the dns block of every emitted document; an unusable
|
|
// value is logged and ignored so a typo cannot take subscriptions down.
|
|
func (s *SubJsonService) SetDnsConfig(raw string) {
|
|
block, err := dnsconf.Parse(raw)
|
|
if err != nil {
|
|
logger.Warningf("subJsonDns: %v; keeping the template DNS", err)
|
|
return
|
|
}
|
|
s.dnsBlock = block
|
|
}
|