Skip to content

Commit 260588e

Browse files
[Enhancement] Add EmailVerified field for Apple's ID token (#558)
* [Enhancement] Add EmailVerified field for Apple's ID token * [Fix] Include "email_verified" field in Apple's unit test case. * [Fix] Add missing BooleanString validation in TestIDTokenClaimsUnmarshal method * [Fix] Fill up test payload
1 parent eb002ea commit 260588e

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

providers/apple/session.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ type ID struct {
2424
Sub string `json:"sub"`
2525
Email string `json:"email"`
2626
IsPrivateEmail bool `json:"is_private_email"`
27+
EmailVerified bool `json:"email_verified"`
2728
}
2829

2930
type Session struct {
@@ -52,6 +53,7 @@ type IDTokenClaims struct {
5253
AuthTime int `json:"auth_time"`
5354
Email string `json:"email"`
5455
IsPrivateEmail BoolString `json:"is_private_email"`
56+
EmailVerified BoolString `json:"email_verified,omitempty"`
5557
}
5658

5759
func (s *Session) Authorize(provider goth.Provider, params goth.Params) (string, error) {
@@ -124,6 +126,7 @@ func (s *Session) Authorize(provider goth.Provider, params goth.Params) (string,
124126
Sub: idToken.Claims.(*IDTokenClaims).Subject,
125127
Email: idToken.Claims.(*IDTokenClaims).Email,
126128
IsPrivateEmail: idToken.Claims.(*IDTokenClaims).IsPrivateEmail.Value(),
129+
EmailVerified: idToken.Claims.(*IDTokenClaims).EmailVerified.Value(),
127130
}
128131
}
129132

providers/apple/session_test.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func Test_ToJSON(t *testing.T) {
3737
s := &Session{}
3838

3939
data := s.Marshal()
40-
a.Equal(data, `{"AuthURL":"","AccessToken":"","RefreshToken":"","ExpiresAt":"0001-01-01T00:00:00Z","sub":"","email":"","is_private_email":false}`)
40+
a.Equal(data, `{"AuthURL":"","AccessToken":"","RefreshToken":"","ExpiresAt":"0001-01-01T00:00:00Z","sub":"","email":"","is_private_email":false,"email_verified":false}`)
4141
}
4242

4343
func Test_String(t *testing.T) {
@@ -59,23 +59,30 @@ func TestIDTokenClaimsUnmarshal(t *testing.T) {
5959
}{
6060
{
6161
name: "'is_private_email' claim is a string",
62-
idToken: `{"AuthURL":"","AccessToken":"","RefreshToken":"","ExpiresAt":"0001-01-01T00:00:00Z","sub":"","email":"[email protected]","is_private_email":"true"}`,
62+
idToken: `{"AuthURL":"","AccessToken":"","RefreshToken":"","ExpiresAt":"0001-01-01T00:00:00Z","sub":"","email":"[email protected]","is_private_email":"true", "email_verified":"true"}`,
6363
expectedClaims: IDTokenClaims{
6464
6565
IsPrivateEmail: BoolString{
6666
StringValue: "true",
6767
},
68+
EmailVerified: BoolString{
69+
StringValue: "true",
70+
},
6871
},
6972
},
7073
{
7174
name: "'is_private_email' claim is a boolean",
72-
idToken: `{"AuthURL":"","AccessToken":"","RefreshToken":"","ExpiresAt":"0001-01-01T00:00:00Z","sub":"","email":"[email protected]","is_private_email":true}`,
75+
idToken: `{"AuthURL":"","AccessToken":"","RefreshToken":"","ExpiresAt":"0001-01-01T00:00:00Z","sub":"","email":"[email protected]","is_private_email":true,"email_verified":true}`,
7376
expectedClaims: IDTokenClaims{
7477
7578
IsPrivateEmail: BoolString{
7679
BoolValue: true,
7780
IsValidBool: true,
7881
},
82+
EmailVerified: BoolString{
83+
BoolValue: true,
84+
IsValidBool: true,
85+
},
7986
},
8087
},
8188
}

0 commit comments

Comments
 (0)