jwtcurl/main.go

83 lines
2.0 KiB
Go

package main
import (
"bytes"
"flag"
"fmt"
"io/ioutil"
"net/http"
"os"
"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?assumeHasPermission=true", "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.Fprintf(os.Stderr, "%v\n", 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.Fprintf(os.Stderr, "(%d) ", resp.StatusCode)
fmt.Printf("%s\n", 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,objectstore,svs,monolith,ex,blixt,null,responseengine",
UserID: "breel",
BrandID: brandID,
Custom: map[string]interface{}{
"IsolationPartitionID": brandID,
},
},
IncludeBodyHash: true,
}
if err := signer.Sign(r, jwt.Claims{}); err != nil {
panic(err)
}
}