Skip to content
Snippets Groups Projects
Select Git revision
  • c618256d35a120a2941159927c54f542b4fc125e
  • main default protected
  • v1.298.0
  • v1.297.0
  • v1.296.0
  • v1.295.0
  • v1.294.0
  • v1.293.0
  • v1.292.0
  • v1.291.0
  • v1.290.0
  • v1.289.0
  • v1.288.0
  • v1.287.0
  • v1.286.0
  • v1.285.0
  • v1.284.0
  • v1.283.0
  • v1.282.0
  • v1.281.0
  • v1.280.0
  • v1.279.0
22 results

request.go

Blame
  • request.go 2.51 KiB
    package handler_utils
    
    import (
    	"bytes"
    	"context"
    	"github.com/aws/aws-sdk-go/aws/credentials"
    	v4 "github.com/aws/aws-sdk-go/aws/signer/v4"
    	"github.com/go-resty/resty/v2"
    	"io"
    	"net/http"
    	"os"
    	"strings"
    	"time"
    
    	"github.com/aws/aws-lambda-go/lambdacontext"
    )
    
    const HTTPXRequestIDHeaderKey = "X-Request-ID"
    
    func RequestIDFromLambdaContext(ctx context.Context) *string {
    	// Get request ID from context
    	if ctx != nil {
    		lambdaContext, _ := lambdacontext.FromContext(ctx)
    		if lambdaContext != nil {
    			return &lambdaContext.AwsRequestID
    		}
    	}
    	return nil
    }
    
    func RequestIDFromHeaders(headers map[string]string, requestIDHeaderKey string) *string {
    	// Get request ID from parent micro service
    	if requestID, ok := headers[requestIDHeaderKey]; ok {
    		return &requestID
    	}
    	return nil
    }
    
    func AddRequestIDToHeaders(requestID *string, responseHeaders map[string]string, requestIDHeaderKey string, requestHeaders map[string]string) {
    	if requestID != nil && responseHeaders != nil {
    		responseHeaders[requestIDHeaderKey] = *requestID
    		responseHeaders[HTTPXRequestIDHeaderKey] = *requestID
    	}
    
    	// Add the HTTP X-Request-ID request header to the response headers: https://http.dev/x-request-id
    	for key, val := range requestHeaders {
    		// Don't be case-sensitive
    		if strings.ToLower(key) == strings.ToLower(HTTPXRequestIDHeaderKey) {
    			responseHeaders[HTTPXRequestIDHeaderKey] = val
    			break
    		}
    	}
    }
    
    func SignAWSRestyClient(client *resty.Client, accessKeyID, secretAccessKey string, bodyBytes []byte) error {
    	var bodySeeker io.ReadSeeker = bytes.NewReader(bodyBytes)
    
    	// Add a hook to sign the request before sending
    	client.SetPreRequestHook(func(_ *resty.Client, r *http.Request) error {
    		err := SignAWSHttpRequest(r, accessKeyID, secretAccessKey, bodySeeker)
    		if err != nil {
    			return err
    		}
    		return nil
    	})
    
    	return nil
    }
    
    // SignAWSRequest wraps and executes http.NewRequest and adds a sig version 4 signature for AWS API Gateway