Skip to content

Commit 184f7a3

Browse files
committed
refactor: remove usages of experimental maps package
All 4 usages of the `maps.Keys` function from the `golang.org/x/exp/maps` package can be refactored. If we need it again in the future, it is available in the standard library since Go 1.23 [1]. [1]: https://go.dev/doc/go1.23#iterators Signed-off-by: Eng Zer Jun <[email protected]>
1 parent ded2e5e commit 184f7a3

File tree

12 files changed

+90
-176
lines changed

12 files changed

+90
-176
lines changed

cmd/admin/admin.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
67

78
"github.com/jmhodges/clock"
@@ -94,3 +95,23 @@ func newAdmin(configFile string, dryRun bool) (*admin, error) {
9495
log: logger,
9596
}, nil
9697
}
98+
99+
// findActiveInputMethodFlag returns the single input method flag that was set
100+
// to a non-default value in setInputs map. If no flags or multiple flags are
101+
// set, it returns an error.
102+
func findActiveInputMethodFlag(setInputs map[string]bool) (string, error) {
103+
activeFlags := make([]string, 0, len(setInputs))
104+
for flag, isSet := range setInputs {
105+
if isSet {
106+
activeFlags = append(activeFlags, flag)
107+
}
108+
}
109+
110+
if len(activeFlags) == 0 {
111+
return "", errors.New("at least one input method flag must be specified")
112+
} else if len(activeFlags) > 1 {
113+
return "", fmt.Errorf("more than one input method flag specified: %v", activeFlags)
114+
}
115+
116+
return activeFlags[0], nil
117+
}

cmd/admin/admin_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package main
2+
3+
import (
4+
"testing"
5+
6+
"github.com/letsencrypt/boulder/test"
7+
)
8+
9+
func Test_findActiveInputMethodFlag(t *testing.T) {
10+
tests := map[string]struct {
11+
name string
12+
setInputs map[string]bool
13+
expected string
14+
wantErr bool
15+
}{
16+
"No active flags": {
17+
setInputs: map[string]bool{
18+
"-private-key": false,
19+
"-spki-file": false,
20+
"-cert-file": false,
21+
},
22+
expected: "",
23+
wantErr: true,
24+
},
25+
"Multiple active flags": {
26+
setInputs: map[string]bool{
27+
"-private-key": true,
28+
"-spki-file": true,
29+
"-cert-file": false,
30+
},
31+
expected: "",
32+
wantErr: true,
33+
},
34+
"Single active flag": {
35+
setInputs: map[string]bool{
36+
"-private-key": true,
37+
"-spki-file": false,
38+
"-cert-file": false,
39+
},
40+
expected: "-private-key",
41+
wantErr: false,
42+
},
43+
}
44+
45+
for _, tc := range tests {
46+
t.Run(tc.name, func(t *testing.T) {
47+
result, err := findActiveInputMethodFlag(tc.setInputs)
48+
if tc.wantErr {
49+
test.AssertError(t, err, "findActiveInputMethodFlag() should have errored")
50+
} else {
51+
test.AssertNotError(t, err, "findActiveInputMethodFlag() should not have errored")
52+
test.AssertEquals(t, result, tc.expected)
53+
}
54+
})
55+
}
56+
}

cmd/admin/cert.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515
"unicode"
1616

1717
"golang.org/x/crypto/ocsp"
18-
"golang.org/x/exp/maps"
1918

2019
core "github.com/letsencrypt/boulder/core"
2120
berrors "github.com/letsencrypt/boulder/errors"
@@ -109,16 +108,13 @@ func (s *subcommandRevokeCert) Run(ctx context.Context, a *admin) error {
109108
"-reg-id": s.regID != 0,
110109
"-cert-file": s.certFile != "",
111110
}
112-
maps.DeleteFunc(setInputs, func(_ string, v bool) bool { return !v })
113-
if len(setInputs) == 0 {
114-
return errors.New("at least one input method flag must be specified")
115-
} else if len(setInputs) > 1 {
116-
return fmt.Errorf("more than one input method flag specified: %v", maps.Keys(setInputs))
111+
activeFlag, err := findActiveInputMethodFlag(setInputs)
112+
if err != nil {
113+
return err
117114
}
118115

119116
var serials []string
120-
var err error
121-
switch maps.Keys(setInputs)[0] {
117+
switch activeFlag {
122118
case "-serial":
123119
serials, err = []string{s.serial}, nil
124120
case "-incident-table":

cmd/admin/key.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515
"sync"
1616
"sync/atomic"
1717

18-
"golang.org/x/exp/maps"
1918
"google.golang.org/protobuf/types/known/timestamppb"
2019

2120
"github.com/letsencrypt/boulder/core"
@@ -69,16 +68,13 @@ func (s *subcommandBlockKey) Run(ctx context.Context, a *admin) error {
6968
"-cert-file": s.certFile != "",
7069
"-csr-file": s.csrFile != "",
7170
}
72-
maps.DeleteFunc(setInputs, func(_ string, v bool) bool { return !v })
73-
if len(setInputs) == 0 {
74-
return errors.New("at least one input method flag must be specified")
75-
} else if len(setInputs) > 1 {
76-
return fmt.Errorf("more than one input method flag specified: %v", maps.Keys(setInputs))
71+
activeFlag, err := findActiveInputMethodFlag(setInputs)
72+
if err != nil {
73+
return err
7774
}
7875

7976
var spkiHashes [][]byte
80-
var err error
81-
switch maps.Keys(setInputs)[0] {
77+
switch activeFlag {
8278
case "-private-key":
8379
var spkiHash []byte
8480
spkiHash, err = a.spkiHashFromPrivateKey(s.privKey)

cmd/admin/unpause_account.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414

1515
sapb "github.com/letsencrypt/boulder/sa/proto"
1616
"github.com/letsencrypt/boulder/unpause"
17-
"golang.org/x/exp/maps"
1817
)
1918

2019
// subcommandUnpauseAccount encapsulates the "admin unpause-account" command.
@@ -44,16 +43,13 @@ func (u *subcommandUnpauseAccount) Run(ctx context.Context, a *admin) error {
4443
"-account": u.accountID != 0,
4544
"-batch-file": u.batchFile != "",
4645
}
47-
maps.DeleteFunc(setInputs, func(_ string, v bool) bool { return !v })
48-
if len(setInputs) == 0 {
49-
return errors.New("at least one input method flag must be specified")
50-
} else if len(setInputs) > 1 {
51-
return fmt.Errorf("more than one input method flag specified: %v", maps.Keys(setInputs))
46+
activeFlag, err := findActiveInputMethodFlag(setInputs)
47+
if err != nil {
48+
return err
5249
}
5350

5451
var regIDs []int64
55-
var err error
56-
switch maps.Keys(setInputs)[0] {
52+
switch activeFlag {
5753
case "-account":
5854
regIDs = []int64{u.accountID}
5955
case "-batch-file":

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ require (
3737
go.opentelemetry.io/otel/sdk v1.30.0
3838
go.opentelemetry.io/otel/trace v1.30.0
3939
golang.org/x/crypto v0.27.0
40-
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3
4140
golang.org/x/net v0.29.0
4241
golang.org/x/sync v0.8.0
4342
golang.org/x/term v0.24.0

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,8 +309,6 @@ golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v
309309
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
310310
golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A=
311311
golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70=
312-
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 h1:hNQpMuAJe5CtcUqCXaWga3FHu+kQvCqcsoVaQgSV60o=
313-
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
314312
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
315313
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
316314
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=

vendor/golang.org/x/exp/LICENSE

Lines changed: 0 additions & 27 deletions
This file was deleted.

vendor/golang.org/x/exp/PATENTS

Lines changed: 0 additions & 22 deletions
This file was deleted.

vendor/golang.org/x/exp/maps/maps.go

Lines changed: 0 additions & 94 deletions
This file was deleted.

0 commit comments

Comments
 (0)