From 8e4de294092e48e199a7493342ebcd7945b43a00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Wed, 3 Aug 2022 18:55:39 +0800 Subject: [PATCH] Improve dns log --- common/dialer/resolve.go | 3 ++ go.mod | 6 +-- go.sum | 12 ++--- log/default.go | 1 + log/observable.go | 1 + log/override.go | 19 +++++++ outbound/builder.go | 2 +- outbound/dns.go | 20 +------ route/router.go | 29 +---------- route/router_dns.go | 109 +++++++++++++++++++++++++++++++++++++++ test/go.mod | 6 +-- test/go.sum | 12 ++--- 12 files changed, 154 insertions(+), 66 deletions(-) create mode 100644 log/override.go create mode 100644 route/router_dns.go diff --git a/common/dialer/resolve.go b/common/dialer/resolve.go index d5f77fcd..99633e2d 100644 --- a/common/dialer/resolve.go +++ b/common/dialer/resolve.go @@ -7,6 +7,7 @@ import ( "time" "github.com/sagernet/sing-box/adapter" + "github.com/sagernet/sing-box/log" "github.com/sagernet/sing-dns" M "github.com/sagernet/sing/common/metadata" N "github.com/sagernet/sing/common/network" @@ -33,6 +34,7 @@ func (d *ResolveDialer) DialContext(ctx context.Context, network string, destina return d.dialer.DialContext(ctx, network, destination) } ctx, metadata := adapter.AppendContext(ctx) + ctx = log.ContextWithOverrideLevel(ctx, log.LevelDebug) metadata.Destination = destination metadata.Domain = "" var addresses []netip.Addr @@ -53,6 +55,7 @@ func (d *ResolveDialer) ListenPacket(ctx context.Context, destination M.Socksadd return d.dialer.ListenPacket(ctx, destination) } ctx, metadata := adapter.AppendContext(ctx) + ctx = log.ContextWithOverrideLevel(ctx, log.LevelDebug) metadata.Destination = destination metadata.Domain = "" var addresses []netip.Addr diff --git a/go.mod b/go.mod index 834e52a7..dd4d29d0 100644 --- a/go.mod +++ b/go.mod @@ -14,15 +14,15 @@ require ( github.com/logrusorgru/aurora v2.0.3+incompatible github.com/oschwald/maxminddb-golang v1.9.0 github.com/sagernet/sing v0.0.0-20220803094243-d9ca259bec6a - github.com/sagernet/sing-dns v0.0.0-20220801112436-b9e99d83271e + github.com/sagernet/sing-dns v0.0.0-20220803121532-9e1ffb850d91 github.com/sagernet/sing-shadowsocks v0.0.0-20220801112336-a91eacdd01e1 - github.com/sagernet/sing-tun v0.0.0-20220803073114-9fad6b0cf330 + github.com/sagernet/sing-tun v0.0.0-20220803112223-a8fd6450d4ed github.com/sagernet/sing-vmess v0.0.0-20220802053753-a38d3b22e6b9 github.com/spf13/cobra v1.5.0 github.com/stretchr/testify v1.8.0 go.uber.org/atomic v1.9.0 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa - golang.org/x/net v0.0.0-20220728211354-c7608f3a8462 + golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b golang.org/x/sys v0.0.0-20220731174439-a90be440212d ) diff --git a/go.sum b/go.sum index 4bc19301..4c494839 100644 --- a/go.sum +++ b/go.sum @@ -151,12 +151,12 @@ github.com/sagernet/netlink v0.0.0-20220803045538-bdac49abf805 h1:hE+vtsjBCCPmxk github.com/sagernet/netlink v0.0.0-20220803045538-bdac49abf805/go.mod h1:xLnfdiJbSp8rNqYEdIW/6eDO4mVoogml14Bh2hSiFpM= github.com/sagernet/sing v0.0.0-20220803094243-d9ca259bec6a h1:CHxuamnZEAxXoep7ycGSuMOiKzsRYuYa0ucnOCdUT9U= github.com/sagernet/sing v0.0.0-20220803094243-d9ca259bec6a/go.mod h1:QVsS5L/ZA2Q5UhQwLrn0Trw+msNd/NPGEhBKR/ioWiY= -github.com/sagernet/sing-dns v0.0.0-20220801112436-b9e99d83271e h1:bkAQ07NmD2vvEg1r/VrKr63BeJXQqZP29waU1Lr1XBM= -github.com/sagernet/sing-dns v0.0.0-20220801112436-b9e99d83271e/go.mod h1:4pEktidzm9Aq9QaN0TuwhOTYD2nFSPsoXckG4svKz/Q= +github.com/sagernet/sing-dns v0.0.0-20220803121532-9e1ffb850d91 h1:jxt2PYixIkK2i7nUGW3f+PzJagEZcbNyQddBWGuqNnw= +github.com/sagernet/sing-dns v0.0.0-20220803121532-9e1ffb850d91/go.mod h1:T77zZdE2Cm6VqnFumrpwsq+kxYsbq+vWDhmjtdSl/oM= github.com/sagernet/sing-shadowsocks v0.0.0-20220801112336-a91eacdd01e1 h1:RYvOc69eSNMN0dwVugrDts41Nn7Ar/C/n/fvytvFcp4= github.com/sagernet/sing-shadowsocks v0.0.0-20220801112336-a91eacdd01e1/go.mod h1:NqZjiXszgVCMQ4gVDa2V+drhS8NMfGqUqDF86EacEFc= -github.com/sagernet/sing-tun v0.0.0-20220803073114-9fad6b0cf330 h1:CtucdvCCxX57pibRy1Cucy104XR0XuVJqWoTIg42O0Q= -github.com/sagernet/sing-tun v0.0.0-20220803073114-9fad6b0cf330/go.mod h1:jNlPidQzZYkpmpQJ+sDN2YGrPsL4QImoqBpuauId9po= +github.com/sagernet/sing-tun v0.0.0-20220803112223-a8fd6450d4ed h1:28qeqeuHLZEkzdcZjYwcCn8y4ckyKimaP+L4P25dqUo= +github.com/sagernet/sing-tun v0.0.0-20220803112223-a8fd6450d4ed/go.mod h1:jNlPidQzZYkpmpQJ+sDN2YGrPsL4QImoqBpuauId9po= github.com/sagernet/sing-vmess v0.0.0-20220802053753-a38d3b22e6b9 h1:x+r8P5MKyQWGN3tcI5dmOM1Aei1mlWua2ciMBGz0/oM= github.com/sagernet/sing-vmess v0.0.0-20220802053753-a38d3b22e6b9/go.mod h1:ETvczg3TQzGa8zg0lYXj8cYTJr4+OFUmtQer9/c/cLU= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= @@ -241,8 +241,8 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220728211354-c7608f3a8462 h1:UreQrH7DbFXSi9ZFox6FNT3WBooWmdANpU+IfkT1T4I= -golang.org/x/net v0.0.0-20220728211354-c7608f3a8462/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b h1:3ogNYyK4oIQdIKzTu68hQrr4iuVxF3AxKl9Aj/eDrw0= +golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= diff --git a/log/default.go b/log/default.go index 44d592bb..09f23e38 100644 --- a/log/default.go +++ b/log/default.go @@ -54,6 +54,7 @@ type simpleLogger struct { } func (l *simpleLogger) Log(ctx context.Context, level Level, args []any) { + level = OverrideLevelFromContext(level, ctx) if level > l.level { return } diff --git a/log/observable.go b/log/observable.go index 4d122bfa..0484539a 100644 --- a/log/observable.go +++ b/log/observable.go @@ -71,6 +71,7 @@ type observableLogger struct { } func (l *observableLogger) Log(ctx context.Context, level Level, args []any) { + level = OverrideLevelFromContext(level, ctx) if level > l.level { return } diff --git a/log/override.go b/log/override.go new file mode 100644 index 00000000..a0e5d3ca --- /dev/null +++ b/log/override.go @@ -0,0 +1,19 @@ +package log + +import ( + "context" +) + +type overrideLevelKey struct{} + +func ContextWithOverrideLevel(ctx context.Context, level Level) context.Context { + return context.WithValue(ctx, (*overrideLevelKey)(nil), level) +} + +func OverrideLevelFromContext(origin Level, ctx context.Context) Level { + level, loaded := ctx.Value((*overrideLevelKey)(nil)).(Level) + if !loaded || origin < level { + return origin + } + return level +} diff --git a/outbound/builder.go b/outbound/builder.go index 2751aef3..82b2eda9 100644 --- a/outbound/builder.go +++ b/outbound/builder.go @@ -20,7 +20,7 @@ func New(ctx context.Context, router adapter.Router, logger log.ContextLogger, o case C.TypeBlock: return NewBlock(logger, options.Tag), nil case C.TypeDNS: - return NewDNS(router, logger, options.Tag), nil + return NewDNS(router, options.Tag), nil case C.TypeSocks: return NewSocks(router, logger, options.Tag, options.SocksOptions) case C.TypeHTTP: diff --git a/outbound/dns.go b/outbound/dns.go index eb0355b3..44372fff 100644 --- a/outbound/dns.go +++ b/outbound/dns.go @@ -10,7 +10,6 @@ import ( "github.com/sagernet/sing-box/adapter" "github.com/sagernet/sing-box/common/canceler" C "github.com/sagernet/sing-box/constant" - "github.com/sagernet/sing-box/log" "github.com/sagernet/sing/common" "github.com/sagernet/sing/common/buf" M "github.com/sagernet/sing/common/metadata" @@ -26,13 +25,12 @@ type DNS struct { myOutboundAdapter } -func NewDNS(router adapter.Router, logger log.ContextLogger, tag string) *DNS { +func NewDNS(router adapter.Router, tag string) *DNS { return &DNS{ myOutboundAdapter{ protocol: C.TypeDNS, network: []string{N.NetworkTCP, N.NetworkUDP}, router: router, - logger: logger, tag: tag, }, } @@ -75,7 +73,6 @@ func (d *DNS) NewConnection(ctx context.Context, conn net.Conn, metadata adapter if len(message.Questions) > 0 { question := message.Questions[0] metadata.Domain = string(question.Name.Data[:question.Name.Length-1]) - d.logger.DebugContext(ctx, "inbound dns query ", formatDNSQuestion(question), " from ", metadata.Source) } go func() error { response, err := d.router.Exchange(ctx, &message) @@ -124,7 +121,6 @@ func (d *DNS) NewPacketConnection(ctx context.Context, conn N.PacketConn, metada if len(message.Questions) > 0 { question := message.Questions[0] metadata.Domain = string(question.Name.Data[:question.Name.Length-1]) - d.logger.DebugContext(ctx, "inbound dns query ", formatDNSQuestion(question), " from ", metadata.Source) } timeout.Update() go func() error { @@ -150,17 +146,3 @@ func (d *DNS) NewPacketConnection(ctx context.Context, conn N.PacketConn, metada }) return group.Run(ctx) } - -func formatDNSQuestion(question dnsmessage.Question) string { - var qType string - qType = question.Type.String() - if len(qType) > 4 { - qType = qType[4:] - } - var qClass string - qClass = question.Class.String() - if len(qClass) > 5 { - qClass = qClass[5:] - } - return string(question.Name.Data[:question.Name.Length-1]) + " " + qType + " " + qClass -} diff --git a/route/router.go b/route/router.go index 765e96e1..9a59b1a4 100644 --- a/route/router.go +++ b/route/router.go @@ -10,8 +10,6 @@ import ( "os" "os/user" "path/filepath" - "reflect" - "runtime/debug" "strings" "time" @@ -36,8 +34,6 @@ import ( M "github.com/sagernet/sing/common/metadata" N "github.com/sagernet/sing/common/network" "github.com/sagernet/sing/common/rw" - - "golang.org/x/net/dns/dnsmessage" ) var warnDefaultInterfaceOnUnsupportedPlatform = warning.New( @@ -580,27 +576,6 @@ func (r *Router) RoutePacketConnection(ctx context.Context, conn N.PacketConn, m return detour.NewPacketConnection(ctx, conn, metadata) } -func (r *Router) Exchange(ctx context.Context, message *dnsmessage.Message) (*dnsmessage.Message, error) { - ctx, transport := r.matchDNS(ctx) - ctx, cancel := context.WithTimeout(ctx, C.DNSTimeout) - defer cancel() - return r.dnsClient.Exchange(ctx, transport, message) -} - -func (r *Router) Lookup(ctx context.Context, domain string, strategy dns.DomainStrategy) ([]netip.Addr, error) { - ctx, transport := r.matchDNS(ctx) - ctx, cancel := context.WithTimeout(ctx, C.DNSTimeout) - defer cancel() - return r.dnsClient.Lookup(ctx, transport, domain, strategy) -} - -func (r *Router) LookupDefault(ctx context.Context, domain string) ([]netip.Addr, error) { - ctx, transport := r.matchDNS(ctx) - ctx, cancel := context.WithTimeout(ctx, C.DNSTimeout) - defer cancel() - return r.dnsClient.Lookup(ctx, transport, domain, r.defaultDomainStrategy) -} - func (r *Router) match(ctx context.Context, metadata *adapter.InboundContext, defaultOutbound adapter.Outbound) (adapter.Rule, adapter.Outbound) { if r.processSearcher != nil { processInfo, err := process.FindProcessInfo(r.processSearcher, ctx, metadata.Network, metadata.Source.Addr, int(metadata.Source.Port)) @@ -643,9 +618,7 @@ func (r *Router) match(ctx context.Context, metadata *adapter.InboundContext, de func (r *Router) matchDNS(ctx context.Context) (context.Context, dns.Transport) { metadata := adapter.ContextFrom(ctx) if metadata == nil { - r.dnsLogger.WarnContext(ctx, "no context: ", reflect.TypeOf(ctx)) - debug.PrintStack() - return ctx, r.defaultTransport + panic("no context") } for i, rule := range r.dnsRules { if rule.Match(metadata) { diff --git a/route/router_dns.go b/route/router_dns.go new file mode 100644 index 00000000..762d915d --- /dev/null +++ b/route/router_dns.go @@ -0,0 +1,109 @@ +package route + +import ( + "context" + "net/netip" + "strings" + + C "github.com/sagernet/sing-box/constant" + "github.com/sagernet/sing-box/log" + "github.com/sagernet/sing-dns" + E "github.com/sagernet/sing/common/exceptions" + F "github.com/sagernet/sing/common/format" + + "golang.org/x/net/dns/dnsmessage" +) + +func (r *Router) Exchange(ctx context.Context, message *dnsmessage.Message) (*dnsmessage.Message, error) { + if len(message.Questions) > 0 { + r.dnsLogger.DebugContext(ctx, "exchange ", formatDNSQuestion(message.Questions[0])) + } + ctx, transport := r.matchDNS(ctx) + ctx, cancel := context.WithTimeout(ctx, C.DNSTimeout) + defer cancel() + response, err := r.dnsClient.Exchange(ctx, transport, message) + if err != nil && len(message.Questions) > 0 { + r.dnsLogger.ErrorContext(ctx, E.Cause(err, "exchange failed for ", message.Questions[0].Name.String())) + } + if response != nil { + LogDNSAnswers(r.dnsLogger, ctx, message.Questions[0].Name.String(), response.Answers) + } + return response, err +} + +func (r *Router) Lookup(ctx context.Context, domain string, strategy dns.DomainStrategy) ([]netip.Addr, error) { + r.dnsLogger.Debug(ctx, "lookup domain ", domain) + ctx, transport := r.matchDNS(ctx) + ctx, cancel := context.WithTimeout(ctx, C.DNSTimeout) + defer cancel() + addrs, err := r.dnsClient.Lookup(ctx, transport, domain, strategy) + if len(addrs) > 0 { + r.logger.InfoContext(ctx, "lookup succeed for ", domain, ": ", F.MapToString(addrs)) + } else { + r.logger.ErrorContext(ctx, E.Cause(err, "lookup failed for ", domain)) + } + return addrs, err +} + +func (r *Router) LookupDefault(ctx context.Context, domain string) ([]netip.Addr, error) { + return r.Lookup(ctx, domain, r.defaultDomainStrategy) +} + +func LogDNSAnswers(logger log.ContextLogger, ctx context.Context, domain string, answers []dnsmessage.Resource) { + for _, rawAnswer := range answers { + var content string + switch answer := rawAnswer.Body.(type) { + case *dnsmessage.AResource: + content = netip.AddrFrom4(answer.A).String() + case *dnsmessage.NSResource: + content = answer.NS.String() + case *dnsmessage.CNAMEResource: + content = answer.CNAME.String() + case *dnsmessage.SOAResource: + content = answer.MBox.String() + case *dnsmessage.PTRResource: + content = answer.PTR.String() + case *dnsmessage.MXResource: + content = answer.MX.String() + case *dnsmessage.TXTResource: + content = strings.Join(answer.TXT, " ") + case *dnsmessage.AAAAResource: + content = netip.AddrFrom16(answer.AAAA).String() + case *dnsmessage.SRVResource: + content = answer.Target.String() + case *dnsmessage.UnknownResource: + content = answer.Type.String() + default: + continue + } + rType := formatDNSType(rawAnswer.Header.Type) + if rType == "" { + logger.InfoContext(ctx, "exchanged ", domain, " ", rType) + } else { + logger.InfoContext(ctx, "exchanged ", domain, " ", rType, " ", content) + } + } +} + +func formatDNSQuestion(question dnsmessage.Question) string { + var qType string + qType = question.Type.String() + if len(qType) > 4 { + qType = qType[4:] + } + var qClass string + qClass = question.Class.String() + if len(qClass) > 5 { + qClass = qClass[5:] + } + return string(question.Name.Data[:question.Name.Length-1]) + " " + qType + " " + qClass +} + +func formatDNSType(qType dnsmessage.Type) string { + qTypeName := qType.String() + if len(qTypeName) > 4 { + return qTypeName[4:] + } else { + return F.ToString("unknown (type ", qTypeName, ")") + } +} diff --git a/test/go.mod b/test/go.mod index 01518997..7a9de1b6 100644 --- a/test/go.mod +++ b/test/go.mod @@ -14,7 +14,7 @@ require ( github.com/sagernet/sing-shadowsocks v0.0.0-20220801112336-a91eacdd01e1 github.com/spyzhov/ajson v0.7.1 github.com/stretchr/testify v1.8.0 - golang.org/x/net v0.0.0-20220728211354-c7608f3a8462 + golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b ) require ( @@ -53,8 +53,8 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/sagernet/netlink v0.0.0-20220803045538-bdac49abf805 // indirect - github.com/sagernet/sing-dns v0.0.0-20220801112436-b9e99d83271e // indirect - github.com/sagernet/sing-tun v0.0.0-20220803073114-9fad6b0cf330 // indirect + github.com/sagernet/sing-dns v0.0.0-20220803121532-9e1ffb850d91 // indirect + github.com/sagernet/sing-tun v0.0.0-20220803112223-a8fd6450d4ed // indirect github.com/sagernet/sing-vmess v0.0.0-20220802053753-a38d3b22e6b9 // indirect github.com/sirupsen/logrus v1.8.1 // indirect github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74 // indirect diff --git a/test/go.sum b/test/go.sum index 67b0de91..0d8dec8a 100644 --- a/test/go.sum +++ b/test/go.sum @@ -176,12 +176,12 @@ github.com/sagernet/netlink v0.0.0-20220803045538-bdac49abf805 h1:hE+vtsjBCCPmxk github.com/sagernet/netlink v0.0.0-20220803045538-bdac49abf805/go.mod h1:xLnfdiJbSp8rNqYEdIW/6eDO4mVoogml14Bh2hSiFpM= github.com/sagernet/sing v0.0.0-20220803094243-d9ca259bec6a h1:CHxuamnZEAxXoep7ycGSuMOiKzsRYuYa0ucnOCdUT9U= github.com/sagernet/sing v0.0.0-20220803094243-d9ca259bec6a/go.mod h1:QVsS5L/ZA2Q5UhQwLrn0Trw+msNd/NPGEhBKR/ioWiY= -github.com/sagernet/sing-dns v0.0.0-20220801112436-b9e99d83271e h1:bkAQ07NmD2vvEg1r/VrKr63BeJXQqZP29waU1Lr1XBM= -github.com/sagernet/sing-dns v0.0.0-20220801112436-b9e99d83271e/go.mod h1:4pEktidzm9Aq9QaN0TuwhOTYD2nFSPsoXckG4svKz/Q= +github.com/sagernet/sing-dns v0.0.0-20220803121532-9e1ffb850d91 h1:jxt2PYixIkK2i7nUGW3f+PzJagEZcbNyQddBWGuqNnw= +github.com/sagernet/sing-dns v0.0.0-20220803121532-9e1ffb850d91/go.mod h1:T77zZdE2Cm6VqnFumrpwsq+kxYsbq+vWDhmjtdSl/oM= github.com/sagernet/sing-shadowsocks v0.0.0-20220801112336-a91eacdd01e1 h1:RYvOc69eSNMN0dwVugrDts41Nn7Ar/C/n/fvytvFcp4= github.com/sagernet/sing-shadowsocks v0.0.0-20220801112336-a91eacdd01e1/go.mod h1:NqZjiXszgVCMQ4gVDa2V+drhS8NMfGqUqDF86EacEFc= -github.com/sagernet/sing-tun v0.0.0-20220803073114-9fad6b0cf330 h1:CtucdvCCxX57pibRy1Cucy104XR0XuVJqWoTIg42O0Q= -github.com/sagernet/sing-tun v0.0.0-20220803073114-9fad6b0cf330/go.mod h1:jNlPidQzZYkpmpQJ+sDN2YGrPsL4QImoqBpuauId9po= +github.com/sagernet/sing-tun v0.0.0-20220803112223-a8fd6450d4ed h1:28qeqeuHLZEkzdcZjYwcCn8y4ckyKimaP+L4P25dqUo= +github.com/sagernet/sing-tun v0.0.0-20220803112223-a8fd6450d4ed/go.mod h1:jNlPidQzZYkpmpQJ+sDN2YGrPsL4QImoqBpuauId9po= github.com/sagernet/sing-vmess v0.0.0-20220802053753-a38d3b22e6b9 h1:x+r8P5MKyQWGN3tcI5dmOM1Aei1mlWua2ciMBGz0/oM= github.com/sagernet/sing-vmess v0.0.0-20220802053753-a38d3b22e6b9/go.mod h1:ETvczg3TQzGa8zg0lYXj8cYTJr4+OFUmtQer9/c/cLU= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= @@ -271,8 +271,8 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220728211354-c7608f3a8462 h1:UreQrH7DbFXSi9ZFox6FNT3WBooWmdANpU+IfkT1T4I= -golang.org/x/net v0.0.0-20220728211354-c7608f3a8462/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b h1:3ogNYyK4oIQdIKzTu68hQrr4iuVxF3AxKl9Aj/eDrw0= +golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=