From 42becb0505956ef989249b4b1c0ff2c1a83f46a9 Mon Sep 17 00:00:00 2001 From: Simone Gotti Date: Fri, 5 Apr 2019 10:32:32 +0200 Subject: [PATCH] update secret create --- cmd/agola/cmd/projectgroupsecretcreate.go | 4 +++- cmd/agola/cmd/projectsecretcreate.go | 14 +++++++++++++- internal/services/configstore/command/command.go | 9 +++++++++ internal/services/gateway/api/secret.go | 2 ++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/cmd/agola/cmd/projectgroupsecretcreate.go b/cmd/agola/cmd/projectgroupsecretcreate.go index f3b3804..d272161 100644 --- a/cmd/agola/cmd/projectgroupsecretcreate.go +++ b/cmd/agola/cmd/projectgroupsecretcreate.go @@ -31,11 +31,13 @@ var cmdProjectGroupSecretCreate = &cobra.Command{ func init() { flags := cmdProjectGroupSecretCreate.Flags() - flags.StringVar(&secretCreateOpts.projectRef, "project", "", "project id or full path") + flags.StringVar(&secretCreateOpts.parentRef, "projectgroup", "", "project group id or full path") flags.StringVarP(&secretCreateOpts.name, "name", "n", "", "secret name") + flags.StringVar(&secretCreateOpts.data, "data", "", "json map of secret data") cmdProjectGroupSecretCreate.MarkFlagRequired("project") cmdProjectGroupSecretCreate.MarkFlagRequired("name") + cmdProjectGroupSecretCreate.MarkFlagRequired("data") cmdProjectGroupSecret.AddCommand(cmdProjectGroupSecretCreate) } diff --git a/cmd/agola/cmd/projectsecretcreate.go b/cmd/agola/cmd/projectsecretcreate.go index d57a6ff..a091ff2 100644 --- a/cmd/agola/cmd/projectsecretcreate.go +++ b/cmd/agola/cmd/projectsecretcreate.go @@ -16,9 +16,12 @@ package cmd import ( "context" + "encoding/json" + + "github.com/sorintlab/agola/internal/services/gateway/api" + "github.com/sorintlab/agola/internal/services/types" "github.com/pkg/errors" - "github.com/sorintlab/agola/internal/services/gateway/api" "github.com/spf13/cobra" ) @@ -35,6 +38,7 @@ var cmdProjectSecretCreate = &cobra.Command{ type secretCreateOptions struct { projectRef string name string + data string } var secretCreateOpts secretCreateOptions @@ -44,9 +48,11 @@ func init() { flags.StringVar(&secretCreateOpts.projectRef, "project", "", "project id or full path)") flags.StringVarP(&secretCreateOpts.name, "name", "n", "", "secret name") + flags.StringVar(&secretCreateOpts.data, "data", "", "json map of secret data") cmdProjectSecretCreate.MarkFlagRequired("project") cmdProjectSecretCreate.MarkFlagRequired("name") + cmdProjectSecretCreate.MarkFlagRequired("data") cmdProjectSecret.AddCommand(cmdProjectSecretCreate) } @@ -54,8 +60,14 @@ func init() { func secretCreate(cmd *cobra.Command, ownertype string, args []string) error { gwclient := api.NewClient(gatewayURL, token) + var data map[string]string + if err := json.Unmarshal([]byte(secretCreateOpts.data), &data); err != nil { + log.Fatalf("failed to unmarshall values: %v", err) + } req := &api.CreateSecretRequest{ Name: secretCreateOpts.name, + Type: types.SecretTypeInternal, + Data: data, } switch ownertype { diff --git a/internal/services/configstore/command/command.go b/internal/services/configstore/command/command.go index 0ac783f..61e6450 100644 --- a/internal/services/configstore/command/command.go +++ b/internal/services/configstore/command/command.go @@ -896,6 +896,15 @@ func (s *CommandHandler) CreateSecret(ctx context.Context, secret *types.Secret) if secret.Name == "" { return nil, util.NewErrBadRequest(errors.Errorf("secret name required")) } + if secret.Type != types.SecretTypeInternal { + return nil, util.NewErrBadRequest(errors.Errorf("wrong secret type %q", secret.Type)) + } + switch secret.Type { + case types.SecretTypeInternal: + if len(secret.Data) == 0 { + return nil, util.NewErrBadRequest(errors.Errorf("empty secret data")) + } + } if secret.Parent.Type == "" { return nil, util.NewErrBadRequest(errors.Errorf("secret parent type required")) } diff --git a/internal/services/gateway/api/secret.go b/internal/services/gateway/api/secret.go index c0b16c4..66dd4d2 100644 --- a/internal/services/gateway/api/secret.go +++ b/internal/services/gateway/api/secret.go @@ -128,6 +128,8 @@ func (h *CreateSecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) s := &types.Secret{ Name: req.Name, + Type: req.Type, + Data: req.Data, } switch parentType {