package main import ( "bytes" "flag" "fmt" "io/ioutil" "net/http" "strings" "gitlab-app.eng.qops.net/golang/jwt" ) func main() { var path, host, method, body, headers, brandID string var needJWT, verbose bool flag.StringVar(&method, "method", "get", "method for request") flag.StringVar(&path, "path", "fieldsetdefinitions/v1/index/surveys/SV_031sm3MMOPSa8Tz/fieldsets", "path for request") flag.StringVar(&host, "host", "data-platform.service.consul:8080", "host and port for request") flag.StringVar(&body, "body", "", "body for request") flag.StringVar(&brandID, "brand", "testencresponse", "brandID for request JWT") flag.StringVar(&headers, "headers", "", "headers as k=v,k=v for request") flag.BoolVar(&needJWT, "jwt", true, "need jwt boolean") flag.BoolVar(&verbose, "v", false, "is verbose") flag.Parse() c := &http.Client{} req, err := http.NewRequest( strings.ToUpper(method), "http://"+strings.Trim(host, "/")+"/"+strings.Trim(path, "/"), strings.NewReader(body), ) if err != nil { panic(err) } if len(headers) > 0 { for _, pair := range strings.Split(headers, ",") { kv := strings.Split(pair, "=") req.Header.Add(kv[0], kv[1]) } } if needJWT { setJWT(req, brandID) } if verbose { fmt.Println(req) } resp, err := c.Do(req) if err != nil { panic(err) } b, err := ioutil.ReadAll(resp.Body) if err != nil { panic(err) } defer resp.Body.Close() fmt.Printf("(%d) %s\n", resp.StatusCode, bytes.TrimSpace(b)) } func setJWT(r *http.Request, brandID string) { signer := &jwt.Signer{ Key: []byte("dnKgzTPNZyEd2Kfop"), DefaultClaims: jwt.Claims{ Audience: "qualtrics", Issuer: "dataprocessing,responseengine,fieldset-definitions,qualtrics", UserID: "breel", BrandID: brandID, }, IncludeBodyHash: true, } if err := signer.Sign(r, jwt.Claims{}); err != nil { panic(err) } }