2017-09-26 23:31:27 +02:00
package providers
import (
2020-05-06 00:53:33 +09:00
"context"
2017-09-26 23:31:27 +02:00
"net/http"
"net/http/httptest"
"net/url"
"testing"
2022-02-15 11:18:32 +00:00
"github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/options"
2020-09-30 01:44:42 +09:00
"github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/sessions"
2020-05-25 13:08:04 +01:00
. "github.com/onsi/gomega"
2017-09-26 23:31:27 +02:00
"github.com/stretchr/testify/assert"
)
2022-02-15 11:18:32 +00:00
func testGitHubProvider ( hostname string , opts options . GitHubOptions ) * GitHubProvider {
2017-09-26 23:31:27 +02:00
p := NewGitHubProvider (
& ProviderData {
ProviderName : "" ,
LoginURL : & url . URL { } ,
RedeemURL : & url . URL { } ,
ProfileURL : & url . URL { } ,
ValidateURL : & url . URL { } ,
2022-02-15 11:18:32 +00:00
Scope : "" } ,
opts )
2017-09-26 23:31:27 +02:00
if hostname != "" {
updateURL ( p . Data ( ) . LoginURL , hostname )
updateURL ( p . Data ( ) . RedeemURL , hostname )
updateURL ( p . Data ( ) . ProfileURL , hostname )
updateURL ( p . Data ( ) . ValidateURL , hostname )
}
return p
}
2020-05-11 11:02:40 -06:00
func testGitHubBackend ( payloads map [ string ] [ ] string ) * httptest . Server {
2017-07-04 14:36:21 -07:00
pathToQueryMap := map [ string ] [ ] string {
2023-09-14 11:09:57 +02:00
"/" : { "" } ,
"/repos/oauth2-proxy/oauth2-proxy" : { "" } ,
2020-05-11 11:02:40 -06:00
"/repos/oauth2-proxy/oauth2-proxy/collaborators/mbland" : { "" } ,
2018-11-29 14:26:41 +00:00
"/user" : { "" } ,
"/user/emails" : { "" } ,
2019-03-15 08:00:20 -07:00
"/user/orgs" : { "page=1&per_page=100" , "page=2&per_page=100" , "page=3&per_page=100" } ,
2023-09-14 11:09:57 +02:00
// GitHub Enterprise Server API
"/api/v3" : { "" } ,
"/api/v3/user/emails" : { "" } ,
2017-09-26 23:31:27 +02:00
}
return httptest . NewServer ( http . HandlerFunc (
func ( w http . ResponseWriter , r * http . Request ) {
2018-11-29 14:26:41 +00:00
query , ok := pathToQueryMap [ r . URL . Path ]
2017-07-04 14:36:21 -07:00
validQuery := false
index := 0
for i , q := range query {
2018-11-29 14:26:41 +00:00
if q == r . URL . RawQuery {
2017-07-04 14:36:21 -07:00
validQuery = true
index = i
}
}
2020-05-11 11:02:40 -06:00
payload := [ ] string { }
if ok && validQuery {
payload , ok = payloads [ r . URL . Path ]
}
2017-09-26 23:31:27 +02:00
if ! ok {
w . WriteHeader ( 404 )
2017-07-04 14:36:21 -07:00
} else if ! validQuery {
2017-09-26 23:31:27 +02:00
w . WriteHeader ( 404 )
2020-05-11 11:02:40 -06:00
} else if payload [ index ] == "" {
w . WriteHeader ( 204 )
2017-09-26 23:31:27 +02:00
} else {
w . WriteHeader ( 200 )
2017-07-04 14:36:21 -07:00
w . Write ( [ ] byte ( payload [ index ] ) )
2017-09-26 23:31:27 +02:00
}
} ) )
}
2020-05-25 13:08:04 +01:00
func TestNewGitHubProvider ( t * testing . T ) {
g := NewWithT ( t )
// Test that defaults are set when calling for a new provider with nothing set
2022-02-15 11:18:32 +00:00
providerData := NewGitHubProvider ( & ProviderData { } , options . GitHubOptions { } ) . Data ( )
2020-05-25 13:08:04 +01:00
g . Expect ( providerData . ProviderName ) . To ( Equal ( "GitHub" ) )
2023-09-14 11:09:57 +02:00
g . Expect ( providerData . LoginURL . String ( ) ) . To ( Equal ( githubDefaultLoginURL . String ( ) ) )
g . Expect ( providerData . RedeemURL . String ( ) ) . To ( Equal ( githubDefaultRedeemURL . String ( ) ) )
2020-05-25 13:08:04 +01:00
g . Expect ( providerData . ProfileURL . String ( ) ) . To ( Equal ( "" ) )
2023-12-18 11:03:19 +01:00
g . Expect ( providerData . ValidateURL . String ( ) ) . To ( Equal ( "https://api.github.com/" ) )
g . Expect ( providerData . Scope ) . To ( Equal ( "user:email read:org" ) )
2017-09-26 23:31:27 +02:00
}
func TestGitHubProviderOverrides ( t * testing . T ) {
p := NewGitHubProvider (
& ProviderData {
LoginURL : & url . URL {
Scheme : "https" ,
Host : "example.com" ,
Path : "/login/oauth/authorize" } ,
RedeemURL : & url . URL {
Scheme : "https" ,
Host : "example.com" ,
Path : "/login/oauth/access_token" } ,
ValidateURL : & url . URL {
Scheme : "https" ,
Host : "api.example.com" ,
Path : "/" } ,
2022-02-15 11:18:32 +00:00
Scope : "profile" } ,
options . GitHubOptions { } )
2017-09-26 23:31:27 +02:00
assert . NotEqual ( t , nil , p )
assert . Equal ( t , "GitHub" , p . Data ( ) . ProviderName )
assert . Equal ( t , "https://example.com/login/oauth/authorize" ,
p . Data ( ) . LoginURL . String ( ) )
assert . Equal ( t , "https://example.com/login/oauth/access_token" ,
p . Data ( ) . RedeemURL . String ( ) )
assert . Equal ( t , "https://api.example.com/" ,
p . Data ( ) . ValidateURL . String ( ) )
assert . Equal ( t , "profile" , p . Data ( ) . Scope )
}
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getEmail ( t * testing . T ) {
2020-05-11 11:02:40 -06:00
b := testGitHubBackend ( map [ string ] [ ] string {
"/user/emails" : { ` [ { "email": "michael.bland@gsa.gov", "verified": true, "primary": true} ] ` } ,
} )
2017-07-04 14:36:21 -07:00
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host , options . GitHubOptions { } )
2017-07-04 14:36:21 -07:00
2020-01-22 13:57:00 +03:00
session := CreateAuthorizedSession ( )
2020-09-27 13:35:06 -07:00
err := p . getEmail ( context . Background ( ) , session )
assert . NoError ( t , err )
assert . Equal ( t , "michael.bland@gsa.gov" , session . Email )
2017-07-04 14:36:21 -07:00
}
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getEmailNotVerified ( t * testing . T ) {
2020-05-11 11:02:40 -06:00
b := testGitHubBackend ( map [ string ] [ ] string {
2020-09-27 13:35:06 -07:00
"/user/emails" : { ` [ { "email": "michael.bland@gsa.gov", "verified": false, "primary": true} ] ` } ,
2020-05-11 11:02:40 -06:00
} )
2019-03-20 13:52:30 -03:00
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host , options . GitHubOptions { } )
2019-03-20 13:52:30 -03:00
2020-01-22 13:57:00 +03:00
session := CreateAuthorizedSession ( )
2020-09-27 13:35:06 -07:00
err := p . getEmail ( context . Background ( ) , session )
assert . NoError ( t , err )
assert . Empty ( t , session . Email )
2019-03-20 13:52:30 -03:00
}
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getEmailWithOrg ( t * testing . T ) {
2020-05-11 11:02:40 -06:00
b := testGitHubBackend ( map [ string ] [ ] string {
"/user/emails" : { ` [ { "email": "michael.bland@gsa.gov", "verified": true, "primary": true} ] ` } ,
"/user/orgs" : {
` [ { "login":"testorg"} ] ` ,
` [ { "login":"testorg1"} ] ` ,
` [ ] ` ,
} ,
2017-07-04 14:36:21 -07:00
} )
2017-09-26 23:31:27 +02:00
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host ,
options . GitHubOptions {
Org : "testorg1" ,
} ,
)
2017-09-26 23:31:27 +02:00
2020-01-22 13:57:00 +03:00
session := CreateAuthorizedSession ( )
2020-09-27 13:35:06 -07:00
err := p . getEmail ( context . Background ( ) , session )
assert . NoError ( t , err )
assert . Equal ( t , "michael.bland@gsa.gov" , session . Email )
2017-09-26 23:31:27 +02:00
}
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getEmailWithWriteAccessToPublicRepo ( t * testing . T ) {
2020-05-11 11:02:40 -06:00
b := testGitHubBackend ( map [ string ] [ ] string {
"/repo/oauth2-proxy/oauth2-proxy" : { ` { "permissions": { "pull": true, "push": true}, "private": false} ` } ,
"/user/emails" : { ` [ { "email": "michael.bland@gsa.gov", "verified": true, "primary": true} ] ` } ,
} )
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host ,
options . GitHubOptions {
Repo : "oauth2-proxy/oauth2-proxy" ,
Token : "token" ,
} ,
)
2020-05-11 11:02:40 -06:00
session := CreateAuthorizedSession ( )
2020-09-27 13:35:06 -07:00
err := p . getEmail ( context . Background ( ) , session )
assert . NoError ( t , err )
assert . Equal ( t , "michael.bland@gsa.gov" , session . Email )
2020-05-11 11:02:40 -06:00
}
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getEmailWithReadOnlyAccessToPrivateRepo ( t * testing . T ) {
2020-05-11 11:02:40 -06:00
b := testGitHubBackend ( map [ string ] [ ] string {
"/repo/oauth2-proxy/oauth2-proxy" : { ` { "permissions": { "pull": true, "push": false}, "private": true} ` } ,
"/user/emails" : { ` [ { "email": "michael.bland@gsa.gov", "verified": true, "primary": true} ] ` } ,
} )
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host ,
options . GitHubOptions {
Repo : "oauth2-proxy/oauth2-proxy" ,
Token : "token" ,
} ,
)
2020-05-11 11:02:40 -06:00
session := CreateAuthorizedSession ( )
2020-09-27 13:35:06 -07:00
err := p . getEmail ( context . Background ( ) , session )
assert . NoError ( t , err )
assert . Equal ( t , "michael.bland@gsa.gov" , session . Email )
2020-05-11 11:02:40 -06:00
}
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getEmailWithWriteAccessToPrivateRepo ( t * testing . T ) {
2020-05-11 11:02:40 -06:00
b := testGitHubBackend ( map [ string ] [ ] string {
"/repo/oauth2-proxy/oauth2-proxy" : { ` { "permissions": { "pull": true, "push": true}, "private": true} ` } ,
"/user/emails" : { ` [ { "email": "michael.bland@gsa.gov", "verified": true, "primary": true} ] ` } ,
} )
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host ,
options . GitHubOptions {
Repo : "oauth2-proxy/oauth2-proxy" ,
Token : "token" ,
} ,
)
2020-05-11 11:02:40 -06:00
session := CreateAuthorizedSession ( )
2020-09-27 13:35:06 -07:00
err := p . getEmail ( context . Background ( ) , session )
assert . NoError ( t , err )
assert . Equal ( t , "michael.bland@gsa.gov" , session . Email )
2020-05-11 11:02:40 -06:00
}
2023-12-18 11:03:19 +01:00
func TestGitHubProvider_checkRestrictionsWithNoAccessToPrivateRepo ( t * testing . T ) {
2020-05-11 11:02:40 -06:00
b := testGitHubBackend ( map [ string ] [ ] string {
2022-05-25 15:05:12 -04:00
"/repos/oauth2-proxy/oauth2-proxy" : { ` { } ` } ,
2020-05-11 11:02:40 -06:00
} )
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host ,
options . GitHubOptions {
Repo : "oauth2-proxy/oauth2-proxy" ,
} ,
)
2020-05-11 11:02:40 -06:00
session := CreateAuthorizedSession ( )
2023-12-18 11:03:19 +01:00
err := p . checkRestrictions ( context . Background ( ) , session )
assert . Error ( t , err )
2020-09-27 13:35:06 -07:00
assert . Empty ( t , session . Email )
2020-05-11 11:02:40 -06:00
}
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getEmailWithToken ( t * testing . T ) {
2020-05-11 11:02:40 -06:00
b := testGitHubBackend ( map [ string ] [ ] string {
"/user/emails" : { ` [ { "email": "michael.bland@gsa.gov", "verified": true, "primary": true} ] ` } ,
} )
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host ,
options . GitHubOptions {
Repo : "oauth2-proxy/oauth2-proxy" ,
Token : "token" ,
} ,
)
2020-05-11 11:02:40 -06:00
session := CreateAuthorizedSession ( )
2020-09-27 13:35:06 -07:00
err := p . getEmail ( context . Background ( ) , session )
assert . NoError ( t , err )
assert . Equal ( t , "michael.bland@gsa.gov" , session . Email )
2020-05-11 11:02:40 -06:00
}
2017-09-26 23:31:27 +02:00
// Note that trying to trigger the "failed building request" case is not
// practical, since the only way it can fail is if the URL fails to parse.
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getEmailFailedRequest ( t * testing . T ) {
2020-05-11 11:02:40 -06:00
b := testGitHubBackend ( map [ string ] [ ] string { } )
2017-09-26 23:31:27 +02:00
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host , options . GitHubOptions { } )
2017-09-26 23:31:27 +02:00
// We'll trigger a request failure by using an unexpected access
// token. Alternatively, we could allow the parsing of the payload as
// JSON to fail.
2019-05-05 13:33:13 +01:00
session := & sessions . SessionState { AccessToken : "unexpected_access_token" }
2020-09-27 13:35:06 -07:00
err := p . getEmail ( context . Background ( ) , session )
assert . Error ( t , err )
assert . Empty ( t , session . Email )
2017-09-26 23:31:27 +02:00
}
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getEmailNotPresentInPayload ( t * testing . T ) {
2020-05-11 11:02:40 -06:00
b := testGitHubBackend ( map [ string ] [ ] string {
"/user/emails" : { ` { "foo": "bar"} ` } ,
} )
2017-09-26 23:31:27 +02:00
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host , options . GitHubOptions { } )
2017-09-26 23:31:27 +02:00
2020-01-22 13:57:00 +03:00
session := CreateAuthorizedSession ( )
2020-09-27 13:35:06 -07:00
err := p . getEmail ( context . Background ( ) , session )
assert . Error ( t , err )
assert . Empty ( t , session . Email )
2017-09-26 23:31:27 +02:00
}
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getUser ( t * testing . T ) {
2020-05-11 11:02:40 -06:00
b := testGitHubBackend ( map [ string ] [ ] string {
"/user" : { ` { "email": "michael.bland@gsa.gov", "login": "mbland"} ` } ,
} )
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host , options . GitHubOptions { } )
2020-05-11 11:02:40 -06:00
session := CreateAuthorizedSession ( )
2020-09-27 13:35:06 -07:00
err := p . getUser ( context . Background ( ) , session )
assert . NoError ( t , err )
assert . Equal ( t , "mbland" , session . User )
2020-05-11 11:02:40 -06:00
}
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getUserWithRepoAndToken ( t * testing . T ) {
2020-05-11 11:02:40 -06:00
b := testGitHubBackend ( map [ string ] [ ] string {
"/user" : { ` { "email": "michael.bland@gsa.gov", "login": "mbland"} ` } ,
"/repos/oauth2-proxy/oauth2-proxy/collaborators/mbland" : { "" } ,
} )
2017-09-26 23:31:27 +02:00
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host ,
options . GitHubOptions {
Repo : "oauth2-proxy/oauth2-proxy" ,
Token : "token" ,
} ,
)
2017-09-26 23:31:27 +02:00
2020-01-22 13:57:00 +03:00
session := CreateAuthorizedSession ( )
2020-09-27 13:35:06 -07:00
err := p . getUser ( context . Background ( ) , session )
assert . NoError ( t , err )
assert . Equal ( t , "mbland" , session . User )
2017-09-26 23:31:27 +02:00
}
2020-05-11 11:02:40 -06:00
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getUserWithRepoAndTokenWithoutPushAccess ( t * testing . T ) {
2020-05-11 11:02:40 -06:00
b := testGitHubBackend ( map [ string ] [ ] string { } )
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host ,
options . GitHubOptions {
Repo : "oauth2-proxy/oauth2-proxy" ,
Token : "token" ,
} ,
)
2020-05-11 11:02:40 -06:00
session := CreateAuthorizedSession ( )
2020-09-27 13:35:06 -07:00
err := p . getUser ( context . Background ( ) , session )
assert . Error ( t , err )
assert . Empty ( t , session . User )
2020-05-11 11:02:40 -06:00
}
2020-06-02 04:02:07 +09:00
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getEmailWithUsername ( t * testing . T ) {
2020-06-02 04:02:07 +09:00
b := testGitHubBackend ( map [ string ] [ ] string {
"/user" : { ` { "email": "michael.bland@gsa.gov", "login": "mbland"} ` } ,
"/user/emails" : { ` [ { "email": "michael.bland@gsa.gov", "verified": true, "primary": true} ] ` } ,
} )
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host ,
options . GitHubOptions {
Users : [ ] string { "mbland" , "octocat" } ,
} ,
)
2020-06-02 04:02:07 +09:00
session := CreateAuthorizedSession ( )
2020-09-27 13:35:06 -07:00
err := p . getEmail ( context . Background ( ) , session )
assert . NoError ( t , err )
assert . Equal ( t , "michael.bland@gsa.gov" , session . Email )
2020-06-02 04:02:07 +09:00
}
2023-12-18 11:03:19 +01:00
func TestGitHubProvider_checkRestrictionsWithNotAllowedUsername ( t * testing . T ) {
2020-06-02 04:02:07 +09:00
b := testGitHubBackend ( map [ string ] [ ] string {
"/user" : { ` { "email": "michael.bland@gsa.gov", "login": "mbland"} ` } ,
"/user/emails" : { ` [ { "email": "michael.bland@gsa.gov", "verified": true, "primary": true} ] ` } ,
} )
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host ,
options . GitHubOptions {
Users : [ ] string { "octocat" } ,
} ,
)
2020-06-02 04:02:07 +09:00
session := CreateAuthorizedSession ( )
2023-12-18 11:03:19 +01:00
err := p . checkRestrictions ( context . Background ( ) , session )
2020-09-27 13:35:06 -07:00
assert . Error ( t , err )
assert . Empty ( t , session . Email )
2020-06-02 04:02:07 +09:00
}
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getEmailWithUsernameAndNotBelongToOrg ( t * testing . T ) {
2020-06-02 04:02:07 +09:00
b := testGitHubBackend ( map [ string ] [ ] string {
"/user" : { ` { "email": "michael.bland@gsa.gov", "login": "mbland"} ` } ,
"/user/emails" : { ` [ { "email": "michael.bland@gsa.gov", "verified": true, "primary": true} ] ` } ,
"/user/orgs" : {
` [ { "login":"testorg"} ] ` ,
` [ ] ` ,
} ,
} )
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host ,
options . GitHubOptions {
Org : "not_belog_to" ,
Users : [ ] string { "mbland" } ,
} ,
)
2020-06-02 04:02:07 +09:00
session := CreateAuthorizedSession ( )
2020-09-27 13:35:06 -07:00
err := p . getEmail ( context . Background ( ) , session )
assert . NoError ( t , err )
assert . Equal ( t , "michael.bland@gsa.gov" , session . Email )
2020-06-02 04:02:07 +09:00
}
2020-09-27 13:35:06 -07:00
func TestGitHubProvider_getEmailWithUsernameAndNoAccessToPrivateRepo ( t * testing . T ) {
2020-06-02 04:02:07 +09:00
b := testGitHubBackend ( map [ string ] [ ] string {
"/user" : { ` { "email": "michael.bland@gsa.gov", "login": "mbland"} ` } ,
"/user/emails" : { ` [ { "email": "michael.bland@gsa.gov", "verified": true, "primary": true} ] ` } ,
2020-09-27 13:35:06 -07:00
"/repo/oauth2-proxy/oauth2-proxy" : { ` { } ` } ,
2020-06-02 04:02:07 +09:00
} )
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
2022-02-15 11:18:32 +00:00
p := testGitHubProvider ( bURL . Host ,
options . GitHubOptions {
Repo : "oauth2-proxy/oauth2-proxy" ,
Token : "token" ,
Users : [ ] string { "mbland" } ,
} ,
)
2020-06-02 04:02:07 +09:00
session := CreateAuthorizedSession ( )
2020-09-27 13:35:06 -07:00
err := p . getEmail ( context . Background ( ) , session )
assert . NoError ( t , err )
assert . Equal ( t , "michael.bland@gsa.gov" , session . Email )
2020-06-02 04:02:07 +09:00
}
2023-09-14 11:09:57 +02:00
func TestGitHubProvider_ValidateSessionWithBaseUrl ( t * testing . T ) {
b := testGitHubBackend ( map [ string ] [ ] string {
"/" : { ` [] ` } ,
} )
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
p := testGitHubProvider ( bURL . Host , options . GitHubOptions { } )
session := CreateAuthorizedSession ( )
valid := p . ValidateSession ( context . Background ( ) , session )
assert . True ( t , valid )
}
func TestGitHubProvider_ValidateSessionWithEnterpriseBaseUrl ( t * testing . T ) {
b := testGitHubBackend ( map [ string ] [ ] string {
"/api/v3" : { ` [] ` } ,
} )
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
p := testGitHubProvider ( bURL . Host , options . GitHubOptions { } )
p . ValidateURL . Path = "/api/v3"
session := CreateAuthorizedSession ( )
valid := p . ValidateSession ( context . Background ( ) , session )
assert . True ( t , valid )
}
func TestGitHubProvider_ValidateSessionWithUserEmails ( t * testing . T ) {
b := testGitHubBackend ( map [ string ] [ ] string {
"/user/emails" : { ` [ { "email": "michael.bland@gsa.gov", "verified": true, "primary": true} ] ` } ,
} )
defer b . Close ( )
bURL , _ := url . Parse ( b . URL )
p := testGitHubProvider ( bURL . Host , options . GitHubOptions { } )
p . ValidateURL . Path = "/user/emails"
session := CreateAuthorizedSession ( )
valid := p . ValidateSession ( context . Background ( ) , session )
assert . True ( t , valid )
}