Skip to content

Commit

Permalink
Merge pull request #31 from ploxiln/github_email_verified
Browse files Browse the repository at this point in the history
GitHub provider: check email is both primary and verified
  • Loading branch information
ploxiln authored Mar 26, 2019
2 parents 7452495 + 947a0fa commit 84d761c
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 6 deletions.
7 changes: 4 additions & 3 deletions providers/github.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,8 +206,9 @@ func (p *GitHubProvider) hasOrgAndTeam(accessToken string) (bool, error) {
func (p *GitHubProvider) GetEmailAddress(s *SessionState) (string, error) {

var emails []struct {
Email string `json:"email"`
Primary bool `json:"primary"`
Email string `json:"email"`
Primary bool `json:"primary"`
Verified bool `json:"verified"`
}

// if we require an Org or Team, check that first
Expand Down Expand Up @@ -252,7 +253,7 @@ func (p *GitHubProvider) GetEmailAddress(s *SessionState) (string, error) {
}

for _, email := range emails {
if email.Primary {
if email.Primary && email.Verified {
return email.Email, nil
}
}
Expand Down
19 changes: 16 additions & 3 deletions providers/github_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ func TestGitHubProviderOverrides(t *testing.T) {
}

func TestGitHubProviderGetEmailAddress(t *testing.T) {
b := testGitHubBackend([]string{`[ {"email": "michael.bland@gsa.gov", "primary": true} ]`})
b := testGitHubBackend([]string{`[ {"email": "michael.bland@gsa.gov", "verified": true, "primary": true} ]`})
defer b.Close()

bURL, _ := url.Parse(b.URL)
Expand All @@ -110,10 +110,23 @@ func TestGitHubProviderGetEmailAddress(t *testing.T) {
assert.Equal(t, "michael.bland@gsa.gov", email)
}

func TestGitHubProviderGetEmailAddressNotVerified(t *testing.T) {
b := testGitHubBackend([]string{`[ {"email": "michael.bland@gsa.gov", "verified": false, "primary": true} ]`})
defer b.Close()

bURL, _ := url.Parse(b.URL)
p := testGitHubProvider(bURL.Host)

session := &SessionState{AccessToken: "imaginary_access_token"}
email, err := p.GetEmailAddress(session)
assert.Equal(t, nil, err)
assert.Empty(t, "", email)
}

func TestGitHubProviderGetEmailAddressWithOrg(t *testing.T) {
b := testGitHubBackend([]string{
`[ {"email": "michael.bland@gsa.gov", "primary": true, "login":"testorg"} ]`,
`[ {"email": "michael.bland1@gsa.gov", "primary": true, "login":"testorg1"} ]`,
`[ {"email": "michael.bland@gsa.gov", "primary": true, "verified": true, "login":"testorg"} ]`,
`[ {"email": "michael.bland1@gsa.gov", "primary": true, "verified": true, "login":"testorg1"} ]`,
`[ ]`,
})
defer b.Close()
Expand Down

0 comments on commit 84d761c

Please sign in to comment.