AWS Cognito will return email_verified from /userinfo endpoint as string. This fix will accept proper boolean values as well as string values. Links for reference: https://forums.aws.amazon.com/thread.jspa?messageID=949441󧳁 https://discuss.elastic.co/t/openid-error-after-authenticating-against-aws-cognito/206018/11
83 lines
2.1 KiB
Go
83 lines
2.1 KiB
Go
package oidc
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestUserInfoMarshal(t *testing.T) {
|
|
userinfo := NewUserInfo()
|
|
userinfo.SetSubject("test")
|
|
userinfo.SetAddress(NewUserInfoAddress("Test 789\nPostfach 2", "", "", "", "", ""))
|
|
userinfo.SetEmail("test", true)
|
|
userinfo.SetPhone("0791234567", true)
|
|
userinfo.SetName("Test")
|
|
userinfo.AppendClaims("private_claim", "test")
|
|
|
|
marshal, err := json.Marshal(userinfo)
|
|
out := NewUserInfo()
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, json.Unmarshal(marshal, out))
|
|
assert.Equal(t, userinfo.GetAddress(), out.GetAddress())
|
|
expected, err := json.Marshal(out)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, expected, marshal)
|
|
}
|
|
|
|
func TestUserInfoEmailVerifiedUnmarshal(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
t.Run("unmarsha email_verified from json bool true", func(t *testing.T) {
|
|
jsonBool := []byte(`{"email": "my@email.com", "email_verified": true}`)
|
|
|
|
var uie userInfoEmail
|
|
|
|
err := json.Unmarshal(jsonBool, &uie)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, userInfoEmail{
|
|
Email: "my@email.com",
|
|
EmailVerified: true,
|
|
}, uie)
|
|
})
|
|
|
|
t.Run("unmarsha email_verified from json string true", func(t *testing.T) {
|
|
jsonBool := []byte(`{"email": "my@email.com", "email_verified": "true"}`)
|
|
|
|
var uie userInfoEmail
|
|
|
|
err := json.Unmarshal(jsonBool, &uie)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, userInfoEmail{
|
|
Email: "my@email.com",
|
|
EmailVerified: true,
|
|
}, uie)
|
|
})
|
|
|
|
t.Run("unmarsha email_verified from json bool false", func(t *testing.T) {
|
|
jsonBool := []byte(`{"email": "my@email.com", "email_verified": false}`)
|
|
|
|
var uie userInfoEmail
|
|
|
|
err := json.Unmarshal(jsonBool, &uie)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, userInfoEmail{
|
|
Email: "my@email.com",
|
|
EmailVerified: false,
|
|
}, uie)
|
|
})
|
|
|
|
t.Run("unmarsha email_verified from json string false", func(t *testing.T) {
|
|
jsonBool := []byte(`{"email": "my@email.com", "email_verified": "false"}`)
|
|
|
|
var uie userInfoEmail
|
|
|
|
err := json.Unmarshal(jsonBool, &uie)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, userInfoEmail{
|
|
Email: "my@email.com",
|
|
EmailVerified: false,
|
|
}, uie)
|
|
})
|
|
}
|