package client import ( "errors" "fmt" "net/http" "strconv" ) type userTokenResponseData struct { Name string `json:"tokenName"` UUID string `json:"tokenUuid"` Value string `json:"tokenValue"` } type userTokenResponse struct { Status string `json:"status"` Data userTokenResponseData `json:"data"` } // UserToken defines user token for Jenkins API communication type UserToken struct { raw *userTokenResponse base string } // GetToken returns user token func (token *UserToken) GetToken() string { return token.raw.Data.Value } func (jenkins *jenkins) GenerateToken(userName, tokenName string) (*UserToken, error) { token := &UserToken{raw: new(userTokenResponse), base: fmt.Sprintf("/user/%s/descriptorByName/jenkins.security.ApiTokenProperty/generateNewToken", userName)} endpoint := token.base data := map[string]string{"newTokenName": tokenName} r, err := jenkins.Requester.Post(endpoint, nil, token.raw, data) if err != nil { return nil, err } if r.StatusCode == http.StatusOK { if token.raw.Status == "ok" { return token, nil } return nil, errors.New(token.raw.Status) } return nil, errors.New(strconv.Itoa(r.StatusCode)) }