diff --git a/go/tasks/jwt_token_gen.go b/go/tasks/jwt_token_gen.go index 393764f..c1ffecb 100644 --- a/go/tasks/jwt_token_gen.go +++ b/go/tasks/jwt_token_gen.go @@ -1,11 +1,22 @@ package tasks -import "ocl/portainer-devtool/configs" +import ( + "bytes" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "ocl/portainer-devtool/configs" +) type GenerateJwtTokenTask struct { Config *configs.Config } +type GenerateJwtTokenResponse struct { + JWT string `json:"jwt"` +} + func NewGenerateJwtTokenTask(cfg *configs.Config) *GenerateJwtTokenTask { return &GenerateJwtTokenTask{ Config: cfg, @@ -13,6 +24,31 @@ func NewGenerateJwtTokenTask(cfg *configs.Config) *GenerateJwtTokenTask { } func (task *GenerateJwtTokenTask) Execute() error { + postBody, _ := json.Marshal(map[string]string{ + "username": task.Config.LoginCredential.Username, + "password": task.Config.LoginCredential.Password, + }) + + responseBody := bytes.NewBuffer(postBody) + resp, err := http.Post(task.Config.LoginCredential.Address, "application/json", responseBody) + if err != nil { + return fmt.Errorf("http requset error: %s", err.Error()) + } + defer resp.Body.Close() + + //Read the response body + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return fmt.Errorf("failed to parse the response body: %s", err.Error()) + } + + var ret GenerateJwtTokenResponse + err = json.Unmarshal(body, &ret) + if err != nil { + return err + } + + fmt.Printf("jwt token is:\n%s\n", ret.JWT) return nil }