99 lines
2.5 KiB
Go
99 lines
2.5 KiB
Go
package providers
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/options"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func testGiteaProvider(hostname string, opts options.GitHubOptions) *GitHubProvider {
|
|
p := NewGitHubProvider(
|
|
&ProviderData{
|
|
ProviderName: "Gitea",
|
|
LoginURL: &url.URL{},
|
|
RedeemURL: &url.URL{},
|
|
ProfileURL: &url.URL{},
|
|
ValidateURL: &url.URL{Path: "/api/v1/user/emails"},
|
|
Scope: ""},
|
|
opts)
|
|
p.ProviderName = "Gitea"
|
|
|
|
if hostname != "" {
|
|
updateURL(p.Data().LoginURL, hostname)
|
|
updateURL(p.Data().RedeemURL, hostname)
|
|
updateURL(p.Data().ProfileURL, hostname)
|
|
updateURL(p.Data().ValidateURL, hostname)
|
|
}
|
|
return p
|
|
}
|
|
|
|
func testGiteaBackend(payloads map[string][]string) *httptest.Server {
|
|
pathToQueryMap := map[string][]string{
|
|
"/api/v1/repos/oauth2-proxy/oauth2-proxy": {""},
|
|
"/api/v1/repos/oauth2-proxy/oauth2-proxy/collaborators/mbland": {""},
|
|
"/api/v1/user": {""},
|
|
"/api/v1/user/emails": {""},
|
|
"/api/v1/user/orgs": {"page=1&per_page=100", "page=2&per_page=100", "page=3&per_page=100"},
|
|
}
|
|
|
|
return httptest.NewServer(http.HandlerFunc(
|
|
func(w http.ResponseWriter, r *http.Request) {
|
|
query, ok := pathToQueryMap[r.URL.Path]
|
|
validQuery := false
|
|
index := 0
|
|
for i, q := range query {
|
|
if q == r.URL.RawQuery {
|
|
validQuery = true
|
|
index = i
|
|
}
|
|
}
|
|
payload := []string{}
|
|
if ok && validQuery {
|
|
payload, ok = payloads[r.URL.Path]
|
|
}
|
|
if !ok {
|
|
w.WriteHeader(404)
|
|
} else if !validQuery {
|
|
w.WriteHeader(404)
|
|
} else if payload[index] == "" {
|
|
w.WriteHeader(204)
|
|
} else {
|
|
w.WriteHeader(200)
|
|
w.Write([]byte(payload[index]))
|
|
}
|
|
}))
|
|
}
|
|
|
|
func TestGiteaProvider_ValidateSessionWithBaseUrl(t *testing.T) {
|
|
b := testGiteaBackend(map[string][]string{})
|
|
defer b.Close()
|
|
|
|
bURL, _ := url.Parse(b.URL)
|
|
p := testGiteaProvider(bURL.Host, options.GitHubOptions{})
|
|
|
|
session := CreateAuthorizedSession()
|
|
|
|
valid := p.ValidateSession(context.Background(), session)
|
|
assert.False(t, valid)
|
|
}
|
|
|
|
func TestGiteaProvider_ValidateSessionWithUserEmails(t *testing.T) {
|
|
b := testGiteaBackend(map[string][]string{
|
|
"/api/v1/user/emails": {`[ {"email": "michael.bland@gsa.gov", "verified": true, "primary": true} ]`},
|
|
})
|
|
defer b.Close()
|
|
|
|
bURL, _ := url.Parse(b.URL)
|
|
p := testGiteaProvider(bURL.Host, options.GitHubOptions{})
|
|
|
|
session := CreateAuthorizedSession()
|
|
|
|
valid := p.ValidateSession(context.Background(), session)
|
|
assert.True(t, valid)
|
|
}
|