telemetrygateway: use official SAMS SDK (#62094)

Migrates Telemetry Gateway to use the official SAMS SDK: https://github.com/sourcegraph/sourcegraph-accounts-sdk-go. This is important as we start accepting events from other managed services (https://github.com/sourcegraph/self-serve-cody/pull/721) and need to do token introspection + scope checks on the incoming requests.

As part of this, I also upgraded the SDK dependency, which involved some constructor changes (https://github.com/sourcegraph/sourcegraph-accounts-sdk-go/pull/12)

## Test plan

My setup from https://github.com/sourcegraph/sourcegraph/pull/61022 still runs, indicating all required configuration is present: 

```
[telemetry-g...y] DEBUG service service/service.go:69 using SAMS client {"samsExternalURL": "https://accounts.sourcegraph.com", "samsAPIURL": null, "clientID": "sams_cid_
```

CI passes as well.

---------

Co-authored-by: Joe Chen <joe@sourcegraph.com>
This commit is contained in:
Robert Lin 2024-04-22 22:25:13 -07:00 committed by GitHub
parent f869f924f0
commit fd3a4a3a9b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 192 additions and 114 deletions

View File

@ -77,9 +77,11 @@ func SignOut(w http.ResponseWriter, r *http.Request, sessionKey string, getProvi
// dotcom-specific operation, we can live with it, to avoid cascading
// refactorings that doesn't really do any useful in enterprise environment.
samsClient, err := sams.NewClientV1(
p.config.Issuer,
p.config.ClientID,
p.config.ClientSecret,
sams.ClientV1ConnConfig{
ExternalURL: p.config.Issuer,
ClientID: p.config.ClientID,
ClientSecret: p.config.ClientSecret,
},
[]scopes.Scope{
"sams::session::read",
"sams::session::write",

View File

@ -16,12 +16,12 @@ go_library(
"//cmd/telemetry-gateway/internal/server/samsm2m",
"//internal/licensing",
"//internal/pubsub",
"//internal/sams",
"//internal/trace",
"//lib/errors",
"//lib/telemetrygateway/v1:telemetrygateway",
"@com_github_cockroachdb_redact//:redact",
"@com_github_sourcegraph_log//:log",
"@com_github_sourcegraph_sourcegraph_accounts_sdk_go//:sourcegraph-accounts-sdk-go",
"@io_opentelemetry_go_otel//:otel",
"@io_opentelemetry_go_otel//attribute",
"@io_opentelemetry_go_otel_metric//:metric",

View File

@ -8,10 +8,12 @@ go_library(
visibility = ["//cmd/telemetry-gateway:__subpackages__"],
deps = [
"//internal/authbearer",
"//internal/sams",
"//lib/errors",
"@com_github_sourcegraph_log//:log",
"@com_github_sourcegraph_sourcegraph_accounts_sdk_go//:sourcegraph-accounts-sdk-go",
"@com_github_sourcegraph_sourcegraph_accounts_sdk_go//scopes",
"@io_opentelemetry_go_otel//:otel",
"@io_opentelemetry_go_otel//attribute",
"@io_opentelemetry_go_otel//codes",
"@io_opentelemetry_go_otel_trace//:trace",
"@org_golang_google_grpc//codes",
@ -25,10 +27,11 @@ go_test(
srcs = ["samsm2m_test.go"],
embed = [":samsm2m"],
deps = [
"//internal/sams",
"//lib/errors",
"@com_github_hexops_autogold_v2//:autogold",
"@com_github_sourcegraph_log//logtest",
"@com_github_sourcegraph_sourcegraph_accounts_sdk_go//:sourcegraph-accounts-sdk-go",
"@com_github_sourcegraph_sourcegraph_accounts_sdk_go//scopes",
"@com_github_stretchr_testify//assert",
"@com_github_stretchr_testify//require",
"@org_golang_google_grpc//metadata",

View File

@ -2,10 +2,9 @@ package samsm2m
import (
"context"
"slices"
"strings"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
otelcodes "go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/trace"
"google.golang.org/grpc/codes"
@ -14,21 +13,27 @@ import (
"github.com/sourcegraph/log"
"github.com/sourcegraph/sourcegraph-accounts-sdk-go/scopes"
sams "github.com/sourcegraph/sourcegraph-accounts-sdk-go"
"github.com/sourcegraph/sourcegraph/internal/authbearer"
"github.com/sourcegraph/sourcegraph/internal/sams"
"github.com/sourcegraph/sourcegraph/lib/errors"
)
const requiredSamsScope = "telemetry_gateway::events::write"
var requiredSamsScope = scopes.ToScope(scopes.ServiceTelemetryGateway, "events", scopes.ActionWrite)
var tracer = otel.GetTracerProvider().Tracer("telemetry-gateway/samsm2m")
type TokenIntrospector interface {
IntrospectToken(ctx context.Context, token string) (*sams.IntrospectTokenResponse, error)
}
// CheckWriteEventsScope ensures the request context has a valid SAMS MSM token
// with requiredSamsScope. It returns a gRPC status error suitable to be returned
// directly from an RPC implementation.
//
// See: go/sams-m2m
func CheckWriteEventsScope(ctx context.Context, logger log.Logger, samsClient sams.Client) (err error) {
func CheckWriteEventsScope(ctx context.Context, logger log.Logger, tokens TokenIntrospector) (err error) {
var span trace.Span
ctx, span = tracer.Start(ctx, "CheckWriteEventsScope")
defer func() {
@ -58,26 +63,27 @@ func CheckWriteEventsScope(ctx context.Context, logger log.Logger, samsClient sa
// TODO: as part of go/sams-m2m we need to build out a SDK for SAMS M2M
// consumers that has a recommended short-caching mechanism. Avoid doing it
// for now until we have a concerted effort.
result, err := samsClient.IntrospectToken(ctx, token)
result, err := tokens.IntrospectToken(ctx, token)
if err != nil {
logger.Error("samsClient.IntrospectToken failed", log.Error(err))
return status.Error(codes.Internal, "unable to validate token")
}
span.SetAttributes(attribute.String("client_id", result.ClientID))
// Active encapsulates whether the token is active, including expiration.
if !result.Active {
// Record detailed error in span, and return an opaque one
span.RecordError(errors.New("inactive scope"))
span.RecordError(errors.New("inactive token"))
return status.Error(codes.PermissionDenied, "permission denied")
}
// Check for our required scope.
gotScopes := strings.Split(result.Scope, " ")
if !slices.Contains(gotScopes, requiredSamsScope) {
if !result.Scopes.Match(requiredSamsScope) {
// Record detailed error in span and logs, and return an opaque one
err = errors.Newf("got scopes %q, required: %q", gotScopes, requiredSamsScope)
err = errors.Newf("got scopes %+v, required: %+v", result.Scopes, requiredSamsScope)
span.RecordError(err)
logger.Error("attempt to authenticate using SAMS token without required scope",
log.String("clientID", result.ClientID),
log.Error(err))
return status.Error(codes.PermissionDenied, "permission denied")
}

View File

@ -10,16 +10,18 @@ import (
"github.com/stretchr/testify/require"
"google.golang.org/grpc/metadata"
"github.com/sourcegraph/sourcegraph/internal/sams"
"github.com/sourcegraph/sourcegraph-accounts-sdk-go/scopes"
sams "github.com/sourcegraph/sourcegraph-accounts-sdk-go"
"github.com/sourcegraph/sourcegraph/lib/errors"
)
type mockSAMSClient struct {
result *sams.TokenIntrospection
result *sams.IntrospectTokenResponse
error error
}
func (m mockSAMSClient) IntrospectToken(context.Context, string) (*sams.TokenIntrospection, error) {
func (m mockSAMSClient) IntrospectToken(context.Context, string) (*sams.IntrospectTokenResponse, error) {
return m.result, m.error
}
@ -27,7 +29,7 @@ func TestCheckWriteEventsScope(t *testing.T) {
for _, tc := range []struct {
name string
metadata map[string]string
samsClient sams.Client
samsClient TokenIntrospector
wantErr autogold.Value
}{
{
@ -57,22 +59,25 @@ func TestCheckWriteEventsScope(t *testing.T) {
{
name: "token ok, but inactive",
metadata: map[string]string{"authorization": "bearer foobar"},
samsClient: mockSAMSClient{result: &sams.TokenIntrospection{Active: false}},
samsClient: mockSAMSClient{result: &sams.IntrospectTokenResponse{Active: false}},
wantErr: autogold.Expect("rpc error: code = PermissionDenied desc = permission denied"),
},
{
name: "token ok and active, but invalid scope",
metadata: map[string]string{"authorization": "bearer foobar"},
samsClient: mockSAMSClient{result: &sams.TokenIntrospection{Active: true, Scope: "foo bar"}},
wantErr: autogold.Expect("rpc error: code = PermissionDenied desc = permission denied"),
name: "token ok and active, but invalid scope",
metadata: map[string]string{"authorization": "bearer foobar"},
samsClient: mockSAMSClient{result: &sams.IntrospectTokenResponse{
Active: true,
Scopes: scopes.ToScopes([]string{"foo", "bar"}),
}},
wantErr: autogold.Expect("rpc error: code = PermissionDenied desc = permission denied"),
},
{
name: "token ok and active and valid scope",
metadata: map[string]string{"authorization": "bearer foobar"},
samsClient: mockSAMSClient{
result: &sams.TokenIntrospection{
result: &sams.IntrospectTokenResponse{
Active: true,
Scope: "foo bar " + requiredSamsScope,
Scopes: append(scopes.ToScopes([]string{"foo", "bar"}), requiredSamsScope),
},
},
wantErr: nil, // success

View File

@ -12,9 +12,9 @@ import (
"github.com/sourcegraph/log"
sams "github.com/sourcegraph/sourcegraph-accounts-sdk-go"
"github.com/sourcegraph/sourcegraph/internal/licensing"
"github.com/sourcegraph/sourcegraph/internal/pubsub"
"github.com/sourcegraph/sourcegraph/internal/sams"
sgtrace "github.com/sourcegraph/sourcegraph/internal/trace"
"github.com/sourcegraph/sourcegraph/lib/errors"
@ -29,7 +29,7 @@ type Server struct {
publishOpts events.PublishStreamOptions
// samsClient is used for M2M authn/authz: go/sams-m2m
samsClient sams.Client
samsClient *sams.ClientV1
recordEventsMetrics recordEventsMetrics
recordEventMetrics recordEventMetrics
@ -43,7 +43,7 @@ var _ telemetrygatewayv1.TelemeteryGatewayServiceServer = (*Server)(nil)
func New(
logger log.Logger,
eventsTopic pubsub.TopicPublisher,
samsClient sams.Client,
samsClient *sams.ClientV1,
publishOpts events.PublishStreamOptions,
) (*Server, error) {
recordEventsRPCMetrics, err := newRecordEventsMetrics()
@ -140,7 +140,7 @@ func (s *Server) RecordEvents(stream telemetrygatewayv1.TelemeteryGatewayService
// 🚨 SECURITY: Only known clients registered in SAMS can submit events
// as a managed service.
if err := samsm2m.CheckWriteEventsScope(stream.Context(), logger, s.samsClient); err != nil {
if err := samsm2m.CheckWriteEventsScope(stream.Context(), logger, s.samsClient.Tokens()); err != nil {
return err
}
@ -229,7 +229,7 @@ func (s *Server) RecordEvent(ctx context.Context, req *telemetrygatewayv1.Record
// 🚨 SECURITY: Only known clients registered in SAMS can submit events
// as a managed service.
if err := samsm2m.CheckWriteEventsScope(ctx, logger, s.samsClient); err != nil {
if err := samsm2m.CheckWriteEventsScope(ctx, logger, s.samsClient.Tokens()); err != nil {
return nil, err
}

View File

@ -16,7 +16,6 @@ go_library(
"//internal/grpc/defaults",
"//internal/httpserver",
"//internal/pubsub",
"//internal/sams",
"//internal/trace/policy",
"//internal/version",
"//lib/background",
@ -25,8 +24,9 @@ go_library(
"//lib/managedservicesplatform/runtime/contract",
"//lib/telemetrygateway/v1:telemetrygateway",
"@com_github_sourcegraph_log//:log",
"@com_github_sourcegraph_sourcegraph_accounts_sdk_go//:sourcegraph-accounts-sdk-go",
"@com_github_sourcegraph_sourcegraph_accounts_sdk_go//scopes",
"@io_opentelemetry_go_otel//:otel",
"@io_opentelemetry_go_otel_metric//:metric",
"@org_golang_x_oauth2//clientcredentials",
],
)

View File

@ -1,6 +1,7 @@
package service
import (
sams "github.com/sourcegraph/sourcegraph-accounts-sdk-go"
"github.com/sourcegraph/sourcegraph/lib/managedservicesplatform/runtime"
)
@ -15,11 +16,7 @@ type Config struct {
StreamPublishConcurrency int
}
SAMS struct {
ServerURL string
ClientID string
ClientSecret string
}
SAMS sams.ClientV1ConnConfig
}
func (c *Config) Load(env *runtime.Env) {
@ -32,8 +29,10 @@ func (c *Config) Load(env *runtime.Env) {
c.Events.StreamPublishConcurrency = env.GetInt("TELEMETRY_GATEWAY_EVENTS_STREAM_PUBLISH_CONCURRENCY", "250",
"Per-stream concurrent publishing limit.")
c.SAMS.ServerURL = env.Get("TELEMETRY_GATEWAY_SAMS_SERVER_URL", "https://accounts.sourcegraph.com",
"Sourcegraph Accounts Management System URL")
// Construct by hand instead of sams.NewClientV1ConnectionConfigFromEnv for
// backwards compatibility.
c.SAMS.ExternalURL = env.Get("SAMS_URL", "https://accounts.sourcegraph.com", "External URL of the connected SAMS instance")
c.SAMS.APIURL = env.GetOptional("TELEMETRY_GATEWAY_SAMS_SERVER_URL", "Sourcegraph Accounts Management System URL")
c.SAMS.ClientID = env.Get("TELEMETRY_GATEWAY_SAMS_CLIENT_ID", "",
"Sourcegraph Accounts Management System client ID")
c.SAMS.ClientSecret = env.Get("TELEMETRY_GATEWAY_SAMS_CLIENT_SECRET", "",

View File

@ -10,14 +10,15 @@ import (
"github.com/sourcegraph/log"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/metric"
"golang.org/x/oauth2/clientcredentials"
"github.com/sourcegraph/sourcegraph-accounts-sdk-go/scopes"
sams "github.com/sourcegraph/sourcegraph-accounts-sdk-go"
"github.com/sourcegraph/sourcegraph/internal/debugserver"
internalgrpc "github.com/sourcegraph/sourcegraph/internal/grpc"
"github.com/sourcegraph/sourcegraph/internal/grpc/defaults"
"github.com/sourcegraph/sourcegraph/internal/httpserver"
"github.com/sourcegraph/sourcegraph/internal/pubsub"
"github.com/sourcegraph/sourcegraph/internal/sams"
"github.com/sourcegraph/sourcegraph/internal/trace/policy"
"github.com/sourcegraph/sourcegraph/internal/version"
@ -66,14 +67,13 @@ func (Service) Initialize(ctx context.Context, logger log.Logger, contract runti
// Prepare SAMS client, so that we can enforce SAMS-based M2M authz/authn
logger.Debug("using SAMS client",
log.String("samsServer", config.SAMS.ServerURL),
log.String("samsExternalURL", config.SAMS.ExternalURL),
log.Stringp("samsAPIURL", config.SAMS.APIURL),
log.String("clientID", config.SAMS.ClientID))
samsClient := sams.NewClient(config.SAMS.ServerURL, clientcredentials.Config{
ClientID: config.SAMS.ClientID,
ClientSecret: config.SAMS.ClientSecret,
TokenURL: fmt.Sprintf("%s/oauth/token", config.SAMS.ServerURL),
Scopes: []string{"openid", "profile", "email"},
})
samsClient, err := sams.NewClientV1(config.SAMS, []scopes.Scope{"openid", "profile", "email"})
if err != nil {
return nil, errors.Wrap(err, "create Sourcegraph Accounts client")
}
// Initialize our gRPC server
grpcServer := defaults.NewPublicServer(logger)

111
deps.bzl
View File

@ -41,8 +41,15 @@ def go_dependencies():
name = "com_connectrpc_connect",
build_file_proto_mode = "disable_global",
importpath = "connectrpc.com/connect",
sum = "h1:rdtfQjZ0OyFkWPTegBNcH7cwquGAN1WzyJy80oFNibg=",
version = "v1.16.0",
sum = "h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis=",
version = "v1.16.1",
)
go_repository(
name = "com_connectrpc_otelconnect",
build_file_proto_mode = "disable_global",
importpath = "connectrpc.com/otelconnect",
sum = "h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY=",
version = "v0.7.0",
)
go_repository(
name = "com_github_99designs_gqlgen",
@ -1313,6 +1320,13 @@ def go_dependencies():
sum = "h1:koIcOUdrTIivZgSLhHQvKgqdWZq5d7KdMEWF1Ud6+5g=",
version = "v1.2.0",
)
go_repository(
name = "com_github_decred_dcrd_dcrec_secp256k1_v4",
build_file_proto_mode = "disable_global",
importpath = "github.com/decred/dcrd/dcrec/secp256k1/v4",
sum = "h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs=",
version = "v4.2.0",
)
go_repository(
name = "com_github_dennwc_varint",
build_file_proto_mode = "disable_global",
@ -1780,8 +1794,8 @@ def go_dependencies():
name = "com_github_getsentry_sentry_go",
build_file_proto_mode = "disable_global",
importpath = "github.com/getsentry/sentry-go",
sum = "h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI=",
version = "v0.25.0",
sum = "h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps=",
version = "v0.27.0",
)
go_repository(
name = "com_github_gfleury_go_bitbucket_v1",
@ -2369,8 +2383,8 @@ def go_dependencies():
name = "com_github_golang_jwt_jwt_v5",
build_file_proto_mode = "disable_global",
importpath = "github.com/golang-jwt/jwt/v5",
sum = "h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE=",
version = "v5.0.0",
sum = "h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=",
version = "v5.2.1",
)
go_repository(
name = "com_github_golang_lint",
@ -3317,8 +3331,8 @@ def go_dependencies():
name = "com_github_jackc_pgservicefile",
build_file_proto_mode = "disable_global",
importpath = "github.com/jackc/pgservicefile",
sum = "h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=",
version = "v0.0.0-20221227161230-091c0ba34f0a",
sum = "h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA=",
version = "v0.0.0-20231201235250-de7065d80cb9",
)
go_repository(
name = "com_github_jackc_pgtype",
@ -3803,6 +3817,48 @@ def go_dependencies():
sum = "h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=",
version = "v1.2.1",
)
go_repository(
name = "com_github_lestrrat_go_blackmagic",
build_file_proto_mode = "disable_global",
importpath = "github.com/lestrrat-go/blackmagic",
sum = "h1:Cg2gVSc9h7sz9NOByczrbUvLopQmXrfFx//N+AkAr5k=",
version = "v1.0.2",
)
go_repository(
name = "com_github_lestrrat_go_httpcc",
build_file_proto_mode = "disable_global",
importpath = "github.com/lestrrat-go/httpcc",
sum = "h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZrIE=",
version = "v1.0.1",
)
go_repository(
name = "com_github_lestrrat_go_httprc",
build_file_proto_mode = "disable_global",
importpath = "github.com/lestrrat-go/httprc",
sum = "h1:bsTfiH8xaKOJPrg1R+E3iE/AWZr/x0Phj9PBTG/OLUk=",
version = "v1.0.5",
)
go_repository(
name = "com_github_lestrrat_go_iter",
build_file_proto_mode = "disable_global",
importpath = "github.com/lestrrat-go/iter",
sum = "h1:gMXo1q4c2pHmC3dn8LzRhJfP1ceCbgSiT9lUydIzltI=",
version = "v1.0.2",
)
go_repository(
name = "com_github_lestrrat_go_jwx_v2",
build_file_proto_mode = "disable_global",
importpath = "github.com/lestrrat-go/jwx/v2",
sum = "h1:jAPKupy4uHgrHFEdjVjNkUgoBKtVDgrQPB/h55FHrR0=",
version = "v2.0.21",
)
go_repository(
name = "com_github_lestrrat_go_option",
build_file_proto_mode = "disable_global",
importpath = "github.com/lestrrat-go/option",
sum = "h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU=",
version = "v1.0.1",
)
go_repository(
name = "com_github_letsencrypt_boulder",
build_file_proto_mode = "disable_global",
@ -4671,8 +4727,8 @@ def go_dependencies():
name = "com_github_pquerna_cachecontrol",
build_file_proto_mode = "disable_global",
importpath = "github.com/pquerna/cachecontrol",
sum = "h1:yJMy84ti9h/+OEWa752kBTKv4XC30OtVVHYv/8cTqKc=",
version = "v0.1.0",
sum = "h1:vBXSNuE5MYP9IJ5kjsdo8uq+w41jSPgvba2DEnkRx9k=",
version = "v0.2.0",
)
go_repository(
name = "com_github_prashantv_gostub",
@ -4921,8 +4977,8 @@ def go_dependencies():
name = "com_github_rogpeppe_go_internal",
build_file_proto_mode = "disable_global",
importpath = "github.com/rogpeppe/go-internal",
sum = "h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=",
version = "v1.11.0",
sum = "h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=",
version = "v1.12.0",
)
go_repository(
name = "com_github_rs_cors",
@ -5044,6 +5100,13 @@ def go_dependencies():
sum = "h1:OwvJ5jQf9LnIAS83waAjPbcMsODrTQUpJ02eNLUoxBg=",
version = "v0.7.0",
)
go_repository(
name = "com_github_segmentio_asm",
build_file_proto_mode = "disable_global",
importpath = "github.com/segmentio/asm",
sum = "h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys=",
version = "v1.2.0",
)
go_repository(
name = "com_github_segmentio_fasthash",
build_file_proto_mode = "disable_global",
@ -5420,8 +5483,8 @@ def go_dependencies():
],
build_file_proto_mode = "disable_global",
importpath = "github.com/sourcegraph/sourcegraph-accounts-sdk-go",
sum = "h1:p8AHEbZbqP3/LN/AT9W+Scn0tpp46X1A9qFhBHv1RRI=",
version = "v0.0.0-20240401190202-87f6c282658b",
sum = "h1:621jnJedYfjgES+dn5CAk4VVAwI84gnuzaDCkE83i9w=",
version = "v0.0.0-20240409140445-b228ef93f415",
)
go_repository(
name = "com_github_sourcegraph_zoekt",
@ -7496,8 +7559,8 @@ def go_dependencies():
],
build_file_proto_mode = "disable_global",
importpath = "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",
sum = "h1:sv9kVfal0MK0wBMCOGr+HeJm9v803BkJxGrk2au7j08=",
version = "v0.47.0",
sum = "h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=",
version = "v0.49.0",
)
go_repository(
name = "io_opentelemetry_go_contrib_propagators_jaeger",
@ -7738,8 +7801,8 @@ def go_dependencies():
name = "org_golang_x_crypto",
build_file_proto_mode = "disable_global",
importpath = "golang.org/x/crypto",
sum = "h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=",
version = "v0.21.0",
sum = "h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=",
version = "v0.22.0",
)
go_repository(
name = "org_golang_x_exp",
@ -7787,8 +7850,8 @@ def go_dependencies():
name = "org_golang_x_oauth2",
build_file_proto_mode = "disable_global",
importpath = "golang.org/x/oauth2",
sum = "h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=",
version = "v0.18.0",
sum = "h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg=",
version = "v0.19.0",
)
go_repository(
name = "org_golang_x_sync",
@ -7801,8 +7864,8 @@ def go_dependencies():
name = "org_golang_x_sys",
build_file_proto_mode = "disable_global",
importpath = "golang.org/x/sys",
sum = "h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=",
version = "v0.18.0",
sum = "h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=",
version = "v0.19.0",
)
go_repository(
name = "org_golang_x_telemetry",
@ -7815,8 +7878,8 @@ def go_dependencies():
name = "org_golang_x_term",
build_file_proto_mode = "disable_global",
importpath = "golang.org/x/term",
sum = "h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=",
version = "v0.18.0",
sum = "h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=",
version = "v0.19.0",
)
go_repository(
name = "org_golang_x_text",

28
go.mod
View File

@ -100,7 +100,7 @@ require (
github.com/felixge/httpsnoop v1.0.4
github.com/fsnotify/fsnotify v1.7.0
github.com/gen2brain/beeep v0.0.0-20210529141713-5586760f0cc1
github.com/getsentry/sentry-go v0.25.0
github.com/getsentry/sentry-go v0.27.0
github.com/ghodss/yaml v1.0.0
github.com/gitchander/permutation v0.0.0-20210517125447-a5d73722e1b1
github.com/go-enry/go-enry/v2 v2.8.4
@ -202,7 +202,7 @@ require (
go.opentelemetry.io/collector/receiver/otlpreceiver v0.92.0
go.opentelemetry.io/contrib/detectors/gcp v1.24.0
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0
go.opentelemetry.io/contrib/propagators/jaeger v1.24.0
go.opentelemetry.io/contrib/propagators/ot v1.24.0
go.opentelemetry.io/otel v1.24.0
@ -220,11 +220,11 @@ require (
go.uber.org/automaxprocs v1.5.2
go.uber.org/ratelimit v0.2.0
go.uber.org/zap v1.26.0
golang.org/x/crypto v0.21.0
golang.org/x/crypto v0.22.0
golang.org/x/net v0.22.0
golang.org/x/oauth2 v0.18.0
golang.org/x/oauth2 v0.19.0
golang.org/x/sync v0.6.0
golang.org/x/sys v0.18.0
golang.org/x/sys v0.19.0
golang.org/x/time v0.5.0
golang.org/x/tools v0.18.0
gonum.org/v1/gonum v0.13.0
@ -245,7 +245,7 @@ require (
require (
chainguard.dev/apko v0.14.0
connectrpc.com/connect v1.16.0
connectrpc.com/connect v1.16.1
github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai v0.5.0
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0
@ -286,8 +286,8 @@ require (
github.com/sourcegraph/managed-services-platform-cdktf/gen/slack v0.0.0-20240103014439-025608ddf849
github.com/sourcegraph/managed-services-platform-cdktf/gen/tfe v0.0.0-20231218231056-4749baca142f
github.com/sourcegraph/scip v0.3.3
github.com/sourcegraph/sourcegraph-accounts-sdk-go v0.0.0-20240401190202-87f6c282658b
github.com/sourcegraph/sourcegraph/lib v0.0.0-20240315183013-b2b134e08ada
github.com/sourcegraph/sourcegraph-accounts-sdk-go v0.0.0-20240409140445-b228ef93f415
github.com/sourcegraph/sourcegraph/lib v0.0.0-20240422195121-52350cd2e507
github.com/sourcegraph/sourcegraph/lib/managedservicesplatform v0.0.0-00010101000000-000000000000
github.com/sourcegraph/sourcegraph/monitoring v0.0.0-00010101000000-000000000000
github.com/vektah/gqlparser/v2 v2.4.5
@ -305,6 +305,7 @@ require (
cloud.google.com/go/cloudsqlconn v1.5.1 // indirect
cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect
cloud.google.com/go/trace v1.10.4 // indirect
connectrpc.com/otelconnect v0.7.0 // indirect
dario.cat/mergo v1.0.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 // indirect
github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 // indirect
@ -347,7 +348,7 @@ require (
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/gofrs/uuid/v5 v5.0.0 // indirect
github.com/golang-jwt/jwt/v5 v5.0.0 // indirect
github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/flatbuffers v2.0.8+incompatible // indirect
github.com/google/gnostic-models v0.6.8 // indirect
@ -527,7 +528,7 @@ require (
github.com/jackc/chunkreader/v2 v2.0.1 // indirect
github.com/jackc/pgio v1.0.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 // indirect
github.com/jackc/pgtype v1.14.0
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/jdxcode/netrc v0.0.0-20221124155335-4616370d1a84 // indirect
@ -574,14 +575,14 @@ require (
github.com/pkg/errors v0.9.1 // indirect
github.com/pkg/profile v1.7.0 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/pquerna/cachecontrol v0.1.0 // indirect
github.com/pquerna/cachecontrol v0.2.0 // indirect
github.com/prometheus/client_model v0.6.0
github.com/prometheus/common/sigv4 v0.1.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
github.com/pseudomuto/protoc-gen-doc v1.5.1
github.com/pseudomuto/protokit v0.2.1 // indirect
github.com/rivo/uniseg v0.4.6 // indirect
github.com/rogpeppe/go-internal v1.11.0 // indirect
github.com/rogpeppe/go-internal v1.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
github.com/rs/xid v1.5.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
@ -614,10 +615,9 @@ require (
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/exp v0.0.0-20231006140011-7918f672742d
golang.org/x/mod v0.15.0
golang.org/x/term v0.18.0 // indirect
golang.org/x/term v0.19.0 // indirect
golang.org/x/text v0.14.0
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
google.golang.org/appengine v1.6.8 // indirect
google.golang.org/grpc v1.61.1
gopkg.in/alexcesaro/statsd.v2 v2.0.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect

52
go.sum
View File

@ -73,8 +73,10 @@ cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/o
cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E=
cloud.google.com/go/trace v1.10.4 h1:2qOAuAzNezwW3QN+t41BtkDJOG42HywL73q8x/f6fnM=
cloud.google.com/go/trace v1.10.4/go.mod h1:Nso99EDIK8Mj5/zmB+iGr9dosS/bzWCJ8wGmE6TXNWY=
connectrpc.com/connect v1.16.0 h1:rdtfQjZ0OyFkWPTegBNcH7cwquGAN1WzyJy80oFNibg=
connectrpc.com/connect v1.16.0/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw=
connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis=
connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw=
connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY=
connectrpc.com/otelconnect v0.7.0/go.mod h1:Bt2ivBymHZHqxvo4HkJ0EwHuUzQN6k2l0oH+mp/8nwc=
contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ=
cuelang.org/go v0.4.3 h1:W3oBBjDTm7+IZfCKZAmC8uDG0eYfJL4Pp/xbbCMKaVo=
@ -567,8 +569,8 @@ github.com/fullstorydev/grpcurl v1.8.7/go.mod h1:pVtM4qe3CMoLaIzYS8uvTuDj2jVYmXq
github.com/garyburd/redigo v1.1.1-0.20170914051019-70e1b1943d4f/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
github.com/gen2brain/beeep v0.0.0-20210529141713-5586760f0cc1 h1:Xh9mvwEmhbdXlRSsgn+N0zj/NqnKvpeqL08oKDHln2s=
github.com/gen2brain/beeep v0.0.0-20210529141713-5586760f0cc1/go.mod h1:ElSskYZe3oM8kThaHGJ+kiN2yyUMVXMZ7WxF9QqLDS8=
github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI=
github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps=
github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
github.com/gitchander/permutation v0.0.0-20210517125447-a5d73722e1b1 h1:FUKJibWQu771xr/AwLn2/PbVp9AsgqfkObByTf8kJnI=
@ -820,8 +822,8 @@ github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69
github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE=
github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
@ -1144,8 +1146,8 @@ github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwX
github.com/jackc/pgproto3/v2 v2.3.3 h1:1HLSx5H+tXR9pW3in3zaztoEwQYRC9SQaYUHjTSUOag=
github.com/jackc/pgproto3/v2 v2.3.3/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E=
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA=
github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg=
github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc=
github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw=
@ -1516,8 +1518,8 @@ github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSg
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b h1:0LFwY6Q3gMACTjAbMZBjXAqTOzOwFaj2Ld6cjeQ7Rig=
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/pquerna/cachecontrol v0.1.0 h1:yJMy84ti9h/+OEWa752kBTKv4XC30OtVVHYv/8cTqKc=
github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
github.com/pquerna/cachecontrol v0.2.0 h1:vBXSNuE5MYP9IJ5kjsdo8uq+w41jSPgvba2DEnkRx9k=
github.com/pquerna/cachecontrol v0.2.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
@ -1583,8 +1585,8 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/rs/cors v1.8.0/go.mod h1:EBwu+T5AvHOcXwvZIkQFjUN6s8Czyqw12GL/Y0tUyRM=
github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
@ -1701,8 +1703,8 @@ github.com/sourcegraph/run v0.12.0 h1:3A8w5e8HIYPfafHekvmdmmh42RHKGVhmiTZAPJclg7
github.com/sourcegraph/run v0.12.0/go.mod h1:PwaP936BTnAJC1cqR5rSbG5kOs/EWStTK3lqvMX5GUA=
github.com/sourcegraph/scip v0.3.3 h1:3EOkChYOntwHl0pPSAju7rj0oRuujh8owC4vjGDEr0s=
github.com/sourcegraph/scip v0.3.3/go.mod h1:Q67VaoTpftINIy/CLrkYQOMwlsx67h8ys+ligmdUcqM=
github.com/sourcegraph/sourcegraph-accounts-sdk-go v0.0.0-20240401190202-87f6c282658b h1:p8AHEbZbqP3/LN/AT9W+Scn0tpp46X1A9qFhBHv1RRI=
github.com/sourcegraph/sourcegraph-accounts-sdk-go v0.0.0-20240401190202-87f6c282658b/go.mod h1:84opHsgiuXnmBcCTSemIHyHAbyRj8JDtGrOZypMEB/g=
github.com/sourcegraph/sourcegraph-accounts-sdk-go v0.0.0-20240409140445-b228ef93f415 h1:621jnJedYfjgES+dn5CAk4VVAwI84gnuzaDCkE83i9w=
github.com/sourcegraph/sourcegraph-accounts-sdk-go v0.0.0-20240409140445-b228ef93f415/go.mod h1:BQ+bIwhTWmR6VFtLsCs9Ui4o7HJLAtVnjVdWCQRHXms=
github.com/sourcegraph/yaml v1.0.1-0.20200714132230-56936252f152 h1:z/MpntplPaW6QW95pzcAR/72Z5TWDyDnSo0EOcyij9o=
github.com/sourcegraph/yaml v1.0.1-0.20200714132230-56936252f152/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I=
github.com/sourcegraph/zoekt v0.0.0-20240417165306-43b92256ba71 h1:3DJmyiTtoczytYdvoBqwawkSRZEGZeZB9v0DjfQ6irY=
@ -1950,8 +1952,8 @@ go.opentelemetry.io/contrib/detectors/gcp v1.24.0 h1:1Szzq5d735VbnwbEmwPUJ/FIpY9
go.opentelemetry.io/contrib/detectors/gcp v1.24.0/go.mod h1:KAZHUFgklT30k9ZaYrDyg6v/T5EfBq6Eqg03H6ywN6Q=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 h1:SpGay3w+nEwMpfVnbqOLH5gY52/foP8RE8UzTZ1pdSE=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 h1:sv9kVfal0MK0wBMCOGr+HeJm9v803BkJxGrk2au7j08=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
go.opentelemetry.io/contrib/propagators/jaeger v1.24.0 h1:CKtIfwSgDvJmaWsZROcHzONZgmQdMYn9mVYWypOWT5o=
go.opentelemetry.io/contrib/propagators/jaeger v1.24.0/go.mod h1:Q5JA/Cfdy/ta+5VeEhrMJRWGyS6UNRwFbl+yS3W1h5I=
go.opentelemetry.io/contrib/propagators/ot v1.24.0 h1:6lf4HoYefKDOTUSCatwkpzliUYihAvlN0omfpOn5IDs=
@ -2039,8 +2041,8 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@ -2173,8 +2175,8 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg=
golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8=
golang.org/x/sync v0.0.0-20170517211232-f52d1811a629/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@ -2297,8 +2299,8 @@ golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@ -2309,8 +2311,8 @@ golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@ -2464,8 +2466,6 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk=
google.golang.org/genproto v0.0.0-20170918111702-1e559d0a00ee/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=