From ef94697fe65865f3fe1df575cec1ce84ceba5c24 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 3 Sep 2024 14:58:10 -0700 Subject: [PATCH] build: update the aws cognito sdk to the latest major version 2 (#127) --- CHANGELOG.md | 1 + go.mod | 16 +++++++++++-- go.sum | 36 ++++++++++++++++++++++------- pkg/emporia/cognito.go | 51 +++++++++++++++++++++--------------------- pkg/emporia/config.go | 2 +- 5 files changed, 69 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1612d06..f2134f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ to [Semantic Versioning][semver]. ### Maintenance - Set the `go` version to a fixed `1.22.6` for the toolchain +- Update token authentication to use the latest Cognito SDK ## [1.1.0] - 2024-08-03 diff --git a/go.mod b/go.mod index f0fb0f3..3e575ae 100644 --- a/go.mod +++ b/go.mod @@ -4,13 +4,25 @@ go 1.22.6 require ( github.com/AlecAivazis/survey/v2 v2.3.7 - github.com/aws/aws-sdk-go v1.55.5 + github.com/aws/aws-sdk-go-v2/config v1.27.31 + github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.43.3 github.com/stretchr/testify v1.9.0 ) require ( + github.com/aws/aws-sdk-go-v2 v1.30.5 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.30 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 // indirect + github.com/aws/smithy-go v1.20.4 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/mattn/go-colorable v0.1.2 // indirect github.com/mattn/go-isatty v0.0.8 // indirect diff --git a/go.sum b/go.sum index 17a7ac4..277b1bb 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,34 @@ github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkk github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= -github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= -github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go-v2 v1.30.5 h1:mWSRTwQAb0aLE17dSzztCVJWI9+cRMgqebndjwDyK0g= +github.com/aws/aws-sdk-go-v2 v1.30.5/go.mod h1:CT+ZPWXbYrci8chcARI3OmI/qgd+f6WtuLOoaIA8PR0= +github.com/aws/aws-sdk-go-v2/config v1.27.31 h1:kxBoRsjhT3pq0cKthgj6RU6bXTm/2SgdoUMyrVw0rAI= +github.com/aws/aws-sdk-go-v2/config v1.27.31/go.mod h1:z04nZdSWFPaDwK3DdJOG2r+scLQzMYuJeW0CujEm9FM= +github.com/aws/aws-sdk-go-v2/credentials v1.17.30 h1:aau/oYFtibVovr2rDt8FHlU17BTicFEMAi29V1U+L5Q= +github.com/aws/aws-sdk-go-v2/credentials v1.17.30/go.mod h1:BPJ/yXV92ZVq6G8uYvbU0gSl8q94UB63nMT5ctNO38g= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 h1:yjwoSyDZF8Jth+mUk5lSPJCkMC0lMy6FaCD51jm6ayE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12/go.mod h1:fuR57fAgMk7ot3WcNQfb6rSEn+SUffl7ri+aa8uKysI= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17 h1:pI7Bzt0BJtYA0N/JEC6B8fJ4RBrEMi1LBrkMdFYNSnQ= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17/go.mod h1:Dh5zzJYMtxfIjYW+/evjQ8uj2OyR/ve2KROHGHlSFqE= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17 h1:Mqr/V5gvrhA2gvgnF42Zh5iMiQNcOYthFYwCyrnuWlc= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17/go.mod h1:aLJpZlCmjE+V+KtN1q1uyZkfnUWpQGpbsn89XPKyzfU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= +github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.43.3 h1:5xaQ5FYsMqVEPtWLTG1C/v7CHZo903kOq3H3fAKq6nQ= +github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.43.3/go.mod h1:hsciKQ2xFfOPEuebyKmFo7wOSVNoLuzmCi6Qtol4UDc= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 h1:KypMCbLPPHEmf9DgMGw51jMj77VfGPAN2Kv4cfhlfgI= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4/go.mod h1:Vz1JQXliGcQktFTN/LN6uGppAIRoLBR2bMvIMP0gOjc= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 h1:tJ5RnkHCiSH0jyd6gROjlJtNwov0eGYNz8s8nFcR0jQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18/go.mod h1:++NHzT+nAF7ZPrHPsA+ENvsXkOO8wEu+C6RXltAG4/c= +github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 h1:zCsFCKvbj25i7p1u94imVoO447I/sFv8qq+lGJhRN0c= +github.com/aws/aws-sdk-go-v2/service/sso v1.22.5/go.mod h1:ZeDX1SnKsVlejeuz41GiajjZpRSWR7/42q/EyA/QEiM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 h1:SKvPgvdvmiTWoi0GAJ7AsJfOz3ngVkD/ERbs5pUnHNI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5/go.mod h1:20sz31hv/WsPa3HhU3hfrIet2kxM4Pe0r20eBZ20Tac= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 h1:OMsEmCyz2i89XwRwPouAJvhj81wINh+4UK+k/0Yo/q8= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.5/go.mod h1:vmSqFK+BVIwVpDAGZB3CoCXHzurt4qBE8lf+I/kRTh0= +github.com/aws/smithy-go v1.20.4 h1:2HK1zBdPgRbjFOHlfeQZfpC4r72MOb9bZkiFwggKO+4= +github.com/aws/smithy-go v1.20.4/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI= github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -11,10 +37,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= @@ -62,8 +84,6 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/emporia/cognito.go b/pkg/emporia/cognito.go index c348e53..c5ef4f1 100644 --- a/pkg/emporia/cognito.go +++ b/pkg/emporia/cognito.go @@ -1,35 +1,36 @@ package emporia import ( - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/session" - cognito "github.com/aws/aws-sdk-go/service/cognitoidentityprovider" + "context" + + config "github.com/aws/aws-sdk-go-v2/config" + cognito "github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider" ) // EmporiaCognitoClientID is the AWS Cognito client ID used by Emporia -const EmporiaCognitoClientID = "4qte47jbstod8apnfic0bunmrq" +var EmporiaCognitoClientID string = "4qte47jbstod8apnfic0bunmrq" // EmporiaCognitoResponse holds the authentication information from Cognito type EmporiaCognitoResponse struct { IdToken *string RefreshToken *string - ExpiresIn *int64 + ExpiresIn int32 } // GenerateTokens creates new auth tokens from credentials func GenerateTokens(credentials EmporiaCredentials) (EmporiaCognitoResponse, error) { + ctx := context.Background() auth := cognito.InitiateAuthInput{ - AuthFlow: aws.String("USER_PASSWORD_AUTH"), - AuthParameters: map[string]*string{ - "USERNAME": aws.String(credentials.Username), - "PASSWORD": aws.String(credentials.Password), + AuthFlow: "USER_PASSWORD_AUTH", + AuthParameters: map[string]string{ + "USERNAME": credentials.Username, + "PASSWORD": credentials.Password, }, - ClientId: aws.String(EmporiaCognitoClientID), + ClientId: &EmporiaCognitoClientID, } - if client, err := createCognitoClient(); err != nil { return EmporiaCognitoResponse{}, err - } else if user, err := client.InitiateAuth(&auth); err != nil { + } else if user, err := client.InitiateAuth(ctx, &auth); err != nil { return EmporiaCognitoResponse{}, err } else { return EmporiaCognitoResponse{ @@ -42,17 +43,17 @@ func GenerateTokens(credentials EmporiaCredentials) (EmporiaCognitoResponse, err // RefreshTokens regenerates auth tokens from the refresh token func RefreshTokens(refreshToken string) (EmporiaCognitoResponse, error) { + ctx := context.Background() auth := cognito.InitiateAuthInput{ - AuthFlow: aws.String("REFRESH_TOKEN_AUTH"), - AuthParameters: map[string]*string{ - "REFRESH_TOKEN": aws.String(refreshToken), + AuthFlow: "REFRESH_TOKEN_AUTH", + AuthParameters: map[string]string{ + "REFRESH_TOKEN": refreshToken, }, - ClientId: aws.String(EmporiaCognitoClientID), + ClientId: &EmporiaCognitoClientID, } - if client, err := createCognitoClient(); err != nil { return EmporiaCognitoResponse{}, err - } else if user, err := client.InitiateAuth(&auth); err != nil { + } else if user, err := client.InitiateAuth(ctx, &auth); err != nil { return EmporiaCognitoResponse{}, err } else { return EmporiaCognitoResponse{ @@ -64,13 +65,11 @@ func RefreshTokens(refreshToken string) (EmporiaCognitoResponse, error) { } // createCognitoClient creates a configured identity provider -func createCognitoClient() (*cognito.CognitoIdentityProvider, error) { - cfg := aws.Config{ - Region: aws.String("us-east-2"), - } - if sess, err := session.NewSession(&cfg); err != nil { - return &cognito.CognitoIdentityProvider{}, err - } else { - return cognito.New(sess), nil +func createCognitoClient() (*cognito.Client, error) { + ctx := context.Background() + config, err := config.LoadDefaultConfig(ctx, config.WithRegion("us-east-2")) + if err != nil { + return &cognito.Client{}, err } + return cognito.NewFromConfig(config), nil } diff --git a/pkg/emporia/config.go b/pkg/emporia/config.go index c58c4e4..171915d 100644 --- a/pkg/emporia/config.go +++ b/pkg/emporia/config.go @@ -48,7 +48,7 @@ func (config *EmporiaConfig) SetTokens(auth EmporiaCognitoResponse) { if auth.RefreshToken != nil { config.Tokens.RefreshToken = *auth.RefreshToken } - lifespan := time.Duration(*auth.ExpiresIn) + lifespan := time.Duration(auth.ExpiresIn) config.Tokens.ExpiresAt = time.Now().Add(time.Second * lifespan).UTC() }