2020-05-04 10:58:03 -04:00
|
|
|
package api
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
2020-09-25 17:06:53 -04:00
|
|
|
"os"
|
2020-05-04 10:58:03 -04:00
|
|
|
"strings"
|
|
|
|
|
|
|
|
|
|
retryablehttp "github.com/hashicorp/go-retryablehttp"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
ErrOutputStringRequest = "output a string, please"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
LastOutputStringError *OutputStringError
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type OutputStringError struct {
|
|
|
|
|
*retryablehttp.Request
|
|
|
|
|
parsingError error
|
|
|
|
|
parsedCurlString string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (d *OutputStringError) Error() string {
|
|
|
|
|
if d.parsedCurlString == "" {
|
|
|
|
|
d.parseRequest()
|
|
|
|
|
if d.parsingError != nil {
|
|
|
|
|
return d.parsingError.Error()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ErrOutputStringRequest
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (d *OutputStringError) parseRequest() {
|
|
|
|
|
body, err := d.Request.BodyBytes()
|
|
|
|
|
if err != nil {
|
|
|
|
|
d.parsingError = err
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Build cURL string
|
|
|
|
|
d.parsedCurlString = "curl "
|
|
|
|
|
if d.Request.Method != "GET" {
|
|
|
|
|
d.parsedCurlString = fmt.Sprintf("%s-X %s ", d.parsedCurlString, d.Request.Method)
|
|
|
|
|
}
|
|
|
|
|
for k, v := range d.Request.Header {
|
|
|
|
|
for _, h := range v {
|
|
|
|
|
if strings.ToLower(k) == "authorization" {
|
2020-10-21 09:00:17 -04:00
|
|
|
tokenName := os.Getenv("BOUNDARY_TOKEN_NAME")
|
|
|
|
|
keyringType := os.Getenv("BOUNDARY_KEYRING_TYPE")
|
|
|
|
|
switch {
|
|
|
|
|
case tokenName == "none" || keyringType == "none":
|
2020-09-25 17:06:53 -04:00
|
|
|
h = `Bearer <token>`
|
2020-10-21 09:00:17 -04:00
|
|
|
case tokenName == "" && keyringType == "":
|
2020-09-25 17:06:53 -04:00
|
|
|
h = `Bearer $(boundary config get-token)`
|
|
|
|
|
default:
|
2020-10-21 09:00:17 -04:00
|
|
|
h = fmt.Sprintf("Bearer $(boundary config get-token -keyring-type %s -token-name %s)", keyringType, tokenName)
|
2020-09-25 17:06:53 -04:00
|
|
|
}
|
2020-05-04 10:58:03 -04:00
|
|
|
}
|
|
|
|
|
d.parsedCurlString = fmt.Sprintf("%s-H \"%s: %s\" ", d.parsedCurlString, k, h)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if len(body) > 0 {
|
|
|
|
|
// We need to escape single quotes since that's what we're using to
|
|
|
|
|
// quote the body
|
|
|
|
|
escapedBody := strings.Replace(string(body), "'", "'\"'\"'", -1)
|
|
|
|
|
d.parsedCurlString = fmt.Sprintf("%s-d '%s' ", d.parsedCurlString, escapedBody)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
d.parsedCurlString = fmt.Sprintf("%s%s", d.parsedCurlString, d.Request.URL.String())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (d *OutputStringError) CurlString() string {
|
|
|
|
|
if d.parsedCurlString == "" {
|
|
|
|
|
d.parseRequest()
|
|
|
|
|
}
|
|
|
|
|
return d.parsedCurlString
|
|
|
|
|
}
|