Skip to content

Commit aadaa9e

Browse files
authored
Feature: List operator in bazel-credential-helper (#2)
Adds a list subcommand to bazel-credential-helper which just dumps the list of currently logged-in URIs, emulating the output of docker-credential-helper. This is not an officially supported subcommand in bazel's credential helper spec, but it is useful for debugging. ``` $ ./bazel-credential-jfrog list {"https://foobar.jfrog.io/":"https://foobar.jfrog.io/"} ```
1 parent 5f19ab4 commit aadaa9e

File tree

4 files changed

+32
-3
lines changed

4 files changed

+32
-3
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ go.work.sum
2525
.env
2626

2727
# Default program output
28-
docker-credential-artifactory
28+
docker-credential-jfrog
29+
bazel-credential-jfrog

cmd/bazel/handler.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,18 @@ func (h ArtifactoryCredentialProvider) Get(request bazel.GetCredentialsRequest)
5858
log.Fatalln("not logged into", serverURL, "from JFrog CLI")
5959
return nil, errors.ErrUnsupported
6060
}
61+
62+
func (h ArtifactoryCredentialProvider) List() (bazel.ListCredentialsResponse, error) {
63+
serverDetailList, err := config.GetAllServersConfigs()
64+
if err != nil {
65+
log.Fatalln("unable to retrieve JFrog server configs:", err)
66+
return nil, err
67+
}
68+
69+
response := make(bazel.ListCredentialsResponse)
70+
for _, serverDetails := range serverDetailList {
71+
response[serverDetails.Url] = serverDetails.Url
72+
}
73+
74+
return response, nil
75+
}

internal/bazel/server.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,27 @@ func Serve(provider BazelCredentialProvider) {
2121

2222
res, err := provider.Get(request)
2323
if err != nil {
24-
log.Fatalln("unable to process 'get' request:", request, err)
24+
log.Fatalln("unable to process 'get' subcommand:", request, err)
2525
}
2626

2727
enc := json.NewEncoder(os.Stdout)
2828
err = enc.Encode(res)
2929
if err != nil {
3030
log.Fatalln("unable to encode 'get' response:", err)
3131
}
32+
case "list":
33+
res, err := provider.List()
34+
if err != nil {
35+
log.Fatalln("unable to process 'list' subcommand:", err)
36+
}
3237

38+
enc := json.NewEncoder(os.Stdout)
39+
err = enc.Encode(res)
40+
if err != nil {
41+
log.Fatalln("unable to encode 'list' response:", err)
42+
}
3343
default:
34-
fmt.Println("expected <get> subcommand")
44+
fmt.Println("expected <get|list> subcommand")
3545
os.Exit(1)
3646
}
3747
}

internal/bazel/spec.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ type GetCredentialsReponse struct {
1111
Headers map[string][]string `json:"headers,omitempty"`
1212
}
1313

14+
type ListCredentialsResponse = map[string]string
15+
1416
type BazelCredentialProvider interface {
1517
Get(request GetCredentialsRequest) (*GetCredentialsReponse, error)
18+
List() (ListCredentialsResponse, error)
1619
}

0 commit comments

Comments
 (0)