package tasks 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, } } 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 } func (task *GenerateJwtTokenTask) String() string { return "Generate JWT token" }