mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-30 18:17:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package api
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"strings"
 | |
| 
 | |
| 	retryablehttp "github.com/hashicorp/go-retryablehttp"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	ErrOutputStringRequest = "output a string, please"
 | |
| )
 | |
| 
 | |
| var LastOutputStringError *OutputStringError
 | |
| 
 | |
| type OutputStringError struct {
 | |
| 	*retryablehttp.Request
 | |
| 	TLSSkipVerify    bool
 | |
| 	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.TLSSkipVerify {
 | |
| 		d.parsedCurlString += "--insecure "
 | |
| 	}
 | |
| 	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) == "x-vault-token" {
 | |
| 				h = `$(vault print token)`
 | |
| 			}
 | |
| 			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
 | |
| }
 | 
