Skip to content

Commit fc3a6e3

Browse files
replace zalando/go-keyring with 99designs/keyring
1 parent 6be9ca5 commit fc3a6e3

13 files changed

Lines changed: 190 additions & 50 deletions

File tree

cmd/logout.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ var logoutCmd = &cobra.Command{
1111
Use: "logout",
1212
Short: "Remove stored authentication token",
1313
RunE: func(cmd *cobra.Command, args []string) error {
14-
if err := auth.New().Logout(); err != nil {
14+
a, err := auth.New()
15+
if err != nil {
16+
return fmt.Errorf("failed to initialize auth: %w", err)
17+
}
18+
if err := a.Logout(); err != nil {
1519
return fmt.Errorf("failed to logout: %w", err)
1620
}
1721
fmt.Println("Logged out successfully.")

go.mod

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@ module github.com/localstack/lstk
33
go 1.25.6
44

55
require (
6+
github.com/99designs/keyring v1.2.2
67
github.com/docker/docker v28.2.2+incompatible
78
github.com/docker/go-connections v0.5.0
89
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
910
github.com/spf13/cobra v1.10.2
1011
github.com/spf13/viper v1.21.0
1112
github.com/stretchr/testify v1.11.1
12-
github.com/zalando/go-keyring v0.2.6
1313
go.uber.org/mock v0.6.0
1414
)
1515

1616
require (
17-
al.essio.dev/pkg/shellescape v1.5.1 // indirect
17+
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
1818
github.com/Microsoft/go-winio v0.4.14 // indirect
1919
github.com/cespare/xxhash/v2 v2.3.0 // indirect
2020
github.com/containerd/errdefs v1.0.0 // indirect
@@ -24,18 +24,21 @@ require (
2424
github.com/davecgh/go-spew v1.1.1 // indirect
2525
github.com/distribution/reference v0.6.0 // indirect
2626
github.com/docker/go-units v0.5.0 // indirect
27+
github.com/dvsekhvalnov/jose2go v1.5.0 // indirect
2728
github.com/felixge/httpsnoop v1.0.4 // indirect
2829
github.com/fsnotify/fsnotify v1.9.0 // indirect
2930
github.com/go-logr/logr v1.4.3 // indirect
3031
github.com/go-logr/stdr v1.2.2 // indirect
3132
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
32-
github.com/godbus/dbus/v5 v5.1.0 // indirect
33+
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
3334
github.com/gogo/protobuf v1.3.2 // indirect
35+
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
3436
github.com/inconshreveable/mousetrap v1.1.0 // indirect
3537
github.com/moby/docker-image-spec v1.3.1 // indirect
3638
github.com/moby/sys/atomicwriter v0.1.0 // indirect
3739
github.com/moby/term v0.5.2 // indirect
3840
github.com/morikuni/aec v1.1.0 // indirect
41+
github.com/mtibben/percent v0.2.1 // indirect
3942
github.com/opencontainers/go-digest v1.0.0 // indirect
4043
github.com/opencontainers/image-spec v1.1.1 // indirect
4144
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
@@ -55,6 +58,7 @@ require (
5558
go.opentelemetry.io/otel/trace v1.39.0 // indirect
5659
go.yaml.in/yaml/v3 v3.0.4 // indirect
5760
golang.org/x/sys v0.39.0 // indirect
61+
golang.org/x/term v0.3.0 // indirect
5862
golang.org/x/text v0.31.0 // indirect
5963
golang.org/x/time v0.14.0 // indirect
6064
gopkg.in/yaml.v3 v3.0.1 // indirect

go.sum

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
al.essio.dev/pkg/shellescape v1.5.1 h1:86HrALUujYS/h+GtqoB26SBEdkWfmMI6FubjXlsXyho=
2-
al.essio.dev/pkg/shellescape v1.5.1/go.mod h1:6sIqp7X2P6mThCQ7twERpZTuigpr6KbZWtls1U8I890=
1+
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs=
2+
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4=
3+
github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0=
4+
github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk=
35
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
46
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
57
github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU=
@@ -27,6 +29,8 @@ github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj
2729
github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
2830
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
2931
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
32+
github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM=
33+
github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU=
3034
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
3135
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
3236
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
@@ -40,25 +44,27 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
4044
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
4145
github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
4246
github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
43-
github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
44-
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
47+
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0=
48+
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
4549
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
4650
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
4751
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
4852
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
49-
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
50-
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
5153
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
5254
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
5355
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg=
5456
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4=
57+
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=
58+
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
5559
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
5660
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
5761
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
5862
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
5963
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
6064
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
6165
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
66+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
67+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
6268
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
6369
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
6470
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
@@ -71,6 +77,9 @@ github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ=
7177
github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc=
7278
github.com/morikuni/aec v1.1.0 h1:vBBl0pUnvi/Je71dsRrhMBtreIqNMYErSAbEeb8jrXQ=
7379
github.com/morikuni/aec v1.1.0/go.mod h1:xDRgiq/iw5l+zkao76YTKzKttOp2cwPEne25HDkJnBw=
80+
github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs=
81+
github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns=
82+
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
7483
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
7584
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
7685
github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
@@ -115,8 +124,6 @@ github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8
115124
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
116125
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
117126
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
118-
github.com/zalando/go-keyring v0.2.6 h1:r7Yc3+H+Ux0+M72zacZoItR3UDxeWfKTcabvkI8ua9s=
119-
github.com/zalando/go-keyring v0.2.6/go.mod h1:2TCrxYrbUNYfNS/Kgy/LSrkSQzZ5UPVH85RwfczwvcI=
120127
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
121128
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
122129
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.64.0 h1:ssfIgGNANqpVFCndZvcuyKbl0g+UAVcbBcqGkG28H0Y=
@@ -137,9 +144,9 @@ go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6
137144
go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA=
138145
go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A=
139146
go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4=
140-
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
141147
go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
142148
go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
149+
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
143150
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
144151
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
145152
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -163,6 +170,8 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
163170
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
164171
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
165172
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
173+
golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI=
174+
golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
166175
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
167176
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
168177
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
@@ -186,6 +195,7 @@ google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHh
186195
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
187196
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
188197
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
198+
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
189199
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
190200
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
191201
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

internal/auth/auth.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,23 @@ import (
66
"log"
77
"os"
88

9-
"github.com/zalando/go-keyring"
9+
"github.com/99designs/keyring"
1010
)
1111

1212
type Auth struct {
1313
keyring Keyring
1414
browserLogin LoginProvider
1515
}
1616

17-
func New() *Auth {
17+
func New() (*Auth, error) {
18+
kr, err := newSystemKeyring()
19+
if err != nil {
20+
return nil, err
21+
}
1822
return &Auth{
19-
keyring: systemKeyring{},
23+
keyring: kr,
2024
browserLogin: newBrowserLogin(),
21-
}
25+
}, nil
2226
}
2327

2428
// GetToken tries in order: 1) keyring 2) LOCALSTACK_AUTH_TOKEN env var 3) browser login
@@ -49,7 +53,7 @@ func (a *Auth) GetToken(ctx context.Context) (string, error) {
4953
// Logout removes the stored auth token from the keyring
5054
func (a *Auth) Logout() error {
5155
err := a.keyring.Delete(keyringService, keyringUser)
52-
if errors.Is(err, keyring.ErrNotFound) {
56+
if errors.Is(err, keyring.ErrKeyNotFound) {
5357
return nil
5458
}
5559
return err

internal/auth/keyring.go

Lines changed: 61 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@ package auth
22

33
//go:generate mockgen -source=keyring.go -destination=mock_keyring_test.go -package=auth
44

5-
import "github.com/zalando/go-keyring"
5+
import (
6+
"errors"
7+
"fmt"
8+
"os"
9+
"path/filepath"
10+
11+
"github.com/99designs/keyring"
12+
)
613

714
const (
815
keyringService = "localstack"
@@ -15,16 +22,62 @@ type Keyring interface {
1522
Delete(service, user string) error
1623
}
1724

18-
type systemKeyring struct{}
25+
type systemKeyring struct {
26+
ring keyring.Keyring
27+
}
28+
29+
func newSystemKeyring() (*systemKeyring, error) {
30+
configDir, err := os.UserConfigDir()
31+
if err != nil {
32+
return nil, fmt.Errorf("failed to get config directory: %w", err)
33+
}
34+
35+
config := keyring.Config{
36+
ServiceName: keyringService,
37+
FileDir: filepath.Join(configDir, "localstack"),
38+
FilePasswordFunc: func(prompt string) (string, error) {
39+
return "localstack-keyring", nil
40+
},
41+
}
42+
43+
ring, err := keyring.Open(config)
44+
if err != nil {
45+
config.AllowedBackends = []keyring.BackendType{keyring.FileBackend}
46+
ring, err = keyring.Open(config)
47+
if err != nil {
48+
return nil, fmt.Errorf("failed to open keyring: %w", err)
49+
}
50+
}
51+
52+
return &systemKeyring{ring: ring}, nil
53+
}
54+
55+
func (k *systemKeyring) Get(service, user string) (string, error) {
56+
item, err := k.ring.Get(k.makeKey(service, user))
57+
if err != nil {
58+
if errors.Is(err, keyring.ErrKeyNotFound) {
59+
return "", fmt.Errorf("credential not found")
60+
}
61+
return "", err
62+
}
63+
return string(item.Data), nil
64+
}
1965

20-
func (systemKeyring) Get(service, user string) (string, error) {
21-
return keyring.Get(service, user)
66+
func (k *systemKeyring) Set(service, user, password string) error {
67+
return k.ring.Set(keyring.Item{
68+
Key: k.makeKey(service, user),
69+
Data: []byte(password),
70+
})
2271
}
2372

24-
func (systemKeyring) Set(service, user, password string) error {
25-
return keyring.Set(service, user, password)
73+
func (k *systemKeyring) Delete(service, user string) error {
74+
err := k.ring.Remove(k.makeKey(service, user))
75+
if errors.Is(err, keyring.ErrKeyNotFound) || os.IsNotExist(err) {
76+
return nil
77+
}
78+
return err
2679
}
2780

28-
func (systemKeyring) Delete(service, user string) error {
29-
return keyring.Delete(service, user)
81+
func (k *systemKeyring) makeKey(service, user string) string {
82+
return fmt.Sprintf("%s/%s", service, user)
3083
}

internal/container/start.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ import (
1313
)
1414

1515
func Start(ctx context.Context, rt runtime.Runtime, onProgress func(string)) error {
16-
token, err := auth.New().GetToken(ctx)
16+
a, err := auth.New()
17+
if err != nil {
18+
return fmt.Errorf("failed to initialize auth: %w", err)
19+
}
20+
21+
token, err := a.GetToken(ctx)
1722
if err != nil {
1823
return err
1924
}

test/integration/go.mod

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ module github.com/localstack/lstk/test/integration
33
go 1.25.6
44

55
require (
6+
github.com/99designs/keyring v1.2.2
67
github.com/docker/docker v28.2.2+incompatible
78
github.com/stretchr/testify v1.11.1
89
)
910

1011
require (
11-
al.essio.dev/pkg/shellescape v1.5.1 // indirect
12+
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
1213
github.com/Microsoft/go-winio v0.4.21 // indirect
1314
github.com/cespare/xxhash/v2 v2.3.0 // indirect
1415
github.com/containerd/errdefs v1.0.0 // indirect
@@ -19,27 +20,30 @@ require (
1920
github.com/distribution/reference v0.6.0 // indirect
2021
github.com/docker/go-connections v0.6.0 // indirect
2122
github.com/docker/go-units v0.5.0 // indirect
23+
github.com/dvsekhvalnov/jose2go v1.5.0 // indirect
2224
github.com/felixge/httpsnoop v1.0.4 // indirect
2325
github.com/go-logr/logr v1.4.3 // indirect
2426
github.com/go-logr/stdr v1.2.2 // indirect
25-
github.com/godbus/dbus/v5 v5.1.0 // indirect
27+
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
2628
github.com/gogo/protobuf v1.3.2 // indirect
29+
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
2730
github.com/moby/docker-image-spec v1.3.1 // indirect
2831
github.com/moby/sys/atomicwriter v0.1.0 // indirect
2932
github.com/moby/term v0.5.2 // indirect
3033
github.com/morikuni/aec v1.1.0 // indirect
34+
github.com/mtibben/percent v0.2.1 // indirect
3135
github.com/opencontainers/go-digest v1.0.0 // indirect
3236
github.com/opencontainers/image-spec v1.1.1 // indirect
3337
github.com/pkg/errors v0.9.1 // indirect
3438
github.com/pmezard/go-difflib v1.0.0 // indirect
35-
github.com/zalando/go-keyring v0.2.6 // indirect
3639
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
3740
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.64.0 // indirect
3841
go.opentelemetry.io/otel v1.39.0 // indirect
3942
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.39.0 // indirect
4043
go.opentelemetry.io/otel/metric v1.39.0 // indirect
4144
go.opentelemetry.io/otel/trace v1.39.0 // indirect
4245
golang.org/x/sys v0.39.0 // indirect
46+
golang.org/x/term v0.3.0 // indirect
4347
golang.org/x/time v0.14.0 // indirect
4448
gopkg.in/yaml.v3 v3.0.1 // indirect
4549
gotest.tools/v3 v3.5.2 // indirect

0 commit comments

Comments
 (0)