From 79b084a83f17d38fadd5a68bcf5cd83a67e9ec40 Mon Sep 17 00:00:00 2001 From: celogeek Date: Sat, 5 Mar 2022 15:51:02 +0100 Subject: [PATCH] login / register cmd --- cmd/photos-api-cli/login.go | 43 +++++++++++++++++++++++++++++++--- cmd/photos-api-cli/main.go | 9 ++++--- cmd/photos-api-cli/register.go | 25 ++++++++++---------- 3 files changed, 59 insertions(+), 18 deletions(-) diff --git a/cmd/photos-api-cli/login.go b/cmd/photos-api-cli/login.go index 8a905a6..726b48e 100644 --- a/cmd/photos-api-cli/login.go +++ b/cmd/photos-api-cli/login.go @@ -1,7 +1,10 @@ package main import ( + "errors" "fmt" + + "github.com/go-resty/resty/v2" ) type LoginCommand struct { @@ -12,10 +15,44 @@ type LoginCommand struct { var loginCommand LoginCommand -func (c *LoginCommand) Execute(args []string) error { - fmt.Printf("Login on %s...\n", c.Url) +type LoginRequest struct { + Login string `json:"login"` + Password string `json:"password"` +} - fmt.Println("Login succeed!") +type LoginError struct { + Error string +} + +type LoginResponse struct { + Token string +} + +func (c *LoginCommand) Execute(args []string) error { + logger.Printf("Login on %s...\n", c.Url) + + cli := resty.New().SetBaseURL(loginCommand.Url) + + resp, err := cli. + R(). + SetBody(&LoginRequest{loginCommand.Login, loginCommand.Password}). + SetResult(&LoginResponse{}). + SetError(&LoginError{}). + Post("/account/login") + + if err != nil { + return err + } + + if err, ok := resp.Error().(*LoginError); ok { + logger.Printf("Login failed!") + return errors.New(err.Error) + } + + logger.Println("Login succeed!") + if result, ok := resp.Result().(*LoginResponse); ok { + fmt.Println(result.Token) + } return nil } diff --git a/cmd/photos-api-cli/main.go b/cmd/photos-api-cli/main.go index a5c559c..dfca05c 100644 --- a/cmd/photos-api-cli/main.go +++ b/cmd/photos-api-cli/main.go @@ -1,6 +1,7 @@ package main import ( + "log" "os" "github.com/jessevdk/go-flags" @@ -9,9 +10,11 @@ import ( type Options struct { } -var options Options - -var parser = flags.NewParser(&options, flags.Default) +var ( + options Options + parser = flags.NewParser(&options, flags.Default) + logger = log.New(os.Stderr, "", 0) +) func main() { if _, err := parser.Parse(); err != nil { diff --git a/cmd/photos-api-cli/register.go b/cmd/photos-api-cli/register.go index 84e05cb..ea748f2 100644 --- a/cmd/photos-api-cli/register.go +++ b/cmd/photos-api-cli/register.go @@ -2,7 +2,6 @@ package main import ( "errors" - "fmt" "github.com/go-resty/resty/v2" ) @@ -13,7 +12,7 @@ type RegisterCommand struct { Password string `short:"p" long:"password" description:"Password" required:"true"` } -var register RegisterCommand +var registerCommand RegisterCommand type RegisterRequest struct { Login string `json:"login"` @@ -21,36 +20,38 @@ type RegisterRequest struct { } type RegisterResponse struct { - Error string - Status string +} + +type RegisterError struct { + Error string } func (c *RegisterCommand) Execute(args []string) error { - fmt.Printf("Registering on %s...\n", c.Url) + logger.Printf("Registering on %s...\n", c.Url) - cli := resty.New().SetBaseURL(register.Url) + cli := resty.New().SetBaseURL(registerCommand.Url) resp, err := cli. R(). - SetBody(&RegisterRequest{register.Login, register.Password}). + SetBody(&RegisterRequest{registerCommand.Login, registerCommand.Password}). SetResult(&RegisterResponse{}). - SetError(&RegisterResponse{}). + SetError(&RegisterError{}). Post("/account/signup") if err != nil { return err } - if err, ok := resp.Error().(*RegisterResponse); ok { - fmt.Println("Registering failed!") + if err, ok := resp.Error().(*RegisterError); ok { + logger.Println("Registering failed!") return errors.New(err.Error) } - fmt.Println("Registering succeed!") + logger.Println("Registering succeed!") return nil } func init() { - parser.AddCommand("register", "Register", "", ®ister) + parser.AddCommand("register", "Register", "", ®isterCommand) }