lower timeout

master
Bel LaPointe 2022-09-29 14:59:52 -06:00
parent db23e9152a
commit 9a0ef6da85
1 changed files with 26 additions and 8 deletions

34
main.go
View File

@ -11,11 +11,12 @@ import (
"io/ioutil" "io/ioutil"
"log" "log"
"net/http" "net/http"
"net/url"
"os" "os"
"strings" "strings"
"time" "time"
"gitlab-app.eng.qops.net/golang/jwt" "gitlab-app.eng.qops.net/data-store/jwt"
) )
type LagReader struct { type LagReader struct {
@ -32,13 +33,14 @@ func main() {
} }
var bodyRepeat, n int var bodyRepeat, n int
var path, host, method, body, headers, brandID, userID, issuer, basicAuth, claims string var path, host, method, body, headers, brandID, userID, issuer, audience, basicAuth, claims, kid string
var ca, cert, key, secret string var ca, cert, key, secret string
var needJWT, verbose, jsonPP, quiet, responseHeaders bool var needJWT, verbose, jsonPP, quiet, responseHeaders bool
var timeout, lag time.Duration var timeout, lag time.Duration
func Main() error { func Main() error {
flag.StringVar(&method, "method", "get", "method for request") flag.StringVar(&method, "method", "get", "method for request")
flag.StringVar(&kid, "kid", "prod/rems-api", "kid for request")
flag.StringVar(&path, "path", "fieldsetdefinitions/v1/index/surveys/SV_031sm3MMOPSa8Tz/fieldsets?assumeHasPermission=true", "path 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.b1-prv.consul:8080", "host and port for request") flag.StringVar(&host, "host", "data-platform.service.b1-prv.consul:8080", "host and port for request")
flag.StringVar(&body, "body", "", "body for request") flag.StringVar(&body, "body", "", "body for request")
@ -49,6 +51,7 @@ func Main() error {
flag.StringVar(&basicAuth, "auth", "", "comma separated user,password for basic auth") flag.StringVar(&basicAuth, "auth", "", "comma separated user,password for basic auth")
flag.StringVar(&headers, "headers", "", "headers as k=v,k=v for request") flag.StringVar(&headers, "headers", "", "headers as k=v,k=v for request")
flag.StringVar(&issuer, "issuer", "dataprocessing,responseengine,fieldset-definitions,qualtrics,objectstore,svs,monolith,ex,blixt,null,responseengine", "issuer for jwt") flag.StringVar(&issuer, "issuer", "dataprocessing,responseengine,fieldset-definitions,qualtrics,objectstore,svs,monolith,ex,blixt,null,responseengine", "issuer for jwt")
flag.StringVar(&audience, "audience", "qualtrics", "aud for jwt")
flag.BoolVar(&needJWT, "jwt", true, "need jwt boolean") flag.BoolVar(&needJWT, "jwt", true, "need jwt boolean")
flag.BoolVar(&jsonPP, "jpp", true, "try json pretty print") flag.BoolVar(&jsonPP, "jpp", true, "try json pretty print")
flag.BoolVar(&verbose, "v", false, "is verbose") flag.BoolVar(&verbose, "v", false, "is verbose")
@ -88,7 +91,6 @@ func do() error {
} else { } else {
reqBody = os.Stdin reqBody = os.Stdin
} }
reqBody = NewLagReader(lag, reqBody)
req, err := http.NewRequest( req, err := http.NewRequest(
strings.ToUpper(method), strings.ToUpper(method),
host+"/"+strings.Trim(path, "/"), host+"/"+strings.Trim(path, "/"),
@ -97,18 +99,31 @@ func do() error {
if err != nil { if err != nil {
return err return err
} }
if lag != 0 {
req.Body = io.NopCloser(NewLagReader(lag, req.Body))
} else {
b, _ := ioutil.ReadAll(req.Body)
req.Body = io.NopCloser(bytes.NewReader(b))
req.ContentLength = int64(len(b))
}
req.Header.Set("Content-Type", "application/json") req.Header.Set("Content-Type", "application/json")
if len(headers) > 0 { if len(headers) > 0 {
for _, pair := range strings.Split(headers, ",") { for _, pair := range strings.Split(headers, ",") {
kv := strings.Split(pair, "=") kv := strings.Split(pair, "=")
req.Header.Add(kv[0], strings.Join(kv[1:], "=")) k := kv[0]
v := strings.Join(kv[1:], "=")
vd, err := url.QueryUnescape(v)
if err != nil {
panic(err)
}
req.Header.Add(k, vd)
} }
} }
if req.Header.Get("brandId") == "" { if req.Header.Get("brandId") == "" {
req.Header.Set("brandId", brandID) req.Header.Set("brandId", brandID)
} }
if needJWT { if needJWT {
setJWT(verbose, req, brandID, userID, issuer, secret, claims) setJWT(verbose, req, brandID, userID, issuer, secret, claims, kid, audience)
} }
if basicAuth != "" { if basicAuth != "" {
splits := strings.Split(basicAuth, ",") splits := strings.Split(basicAuth, ",")
@ -191,12 +206,15 @@ func makeClient(timeout time.Duration, ca, cert, key string) *http.Client {
} }
} }
func setJWT(verbose bool, r *http.Request, brandID, userID string, issuer, secret, claims string) { func setJWT(verbose bool, r *http.Request, brandID, userID string, issuer, secret, claims, kid, audience string) {
signer := &jwt.Signer{ signer := &jwt.Signer{
Timeout: time.Hour, Timeout: time.Minute * 5,
Key: []byte(secret), Key: []byte(secret),
DefaultHeaders: jwt.Headers{
KeyID: kid,
},
DefaultClaims: jwt.Claims{ DefaultClaims: jwt.Claims{
Audience: "qualtrics", Audience: audience,
Issuer: issuer, Issuer: issuer,
UserID: userID, UserID: userID,
BrandID: brandID, BrandID: brandID,