always better

This commit is contained in:
Bel LaPointe
2019-02-11 11:11:09 -07:00
parent 520fca8ee5
commit bf638ad193

62
main.go
View File

@@ -2,35 +2,50 @@ package main
import ( import (
"bytes" "bytes"
"crypto/tls"
"crypto/x509"
"flag" "flag"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"os" "os"
"strings" "strings"
"time"
"gitlab-app.eng.qops.net/golang/jwt" "gitlab-app.eng.qops.net/golang/jwt"
) )
func main() { func main() {
var path, host, method, body, headers, brandID string var path, host, method, body, headers, brandID, issuer string
var ca, cert, key string
var needJWT, verbose bool var needJWT, verbose bool
var timeout time.Duration
flag.StringVar(&method, "method", "get", "method for request") 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(&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(&host, "host", "data-platform.service.consul:8080", "host and port for request")
flag.StringVar(&body, "body", "", "body for request") flag.StringVar(&body, "body", "", "body for request")
flag.StringVar(&brandID, "brand", "testencresponse", "brandID for request JWT") flag.StringVar(&brandID, "brand", "testencresponse", "brandID for request JWT")
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.BoolVar(&needJWT, "jwt", true, "need jwt boolean") flag.BoolVar(&needJWT, "jwt", true, "need jwt boolean")
flag.BoolVar(&verbose, "v", false, "is verbose") flag.BoolVar(&verbose, "v", false, "is verbose")
flag.DurationVar(&timeout, "t", time.Second*10, "request timeout")
flag.StringVar(&ca, "ca", "", "ca for server")
flag.StringVar(&cert, "cert", "", "cert for client")
flag.StringVar(&key, "key", "", "key for client")
flag.Parse() flag.Parse()
c := &http.Client{} if !strings.HasPrefix(host, "http") {
host = "http://" + host
}
c := makeClient(timeout, ca, cert, key)
req, err := http.NewRequest( req, err := http.NewRequest(
strings.ToUpper(method), strings.ToUpper(method),
"http://"+strings.Trim(host, "/")+"/"+strings.Trim(path, "/"), host+"/"+strings.Trim(path, "/"),
strings.NewReader(body), strings.NewReader(body),
) )
fmt.Println(req)
if err != nil { if err != nil {
panic(err) panic(err)
} }
@@ -41,7 +56,7 @@ func main() {
} }
} }
if needJWT { if needJWT {
setJWT(req, brandID) setJWT(req, brandID, issuer)
} }
if verbose { if verbose {
@@ -49,11 +64,13 @@ func main() {
} }
resp, err := c.Do(req) resp, err := c.Do(req)
if err != nil { if err != nil {
panic(err) fmt.Println("DO FAILED:", err)
return
} }
b, err := ioutil.ReadAll(resp.Body) b, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
panic(err) fmt.Println("READ BODY FAILED:", err)
return
} }
defer resp.Body.Close() defer resp.Body.Close()
@@ -61,12 +78,41 @@ func main() {
fmt.Printf("%s\n", bytes.TrimSpace(b)) fmt.Printf("%s\n", bytes.TrimSpace(b))
} }
func setJWT(r *http.Request, brandID string) { func makeClient(timeout time.Duration, ca, cert, key string) *http.Client {
transport := &http.Transport{
TLSClientConfig: &tls.Config{},
}
if ca == "" {
transport.TLSClientConfig.InsecureSkipVerify = true
} else {
caBytes, err := ioutil.ReadFile(ca)
if err != nil {
panic(err)
}
rootCAs := x509.NewCertPool()
rootCAs.AppendCertsFromPEM(caBytes)
transport.TLSClientConfig.RootCAs = rootCAs
}
if cert != "" && key != "" {
clientCert, err := tls.LoadX509KeyPair(cert, key)
if err != nil {
panic(err)
}
transport.TLSClientConfig.Certificates = []tls.Certificate{clientCert}
transport.TLSClientConfig.BuildNameToCertificate()
}
return &http.Client{
Timeout: timeout,
Transport: transport,
}
}
func setJWT(r *http.Request, brandID string, issuer string) {
signer := &jwt.Signer{ signer := &jwt.Signer{
Key: []byte("dnKgzTPNZyEd2Kfop"), Key: []byte("dnKgzTPNZyEd2Kfop"),
DefaultClaims: jwt.Claims{ DefaultClaims: jwt.Claims{
Audience: "qualtrics", Audience: "qualtrics",
Issuer: "dataprocessing,responseengine,fieldset-definitions,qualtrics,objectstore,svs,monolith,ex,blixt,null,responseengine", Issuer: issuer,
UserID: "breel", UserID: "breel",
BrandID: brandID, BrandID: brandID,
Custom: map[string]interface{}{ Custom: map[string]interface{}{