diff --git a/pkg/administration/connectivity.go b/pkg/administration/connectivity.go index b6cedae..d9d5134 100644 --- a/pkg/administration/connectivity.go +++ b/pkg/administration/connectivity.go @@ -1,14 +1,13 @@ package administration import ( - "fmt" - roadsign "code.smartsheep.studio/goatworks/roadsign/pkg" "github.com/gofiber/fiber/v2" ) func responseConnectivity(c *fiber.Ctx) error { - return c. - Status(fiber.StatusOK). - SendString(fmt.Sprintf("Hello from RoadSign v%s", roadsign.AppVersion)) + return c.Status(fiber.StatusOK).JSON(fiber.Map{ + "server": "RoadSign", + "version": roadsign.AppVersion, + }) } diff --git a/pkg/cmd/cli/conn/connect.go b/pkg/cmd/cli/conn/connect.go deleted file mode 100644 index 158ce54..0000000 --- a/pkg/cmd/cli/conn/connect.go +++ /dev/null @@ -1,25 +0,0 @@ -package conn - -import ( - "fmt" - - "github.com/gofiber/fiber/v2" -) - -type CliConnection struct { - Url string `json:"url"` - Credential string `json:"credential"` -} - -func (v CliConnection) GetConnectivity() error { - client := fiber.Get(v.Url + "/cgi/connectivity") - client.BasicAuth("RoadSign CLI", v.Credential) - - if status, _, err := client.String(); len(err) > 0 { - return fmt.Errorf("couldn't connect to server: %q", err) - } else if status != 200 { - return fmt.Errorf("server rejected request, may cause by invalid credential") - } - - return nil -} diff --git a/pkg/cmd/cli/conn/commands.go b/pkg/cmd/rds/conn/commands.go similarity index 83% rename from pkg/cmd/cli/conn/commands.go rename to pkg/cmd/rds/conn/commands.go index 980a97d..2942075 100644 --- a/pkg/cmd/cli/conn/commands.go +++ b/pkg/cmd/rds/conn/commands.go @@ -22,7 +22,7 @@ var CliCommands = []*cli.Command{ log.Info().Msgf("There are %d server(s) connected in total.", len(servers)) for idx, server := range servers { - log.Info().Msgf("%d. %s", idx+1, server.Url) + log.Info().Msgf("%d) %s: %s", idx+1, server.ID, server.Url) } return nil @@ -32,15 +32,16 @@ var CliCommands = []*cli.Command{ Name: "connect", Aliases: []string{"add"}, Description: "Connect and save configuration of remote server", - ArgsUsage: " ", + ArgsUsage: " ", Action: func(ctx *cli.Context) error { - if ctx.Args().Len() < 2 { - return fmt.Errorf("must have more two arguments: ") + if ctx.Args().Len() < 3 { + return fmt.Errorf("must have three arguments: ") } c := CliConnection{ - Url: ctx.Args().Get(0), - Credential: ctx.Args().Get(1), + ID: ctx.Args().Get(0), + Url: ctx.Args().Get(1), + Credential: ctx.Args().Get(2), } if err := c.GetConnectivity(); err != nil { @@ -64,7 +65,7 @@ var CliCommands = []*cli.Command{ Name: "disconnect", Aliases: []string{"remove"}, Description: "Remove a remote server configuration", - ArgsUsage: "", + ArgsUsage: "", Action: func(ctx *cli.Context) error { if ctx.Args().Len() < 1 { return fmt.Errorf("must have more one arguments: ") @@ -74,7 +75,7 @@ var CliCommands = []*cli.Command{ raw, _ := json.Marshal(viper.Get("servers")) _ = json.Unmarshal(raw, &servers) viper.Set("servers", lo.Filter(servers, func(item CliConnection, idx int) bool { - return item.Url != ctx.Args().Get(0) + return item.ID != ctx.Args().Get(0) })) if err := viper.WriteConfig(); err != nil { diff --git a/pkg/cmd/rds/conn/connect.go b/pkg/cmd/rds/conn/connect.go new file mode 100644 index 0000000..bdc0b21 --- /dev/null +++ b/pkg/cmd/rds/conn/connect.go @@ -0,0 +1,37 @@ +package conn + +import ( + "encoding/json" + "fmt" + + roadsign "code.smartsheep.studio/goatworks/roadsign/pkg" + "github.com/gofiber/fiber/v2" + "github.com/rs/zerolog/log" +) + +type CliConnection struct { + ID string `json:"id"` + Url string `json:"url"` + Credential string `json:"credential"` +} + +func (v CliConnection) GetConnectivity() error { + client := fiber.Get(v.Url + "/cgi/connectivity") + client.BasicAuth("RoadSign CLI", v.Credential) + + if status, data, err := client.Bytes(); len(err) > 0 { + return fmt.Errorf("couldn't connect to server: %q", err) + } else if status != 200 { + return fmt.Errorf("server rejected request, may cause by invalid credential") + } else { + var resp fiber.Map + if err := json.Unmarshal(data, &resp); err != nil { + return err + } else if resp["server"] != "RoadSign" { + return fmt.Errorf("remote server isn't roadsign") + } else if resp["version"] != roadsign.AppVersion { + log.Warn().Msg("Server connected successfully, but remote server version mismatch than CLI version, some features may buggy or completely unusable.") + } + } + return nil +} diff --git a/pkg/cmd/cli/main.go b/pkg/cmd/rds/main.go similarity index 92% rename from pkg/cmd/cli/main.go rename to pkg/cmd/rds/main.go index 0a6aaeb..b36b0a1 100644 --- a/pkg/cmd/cli/main.go +++ b/pkg/cmd/rds/main.go @@ -4,7 +4,7 @@ import ( "os" roadsign "code.smartsheep.studio/goatworks/roadsign/pkg" - "code.smartsheep.studio/goatworks/roadsign/pkg/cmd/cli/conn" + "code.smartsheep.studio/goatworks/roadsign/pkg/cmd/rds/conn" "github.com/rs/zerolog" "github.com/rs/zerolog/log" "github.com/spf13/viper" @@ -36,6 +36,7 @@ func main() { app := &cli.App{ Name: "RoadSign CLI", Version: roadsign.AppVersion, + Suggest: true, Commands: append([]*cli.Command{}, conn.CliCommands...), } diff --git a/pkg/meta.go b/pkg/meta.go index 775d41c..b036dc4 100644 --- a/pkg/meta.go +++ b/pkg/meta.go @@ -1,5 +1,5 @@ package roadsign const ( - AppVersion = "1.2.0" + AppVersion = "1.2.1" )