Skip to content

Commit 01706b0

Browse files
authored
Add sovereign cloud support to aztables (Azure#24609)
* Add sovereign cloud support to aztables * add fake tests for sovereign clouds * update dependencies * go mod tidy perf tests
1 parent 0fc3d76 commit 01706b0

File tree

10 files changed

+185
-47
lines changed

10 files changed

+185
-47
lines changed

sdk/data/aztables/CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# Release History
22

3-
## 1.3.1 (Unreleased)
3+
## 1.4.0 (Unreleased)
44

55
### Features Added
6+
* Added support for sovereign clouds.
67

78
### Breaking Changes
89

sdk/data/aztables/cloud_config.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
package aztables
5+
6+
import "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud"
7+
8+
// ServiceName is the [cloud.ServiceName] for Azure Tables, used to identify the respective [cloud.ServiceConfiguration].
9+
//
10+
// NOTE: ServiceConfiguration omits the Endpoint as that's explicitly passed to client constructors.
11+
const ServiceName cloud.ServiceName = "data/aztables"
12+
13+
func init() {
14+
cloud.AzureChina.Services[ServiceName] = cloud.ServiceConfiguration{
15+
Audience: "https://storage.azure.cn",
16+
}
17+
cloud.AzureGovernment.Services[ServiceName] = cloud.ServiceConfiguration{
18+
Audience: "https://storage.azure.us",
19+
}
20+
cloud.AzurePublic.Services[ServiceName] = cloud.ServiceConfiguration{
21+
Audience: "https://storage.azure.com",
22+
}
23+
}

sdk/data/aztables/example_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import (
1313
"time"
1414

1515
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
16+
"github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud"
17+
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
1618
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
1719
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
1820
"github.com/Azure/azure-sdk-for-go/sdk/data/aztables"
@@ -58,6 +60,34 @@ func ExampleNewServiceClient() {
5860
fmt.Println(client)
5961
}
6062

63+
func ExampleNewServiceClient_sovereignCloud() {
64+
accountName, ok := os.LookupEnv("TABLES_STORAGE_ACCOUNT_NAME")
65+
if !ok {
66+
panic("TABLES_STORAGE_ACCOUNT_NAME could not be found")
67+
}
68+
serviceURL := accountName + ".table.core.windows.net"
69+
70+
cred, err := azidentity.NewDefaultAzureCredential(&azidentity.DefaultAzureCredentialOptions{
71+
ClientOptions: policy.ClientOptions{
72+
Cloud: cloud.AzureChina,
73+
},
74+
})
75+
if err != nil {
76+
panic(err)
77+
}
78+
79+
client, err := aztables.NewServiceClient(serviceURL, cred, &aztables.ClientOptions{
80+
ClientOptions: policy.ClientOptions{
81+
Cloud: cloud.AzureChina,
82+
},
83+
})
84+
if err != nil {
85+
panic(err)
86+
}
87+
88+
fmt.Println(client)
89+
}
90+
6191
func ExampleNewServiceClientWithSharedKey() {
6292
accountName, ok := os.LookupEnv("TABLES_STORAGE_ACCOUNT_NAME")
6393
if !ok {

sdk/data/aztables/go.mod

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ module github.com/Azure/azure-sdk-for-go/sdk/data/aztables
33
go 1.23.0
44

55
require (
6-
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1
7-
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2
6+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0
7+
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0
88
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1
99
github.com/stretchr/testify v1.10.0
1010
)
@@ -17,9 +17,9 @@ require (
1717
github.com/kylelemons/godebug v1.1.0 // indirect
1818
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
1919
github.com/pmezard/go-difflib v1.0.0 // indirect
20-
golang.org/x/crypto v0.36.0 // indirect
21-
golang.org/x/net v0.38.0 // indirect
22-
golang.org/x/sys v0.31.0 // indirect
23-
golang.org/x/text v0.23.0 // indirect
20+
golang.org/x/crypto v0.38.0 // indirect
21+
golang.org/x/net v0.40.0 // indirect
22+
golang.org/x/sys v0.33.0 // indirect
23+
golang.org/x/text v0.25.0 // indirect
2424
gopkg.in/yaml.v3 v3.0.1 // indirect
2525
)

sdk/data/aztables/go.sum

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 h1:DSDNVxqkoXJiko6x8a90zidoYqnYYa6c1MTzDKzKkTo=
2-
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1/go.mod h1:zGqV2R4Cr/k8Uye5w+dgQ06WJtEcbQG/8J7BB6hnCr4=
3-
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys=
4-
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2/go.mod h1:SqINnQ9lVVdRlyC8cd1lCI0SdX4n2paeABd2K8ggfnE=
1+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U=
2+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM=
3+
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0 h1:OVoM452qUFBrX+URdH3VpR299ma4kfom0yB0URYky9g=
4+
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0/go.mod h1:kUjrAo8bgEwLeZ/CmHqNl3Z/kPm7y6FKfxxK0izYUg4=
55
github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY=
66
github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8=
77
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 h1:FPKJS1T+clwv+OLGt13a8UjqeRuh0O4SJ3lUriThc+4=
@@ -20,8 +20,8 @@ github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeD
2020
github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
2121
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
2222
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
23-
github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6 h1:IsMZxCuZqKuao2vNdfD82fjjgPLfyHLpR41Z88viRWs=
24-
github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6/go.mod h1:3VeWNIJaW+O5xpRQbPp0Ybqu1vJd/pm7s2F473HRrkw=
23+
github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU=
24+
github.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k=
2525
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
2626
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
2727
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -32,21 +32,21 @@ github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmd
3232
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
3333
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
3434
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
35-
github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E=
36-
github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw=
35+
github.com/redis/go-redis/v9 v9.7.3 h1:YpPyAayJV+XErNsatSElgRZZVCwXX9QzkKYNvO7x0wM=
36+
github.com/redis/go-redis/v9 v9.7.3/go.mod h1:bGUrSggJ9X9GUmZpZNEOQKaANxSGgOEBRltRTZHSvrA=
3737
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
3838
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
3939
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
4040
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
41-
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
42-
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
43-
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
44-
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
41+
golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=
42+
golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=
43+
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
44+
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
4545
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
46-
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
47-
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
48-
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
49-
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
46+
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
47+
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
48+
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
49+
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
5050
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
5151
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
5252
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=

sdk/data/aztables/internal/version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ package internal
88

99
const (
1010
ModuleName = "github.com/Azure/azure-sdk-for-go/sdk/data/aztables"
11-
Version = "v1.3.1"
11+
Version = "v1.4.0"
1212
)

sdk/data/aztables/service_client.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,17 @@ import (
77
"context"
88
"encoding/json"
99
"errors"
10+
"reflect"
1011
"strings"
1112
"time"
1213

1314
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
15+
"github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud"
1416
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
1517
"github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime"
1618
generated "github.com/Azure/azure-sdk-for-go/sdk/data/aztables/internal"
1719
)
1820

19-
var (
20-
storageScope = []string{"https://storage.azure.com/.default"}
21-
cosmosScope = []string{"https://cosmos.azure.com/.default"}
22-
)
23-
2421
// ServiceClient represents a client to the table service. It can be used to query
2522
// the available tables, create/delete tables, and various other service level operations.
2623
type ServiceClient struct {
@@ -32,14 +29,23 @@ type ServiceClient struct {
3229
// NewServiceClient creates a ServiceClient struct using the specified serviceURL, credential, and options.
3330
// Pass in nil for options to construct the client with the default ClientOptions.
3431
func NewServiceClient(serviceURL string, cred azcore.TokenCredential, options *ClientOptions) (*ServiceClient, error) {
35-
scope := storageScope
32+
cl := cloud.AzurePublic
33+
if options != nil && !reflect.ValueOf(options.Cloud).IsZero() {
34+
cl = options.Cloud
35+
}
36+
37+
cfg, ok := cl.Services[ServiceName]
38+
if !ok || cfg.Audience == "" {
39+
return nil, errors.New("cloud configuration is missing for Azure Tables")
40+
}
3641

42+
audience := cfg.Audience
3743
if isCosmosEndpoint(serviceURL) {
38-
scope = cosmosScope
44+
audience = strings.Replace(audience, "storage", "cosmos", 1)
3945
}
4046

4147
plOpts := runtime.PipelineOptions{
42-
PerRetry: []policy.Policy{runtime.NewBearerTokenPolicy(cred, scope, nil)},
48+
PerRetry: []policy.Policy{runtime.NewBearerTokenPolicy(cred, []string{audience + "/.default"}, nil)},
4349
}
4450
client, err := newClient(serviceURL, plOpts, options)
4551
if err != nil {

sdk/data/aztables/service_client_test.go

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,16 @@
44
package aztables
55

66
import (
7+
"context"
78
"encoding/json"
89
"fmt"
10+
"net/http"
911
"testing"
1012
"time"
1113

1214
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
15+
"github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud"
16+
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
1317
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
1418
"github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing"
1519
"github.com/Azure/azure-sdk-for-go/sdk/internal/recording"
@@ -447,3 +451,77 @@ func TestGetAccountSASTokenError(t *testing.T) {
447451
_, err = service.GetAccountSASURL(resources, perms, time.Now(), time.Now().Add(time.Hour))
448452
require.Error(t, err)
449453
}
454+
455+
type tokenCredFunc func(context.Context, policy.TokenRequestOptions) (azcore.AccessToken, error)
456+
457+
func (t tokenCredFunc) GetToken(ctx context.Context, tro policy.TokenRequestOptions) (azcore.AccessToken, error) {
458+
if l := len(tro.Scopes); l != 1 {
459+
return azcore.AccessToken{}, fmt.Errorf("unexpected scopes len %d", l)
460+
}
461+
return t(ctx, tro)
462+
}
463+
464+
type fakeTransport struct{}
465+
466+
func (fakeTransport) Do(req *http.Request) (*http.Response, error) {
467+
return &http.Response{
468+
Request: req,
469+
StatusCode: http.StatusNoContent,
470+
Body: http.NoBody,
471+
Header: http.Header{},
472+
}, nil
473+
}
474+
475+
func TestNewServiceClient_sovereignClouds(t *testing.T) {
476+
tests := []struct {
477+
label string
478+
endpoint string
479+
scope string
480+
cfg cloud.Configuration
481+
}{
482+
{
483+
label: "storage China",
484+
endpoint: "https://myAccountName.table.core.windows.net",
485+
scope: "https://storage.azure.cn/.default",
486+
cfg: cloud.AzureChina,
487+
},
488+
{
489+
label: "cosmos China",
490+
endpoint: "https://myAccountName.table.cosmos.windows.net",
491+
scope: "https://cosmos.azure.cn/.default",
492+
cfg: cloud.AzureChina,
493+
},
494+
{
495+
label: "storage USGov",
496+
endpoint: "https://myAccountName.table.core.windows.net",
497+
scope: "https://storage.azure.us/.default",
498+
cfg: cloud.AzureGovernment,
499+
},
500+
{
501+
label: "cosmos USGov",
502+
endpoint: "https://myAccountName.table.cosmos.windows.net",
503+
scope: "https://cosmos.azure.us/.default",
504+
cfg: cloud.AzureGovernment,
505+
},
506+
}
507+
for _, tt := range tests {
508+
t.Run(tt.label, func(t *testing.T) {
509+
client, err := NewServiceClient(tt.endpoint, tokenCredFunc(func(_ context.Context, tro policy.TokenRequestOptions) (azcore.AccessToken, error) {
510+
if s := tro.Scopes[0]; s != tt.scope {
511+
return azcore.AccessToken{}, fmt.Errorf("incorrect scope %s", s)
512+
}
513+
return azcore.AccessToken{Token: "fake_token", ExpiresOn: time.Now().Add(time.Hour)}, nil
514+
}), &ClientOptions{
515+
ClientOptions: policy.ClientOptions{
516+
Cloud: tt.cfg,
517+
Transport: &fakeTransport{},
518+
},
519+
})
520+
require.NoError(t, err)
521+
522+
// we just call some API so that the pipeline is triggered which will call GetToken on our fake cred
523+
_, err = client.DeleteTable(context.Background(), "fake-table", nil)
524+
require.NoError(t, err)
525+
})
526+
}
527+
}

sdk/data/aztables/testdata/perf/go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ module github.com/Azure/azure-sdk-for-go/sdk/data/aztables/testdata/perf
33
go 1.23.0
44

55
require (
6-
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1
6+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0
77
github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.3.0
88
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1
99
)
1010

1111
require (
12-
golang.org/x/net v0.38.0 // indirect
13-
golang.org/x/text v0.23.0 // indirect
12+
golang.org/x/net v0.40.0 // indirect
13+
golang.org/x/text v0.25.0 // indirect
1414
)
1515

1616
replace github.com/Azure/azure-sdk-for-go/sdk/data/aztables => ../..
Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 h1:DSDNVxqkoXJiko6x8a90zidoYqnYYa6c1MTzDKzKkTo=
2-
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1/go.mod h1:zGqV2R4Cr/k8Uye5w+dgQ06WJtEcbQG/8J7BB6hnCr4=
3-
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys=
4-
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2/go.mod h1:SqINnQ9lVVdRlyC8cd1lCI0SdX4n2paeABd2K8ggfnE=
1+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U=
2+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM=
3+
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0 h1:OVoM452qUFBrX+URdH3VpR299ma4kfom0yB0URYky9g=
4+
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0/go.mod h1:kUjrAo8bgEwLeZ/CmHqNl3Z/kPm7y6FKfxxK0izYUg4=
55
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 h1:FPKJS1T+clwv+OLGt13a8UjqeRuh0O4SJ3lUriThc+4=
66
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA=
77
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 h1:oygO0locgZJe7PpYPXT5A29ZkwJaPqcva7BVeemZOZs=
@@ -20,13 +20,13 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
2020
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
2121
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
2222
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
23-
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
24-
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
25-
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
26-
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
27-
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
28-
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
29-
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
30-
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
23+
golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=
24+
golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=
25+
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
26+
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
27+
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
28+
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
29+
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
30+
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
3131
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
3232
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

0 commit comments

Comments
 (0)