💄 Optimized CLI
This commit is contained in:
		| @@ -1,14 +1,13 @@ | |||||||
| package administration | package administration | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"fmt" |  | ||||||
|  |  | ||||||
| 	roadsign "code.smartsheep.studio/goatworks/roadsign/pkg" | 	roadsign "code.smartsheep.studio/goatworks/roadsign/pkg" | ||||||
| 	"github.com/gofiber/fiber/v2" | 	"github.com/gofiber/fiber/v2" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func responseConnectivity(c *fiber.Ctx) error { | func responseConnectivity(c *fiber.Ctx) error { | ||||||
| 	return c. | 	return c.Status(fiber.StatusOK).JSON(fiber.Map{ | ||||||
| 		Status(fiber.StatusOK). | 		"server":  "RoadSign", | ||||||
| 		SendString(fmt.Sprintf("Hello from RoadSign v%s", roadsign.AppVersion)) | 		"version": roadsign.AppVersion, | ||||||
|  | 	}) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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 |  | ||||||
| } |  | ||||||
| @@ -22,7 +22,7 @@ var CliCommands = []*cli.Command{ | |||||||
| 
 | 
 | ||||||
| 			log.Info().Msgf("There are %d server(s) connected in total.", len(servers)) | 			log.Info().Msgf("There are %d server(s) connected in total.", len(servers)) | ||||||
| 			for idx, server := range 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 | 			return nil | ||||||
| @@ -32,15 +32,16 @@ var CliCommands = []*cli.Command{ | |||||||
| 		Name:        "connect", | 		Name:        "connect", | ||||||
| 		Aliases:     []string{"add"}, | 		Aliases:     []string{"add"}, | ||||||
| 		Description: "Connect and save configuration of remote server", | 		Description: "Connect and save configuration of remote server", | ||||||
| 		ArgsUsage:   "<server url> <credential>", | 		ArgsUsage:   "<id> <server url> <credential>", | ||||||
| 		Action: func(ctx *cli.Context) error { | 		Action: func(ctx *cli.Context) error { | ||||||
| 			if ctx.Args().Len() < 2 { | 			if ctx.Args().Len() < 3 { | ||||||
| 				return fmt.Errorf("must have more two arguments: <server url> <credential>") | 				return fmt.Errorf("must have three arguments: <id> <server url> <credential>") | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			c := CliConnection{ | 			c := CliConnection{ | ||||||
| 				Url:        ctx.Args().Get(0), | 				ID:         ctx.Args().Get(0), | ||||||
| 				Credential: ctx.Args().Get(1), | 				Url:        ctx.Args().Get(1), | ||||||
|  | 				Credential: ctx.Args().Get(2), | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			if err := c.GetConnectivity(); err != nil { | 			if err := c.GetConnectivity(); err != nil { | ||||||
| @@ -64,7 +65,7 @@ var CliCommands = []*cli.Command{ | |||||||
| 		Name:        "disconnect", | 		Name:        "disconnect", | ||||||
| 		Aliases:     []string{"remove"}, | 		Aliases:     []string{"remove"}, | ||||||
| 		Description: "Remove a remote server configuration", | 		Description: "Remove a remote server configuration", | ||||||
| 		ArgsUsage:   "<server url>", | 		ArgsUsage:   "<id>", | ||||||
| 		Action: func(ctx *cli.Context) error { | 		Action: func(ctx *cli.Context) error { | ||||||
| 			if ctx.Args().Len() < 1 { | 			if ctx.Args().Len() < 1 { | ||||||
| 				return fmt.Errorf("must have more one arguments: <server url>") | 				return fmt.Errorf("must have more one arguments: <server url>") | ||||||
| @@ -74,7 +75,7 @@ var CliCommands = []*cli.Command{ | |||||||
| 			raw, _ := json.Marshal(viper.Get("servers")) | 			raw, _ := json.Marshal(viper.Get("servers")) | ||||||
| 			_ = json.Unmarshal(raw, &servers) | 			_ = json.Unmarshal(raw, &servers) | ||||||
| 			viper.Set("servers", lo.Filter(servers, func(item CliConnection, idx int) bool { | 			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 { | 			if err := viper.WriteConfig(); err != nil { | ||||||
							
								
								
									
										37
									
								
								pkg/cmd/rds/conn/connect.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								pkg/cmd/rds/conn/connect.go
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
|  | } | ||||||
| @@ -4,7 +4,7 @@ import ( | |||||||
| 	"os" | 	"os" | ||||||
| 
 | 
 | ||||||
| 	roadsign "code.smartsheep.studio/goatworks/roadsign/pkg" | 	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" | ||||||
| 	"github.com/rs/zerolog/log" | 	"github.com/rs/zerolog/log" | ||||||
| 	"github.com/spf13/viper" | 	"github.com/spf13/viper" | ||||||
| @@ -36,6 +36,7 @@ func main() { | |||||||
| 	app := &cli.App{ | 	app := &cli.App{ | ||||||
| 		Name:     "RoadSign CLI", | 		Name:     "RoadSign CLI", | ||||||
| 		Version:  roadsign.AppVersion, | 		Version:  roadsign.AppVersion, | ||||||
|  | 		Suggest:  true, | ||||||
| 		Commands: append([]*cli.Command{}, conn.CliCommands...), | 		Commands: append([]*cli.Command{}, conn.CliCommands...), | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @@ -1,5 +1,5 @@ | |||||||
| package roadsign | package roadsign | ||||||
|  |  | ||||||
| const ( | const ( | ||||||
| 	AppVersion = "1.2.0" | 	AppVersion = "1.2.1" | ||||||
| ) | ) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user