diff --git a/cmd/forward.go b/cmd/forward.go index 1401509..af3729f 100644 --- a/cmd/forward.go +++ b/cmd/forward.go @@ -60,6 +60,8 @@ var forwardAddCmd = &cobra.Command{ } fwdType, _ := cmd.Flags().GetString("type") + name, _ := cmd.Flags().GetString("name") + description, _ := cmd.Flags().GetString("description") localAddr, _ := cmd.Flags().GetString("local-addr") localPort, _ := cmd.Flags().GetInt("local-port") remoteAddr, _ := cmd.Flags().GetString("remote-addr") @@ -107,12 +109,14 @@ var forwardAddCmd = &cobra.Command{ } fwd := &model.Forward{ - ServerID: server.ID, - Type: model.ForwardType(fwdType), - LocalAddr: localAddr, - LocalPort: localPort, - RemoteAddr: remoteAddr, - RemotePort: remotePort, + ServerID: server.ID, + Name: name, + Description: description, + Type: model.ForwardType(fwdType), + LocalAddr: localAddr, + LocalPort: localPort, + RemoteAddr: remoteAddr, + RemotePort: remotePort, } fwd.Enabled = true @@ -192,6 +196,8 @@ var forwardDeleteCmd = &cobra.Command{ func init() { forwardAddCmd.Flags().String("type", "local", "Forward type: local, remote, dynamic") + forwardAddCmd.Flags().String("name", "", "Forward name") + forwardAddCmd.Flags().String("description", "", "Forward description") forwardAddCmd.Flags().String("local-addr", "127.0.0.1", "Listen address") forwardAddCmd.MarkFlagRequired("local-port") forwardAddCmd.Flags().String("remote-addr", "", "Target address") diff --git a/cmd/forward_test.go b/cmd/forward_test.go index 45e319c..09f57ba 100644 --- a/cmd/forward_test.go +++ b/cmd/forward_test.go @@ -57,3 +57,56 @@ func TestForwardEditUpdatesEnabledFlag(t *testing.T) { t.Fatal("expected forward to be disabled") } } + +func TestForwardAddStoresNameAndDescription(t *testing.T) { + testDB, err := db.Open(t.TempDir()) + if err != nil { + t.Fatalf("open db: %v", err) + } + defer testDB.Close() + + previousDB := appDB + appDB = testDB + t.Cleanup(func() { appDB = previousDB }) + + server := &model.Server{Alias: "web", Host: "web.example.org", Port: 22, User: "root", AuthMethod: model.AuthKey} + if err := appDB.CreateServer(server); err != nil { + t.Fatalf("create server: %v", err) + } + + cmd := &cobra.Command{} + cmd.Flags().String("name", "", "") + cmd.Flags().String("description", "", "") + cmd.Flags().String("type", "local", "") + cmd.Flags().String("local-addr", "127.0.0.1", "") + cmd.Flags().Int("local-port", 0, "") + cmd.Flags().String("remote-addr", "", "") + cmd.Flags().Int("remote-port", 0, "") + for flag, value := range map[string]string{ + "name": "Local PostgreSQL", + "description": "DB access", + "type": "local", + "local-port": "15432", + "remote-addr": "127.0.0.1", + "remote-port": "5432", + } { + if err := cmd.Flags().Set(flag, value); err != nil { + t.Fatalf("set %s: %v", flag, err) + } + } + + if err := forwardAddCmd.RunE(cmd, []string{"web"}); err != nil { + t.Fatalf("add forward: %v", err) + } + + forwards, err := appDB.GetForwards(server.ID) + if err != nil { + t.Fatalf("get forwards: %v", err) + } + if len(forwards) != 1 { + t.Fatalf("expected one forward, got %d", len(forwards)) + } + if forwards[0].Name != "Local PostgreSQL" || forwards[0].Description != "DB access" { + t.Fatalf("unexpected forward metadata: %#v", forwards[0]) + } +}