diff --git a/go.mod b/go.mod index 494108d1bdd90b73ee14aa6a310468ac09e3cc55..4713e000e70dc236794b7cfef22b8ae8953eb5ea 100644 --- a/go.mod +++ b/go.mod @@ -7,9 +7,10 @@ require ( github.com/MindscapeHQ/raygun4go v1.1.1 github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de github.com/aws/aws-lambda-go v1.26.0 - github.com/aws/aws-sdk-go-v2 v1.26.1 + github.com/aws/aws-sdk-go-v2 v1.27.1 github.com/aws/aws-sdk-go-v2/config v1.27.10 github.com/aws/aws-sdk-go-v2/credentials v1.17.10 + github.com/aws/aws-sdk-go-v2/service/apigatewaymanagementapi v1.19.9 github.com/aws/aws-sdk-go-v2/service/batch v1.36.1 github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.28.6 @@ -43,8 +44,8 @@ require ( github.com/aws/aws-sdk-go v1.44.180 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.8 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.8 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect diff --git a/go.sum b/go.sum index 9946076a47c7a649cc1002cee8c657f4461cea2f..8bb29d35362e77708cc7f003da98953688d48343 100644 --- a/go.sum +++ b/go.sum @@ -12,8 +12,8 @@ github.com/aws/aws-sdk-go v1.19.23/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpi github.com/aws/aws-sdk-go v1.44.180 h1:VLZuAHI9fa/3WME5JjpVjcPCNfpGHVMiHx8sLHWhMgI= github.com/aws/aws-sdk-go v1.44.180/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v1.17.3/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= -github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= -github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= +github.com/aws/aws-sdk-go-v2 v1.27.1 h1:xypCL2owhog46iFxBKKpBcw+bPTX/RJzwNj8uSilENw= +github.com/aws/aws-sdk-go-v2 v1.27.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2/go.mod h1:lPprDr1e6cJdyYeGXnRaJoP4Md+cDBvi2eOj00BlGmg= github.com/aws/aws-sdk-go-v2/config v1.18.8/go.mod h1:5XCmmyutmzzgkpk/6NYTjeWb6lgo9N170m1j6pQkIBs= @@ -26,16 +26,18 @@ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21/go.mod h1:ugwW57Z5Z48bpvU github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27/go.mod h1:a1/UpzeyBBerajpnP5nGZa9mGzsBn5cOKxm6NWQsvoI= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.8 h1:RnLB7p6aaFMRfyQkD6ckxR7myCC9SABIqSz4czYUUbU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.8/go.mod h1:XH7dQJd+56wEbP1I4e4Duo+QhSMxNArE8VP7NuUOTeM= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21/go.mod h1:+Gxn8jYn5k9ebfHEqlhrMirFjSW0v0C9fI+KN5vk2kE= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.8 h1:jzApk2f58L9yW9q1GEab3BMMFWUkkiZhyrRUtbwUbKU= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.8/go.mod h1:WqO+FftfO3tGePUtQxPXM6iODVfqMwsVMgTbG/ZXIdQ= github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28/go.mod h1:yRZVr/iT0AqyHeep00SZ4YfBAKojXz08w3XMBscdi0c= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 h1:81KE7vaZzrl7yHBYHVEzYB8sypz11NMOZ40YlWvPxsU= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5/go.mod h1:LIt2rg7Mcgn09Ygbdh/RdIm0rQ+3BNkbP1gyVMFtRK0= +github.com/aws/aws-sdk-go-v2/service/apigatewaymanagementapi v1.19.9 h1:X1A2bnzBrB5uu+DzRTfDBwl+VsH7fCJmQgnGIk3BkKY= +github.com/aws/aws-sdk-go-v2/service/apigatewaymanagementapi v1.19.9/go.mod h1:f7D1hvCXZ4hEWk1tVgUOJp6QN6poeDMqVqPw4B/sglE= github.com/aws/aws-sdk-go-v2/service/batch v1.36.1 h1:OY9+Dt4FkK6q2VHKAB8zY4nEKOhkziVOtxCPnS94leM= github.com/aws/aws-sdk-go-v2/service/batch v1.36.1/go.mod h1:JuPGVm7DzXD73vZBQsZwlDzoJeZewN08swLBGiU47K8= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs= @@ -138,7 +140,6 @@ github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslC github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= -github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/hbollon/go-edlib v1.6.0 h1:ga7AwwVIvP8mHm9GsPueC0d71cfRU/52hmPJ7Tprv4E= github.com/hbollon/go-edlib v1.6.0/go.mod h1:wnt6o6EIVEzUfgbUZY7BerzQ2uvzp354qmS2xaLkrhM= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= diff --git a/s3/s3.go b/s3/s3.go index e3a11e04f54583380e003926d82689aadddbe176..509549a60f8f2764034748f7c1cd6ac908639b40 100644 --- a/s3/s3.go +++ b/s3/s3.go @@ -330,6 +330,21 @@ func (s ClientWithHelpers) GetSignedDownloadURL(bucket string, fileName string, return getRequest.URL, err } +// GetSignedUploadURL gets a signed upload URL for the duration. If scv is nil, a new session will be created. +func (s ClientWithHelpers) GetSignedUploadURL(bucket string, fileName string, duration time.Duration) (string, error) { + putInput := &s3.PutObjectInput{ + Bucket: aws.String(bucket), + Key: aws.String(fileName), + } + + presignClient := s3.NewPresignClient(s.S3Client) + putRequest, err := presignClient.PresignPutObject(context.TODO(), putInput, func(po *s3.PresignOptions) { + po.Expires = duration + }) + + return putRequest.URL, err +} + func (s ClientWithHelpers) FileExists(bucket string, fileName string) (bool, error) { _, err := s.S3Client.HeadObject(context.TODO(), &s3.HeadObjectInput{ Bucket: aws.String(bucket), diff --git a/websocket_utils/websocket_utils.go b/websocket_utils/websocket_utils.go index 3a77890ddbeb692af6d7008741ce98c55afa838f..dc27a36db516bd3405685d96b3302725c9fd96a3 100644 --- a/websocket_utils/websocket_utils.go +++ b/websocket_utils/websocket_utils.go @@ -1,25 +1,31 @@ package websocket_utils import ( + "context" "fmt" "github.com/aws/aws-lambda-go/events" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/apigatewaymanagementapi" - "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/errors" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/apigatewaymanagementapi" + "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/logs" "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/utils" "os" ) var ( - sessions = map[string]*APIGateWaySessionWithHelpers{} + sessions = map[string]*APIGateWayClientWithHelpers{} ) -type APIGateWaySessionWithHelpers struct { - APIGatewaySession *apigatewaymanagementapi.ApiGatewayManagementApi +type APIGateWayClientWithHelpers struct { + APIGatewayClient *apigatewaymanagementapi.Client } -func GetSession(region ...string) *APIGateWaySessionWithHelpers { +func GetClient(req *events.APIGatewayWebsocketProxyRequest, region ...string) *APIGateWayClientWithHelpers { + if req == nil { + logs.ErrorMsg("APIGatewayWebsocketProxyRequest is nil") + return nil + } + s3Region := os.Getenv("AWS_REGION") // Set custom region @@ -33,34 +39,29 @@ func GetSession(region ...string) *APIGateWaySessionWithHelpers { } // Setup session - options := session.Options{ - Config: aws.Config{ - Region: utils.ValueToPointer(s3Region), - }, - } - sess, err := session.NewSessionWithOptions(options) + cfg, err := config.LoadDefaultConfig(context.TODO(), + config.WithRegion(s3Region), + ) if err != nil { return nil } - apiGatewaySession := NewSession(sess) + + apiGatewaySession := NewClient(req, cfg) sessions[s3Region] = apiGatewaySession return apiGatewaySession } -func NewSession(session *session.Session) *APIGateWaySessionWithHelpers { - return &APIGateWaySessionWithHelpers{ - APIGatewaySession: apigatewaymanagementapi.New(session), +func NewClient(req *events.APIGatewayWebsocketProxyRequest, config aws.Config) *APIGateWayClientWithHelpers { + return &APIGateWayClientWithHelpers{ + APIGatewayClient: apigatewaymanagementapi.NewFromConfig(config, func(o *apigatewaymanagementapi.Options) { + o.BaseEndpoint = utils.ValueToPointer(fmt.Sprintf("https://%s/%s", req.RequestContext.DomainName, req.RequestContext.Stage)) + }), } } -func (s APIGateWaySessionWithHelpers) PostToConnectionIDs(data []byte, req *events.APIGatewayWebsocketProxyRequest, connectionIDs []string) error { - if req == nil { - return errors.Error("websocket request is nil") - } - +func (s APIGateWayClientWithHelpers) PostToConnectionIDs(data []byte, connectionIDs []string) error { for _, connectionID := range connectionIDs { - s.APIGatewaySession.Endpoint = fmt.Sprintf("https://%s/%s", req.RequestContext.DomainName, req.RequestContext.Stage) - _, err := s.APIGatewaySession.PostToConnection(&apigatewaymanagementapi.PostToConnectionInput{ + _, err := s.APIGatewayClient.PostToConnection(context.TODO(), &apigatewaymanagementapi.PostToConnectionInput{ ConnectionId: &connectionID, Data: data, })