274 lines
6.1 KiB
Go
274 lines
6.1 KiB
Go
package oauth2_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
clog "github.com/influxdata/chronograf/log"
|
|
"github.com/influxdata/chronograf/oauth2"
|
|
)
|
|
|
|
func TestGenericGroup_withNotEmail(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
response := struct {
|
|
Email string `json:"not-email"`
|
|
}{
|
|
"martymcfly@pinheads.rok",
|
|
}
|
|
mockAPI := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
|
|
if r.URL.Path != "/" {
|
|
rw.WriteHeader(http.StatusNotFound)
|
|
return
|
|
}
|
|
enc := json.NewEncoder(rw)
|
|
|
|
rw.WriteHeader(http.StatusOK)
|
|
_ = enc.Encode(response)
|
|
}))
|
|
defer mockAPI.Close()
|
|
|
|
logger := clog.New(clog.ParseLevel("debug"))
|
|
prov := oauth2.Generic{
|
|
Logger: logger,
|
|
APIURL: mockAPI.URL,
|
|
APIKey: "not-email",
|
|
}
|
|
tt, err := oauth2.NewTestTripper(logger, mockAPI, http.DefaultTransport)
|
|
if err != nil {
|
|
t.Fatal("Error initializing TestTripper: err:", err)
|
|
}
|
|
|
|
tc := &http.Client{
|
|
Transport: tt,
|
|
}
|
|
|
|
got, err := prov.Group(tc)
|
|
if err != nil {
|
|
t.Fatal("Unexpected error while retrieiving PrincipalID: err:", err)
|
|
}
|
|
|
|
want := "pinheads.rok"
|
|
if got != want {
|
|
t.Fatal("Retrieved group was not as expected. Want:", want, "Got:", got)
|
|
}
|
|
}
|
|
|
|
func TestGenericGroup_withEmail(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
response := struct {
|
|
Email string `json:"email"`
|
|
}{
|
|
"martymcfly@pinheads.rok",
|
|
}
|
|
mockAPI := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
|
|
if r.URL.Path != "/" {
|
|
rw.WriteHeader(http.StatusNotFound)
|
|
return
|
|
}
|
|
enc := json.NewEncoder(rw)
|
|
|
|
rw.WriteHeader(http.StatusOK)
|
|
_ = enc.Encode(response)
|
|
}))
|
|
defer mockAPI.Close()
|
|
|
|
logger := clog.New(clog.ParseLevel("debug"))
|
|
prov := oauth2.Generic{
|
|
Logger: logger,
|
|
APIURL: mockAPI.URL,
|
|
APIKey: "email",
|
|
}
|
|
tt, err := oauth2.NewTestTripper(logger, mockAPI, http.DefaultTransport)
|
|
if err != nil {
|
|
t.Fatal("Error initializing TestTripper: err:", err)
|
|
}
|
|
|
|
tc := &http.Client{
|
|
Transport: tt,
|
|
}
|
|
|
|
got, err := prov.Group(tc)
|
|
if err != nil {
|
|
t.Fatal("Unexpected error while retrieiving PrincipalID: err:", err)
|
|
}
|
|
|
|
want := "pinheads.rok"
|
|
if got != want {
|
|
t.Fatal("Retrieved group was not as expected. Want:", want, "Got:", got)
|
|
}
|
|
}
|
|
|
|
func TestGenericPrincipalID(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
response := struct {
|
|
Email string `json:"email"`
|
|
}{
|
|
"martymcfly@pinheads.rok",
|
|
}
|
|
mockAPI := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
|
|
if r.URL.Path != "/" {
|
|
rw.WriteHeader(http.StatusNotFound)
|
|
return
|
|
}
|
|
enc := json.NewEncoder(rw)
|
|
|
|
rw.WriteHeader(http.StatusOK)
|
|
_ = enc.Encode(response)
|
|
}))
|
|
defer mockAPI.Close()
|
|
|
|
logger := clog.New(clog.ParseLevel("debug"))
|
|
prov := oauth2.Generic{
|
|
Logger: logger,
|
|
APIURL: mockAPI.URL,
|
|
APIKey: "email",
|
|
}
|
|
tt, err := oauth2.NewTestTripper(logger, mockAPI, http.DefaultTransport)
|
|
if err != nil {
|
|
t.Fatal("Error initializing TestTripper: err:", err)
|
|
}
|
|
|
|
tc := &http.Client{
|
|
Transport: tt,
|
|
}
|
|
|
|
got, err := prov.PrincipalID(tc)
|
|
if err != nil {
|
|
t.Fatal("Unexpected error while retrieiving PrincipalID: err:", err)
|
|
}
|
|
|
|
want := "martymcfly@pinheads.rok"
|
|
if got != want {
|
|
t.Fatal("Retrieved email was not as expected. Want:", want, "Got:", got)
|
|
}
|
|
}
|
|
|
|
func TestGenericPrincipalIDDomain(t *testing.T) {
|
|
t.Parallel()
|
|
expectedEmail := []struct {
|
|
Email string `json:"email"`
|
|
Primary bool `json:"primary"`
|
|
Verified bool `json:"verified"`
|
|
}{
|
|
{"martymcfly@pinheads.rok", true, false},
|
|
}
|
|
mockAPI := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
|
|
if r.URL.Path == "/" {
|
|
enc := json.NewEncoder(rw)
|
|
rw.WriteHeader(http.StatusOK)
|
|
_ = enc.Encode(struct{}{})
|
|
return
|
|
}
|
|
if r.URL.Path == "/emails" {
|
|
enc := json.NewEncoder(rw)
|
|
rw.WriteHeader(http.StatusOK)
|
|
_ = enc.Encode(expectedEmail)
|
|
return
|
|
}
|
|
|
|
rw.WriteHeader(http.StatusNotFound)
|
|
}))
|
|
defer mockAPI.Close()
|
|
|
|
logger := clog.New(clog.ParseLevel("debug"))
|
|
prov := oauth2.Generic{
|
|
Logger: logger,
|
|
Domains: []string{"pinheads.rok"},
|
|
}
|
|
tt, err := oauth2.NewTestTripper(logger, mockAPI, http.DefaultTransport)
|
|
if err != nil {
|
|
t.Fatal("Error initializing TestTripper: err:", err)
|
|
}
|
|
|
|
tc := &http.Client{
|
|
Transport: tt,
|
|
}
|
|
|
|
got, err := prov.PrincipalID(tc)
|
|
if err != nil {
|
|
t.Fatal("Unexpected error while retrieiving PrincipalID: err:", err)
|
|
}
|
|
want := "martymcfly@pinheads.rok"
|
|
if got != want {
|
|
t.Fatal("Retrieved email was not as expected. Want:", want, "Got:", got)
|
|
}
|
|
}
|
|
|
|
func TestGenericPrincipalIDDomain_BitBucket(t *testing.T) {
|
|
// Test of https://github.com/influxdata/chronograf/issues/5399
|
|
t.Parallel()
|
|
expectedGroup := "xyz.io"
|
|
expectedPrincipalID := "pavel.zavora@xyz.io"
|
|
emailsResponse := `{
|
|
"pagelen": 10,
|
|
"values": [
|
|
{
|
|
"is_primary": true,
|
|
"is_confirmed": true,
|
|
"type": "email",
|
|
"email": "pavel.zavora@xyz.io",
|
|
"links": {
|
|
"self": {
|
|
"href": "https://api.bitbucket.org/2.0/user/emails/pavel.zavora@xyz.io"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"page": 1,
|
|
"size": 1
|
|
}`
|
|
|
|
mockAPI := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
|
|
if r.URL.Path == "/" {
|
|
enc := json.NewEncoder(rw)
|
|
rw.WriteHeader(http.StatusOK)
|
|
_ = enc.Encode(struct{}{})
|
|
return
|
|
}
|
|
if r.URL.Path == "/emails" {
|
|
rw.WriteHeader(http.StatusOK)
|
|
rw.Write([]byte(emailsResponse))
|
|
return
|
|
}
|
|
|
|
rw.WriteHeader(http.StatusNotFound)
|
|
}))
|
|
defer mockAPI.Close()
|
|
|
|
logger := clog.New(clog.ParseLevel("debug"))
|
|
prov := oauth2.Generic{
|
|
Logger: logger,
|
|
Domains: []string{expectedGroup},
|
|
}
|
|
tt, err := oauth2.NewTestTripper(logger, mockAPI, http.DefaultTransport)
|
|
if err != nil {
|
|
t.Fatal("Error initializing TestTripper: err:", err)
|
|
}
|
|
|
|
tc := &http.Client{
|
|
Transport: tt,
|
|
}
|
|
|
|
got, err := prov.PrincipalID(tc)
|
|
if err != nil {
|
|
t.Fatal("Unexpected error while retrieiving PrincipalID: err:", err)
|
|
}
|
|
if got != expectedPrincipalID {
|
|
t.Fatal("Retrieved email was not as expected. Want:", expectedPrincipalID, "Got:", got)
|
|
}
|
|
|
|
group, err := prov.Group(tc)
|
|
if err != nil {
|
|
t.Fatal("Unexpected error while retrieiving PrincipalID: err:", err)
|
|
}
|
|
if group != expectedGroup {
|
|
t.Fatal("Retrieved group was not as expected. Want:", expectedGroup, "Got:", group)
|
|
}
|
|
|
|
}
|