174 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Go
		
	
	
	
package providers
 | 
						|
 | 
						|
import (
 | 
						|
	"io/ioutil"
 | 
						|
	"os"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/options"
 | 
						|
	. "github.com/onsi/gomega"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	clientID     = "bazquux"
 | 
						|
	clientSecret = "xyzzyplugh"
 | 
						|
	providerID   = "providerID"
 | 
						|
 | 
						|
	msIssuerURL = "https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/v2.0/"
 | 
						|
	msKeysURL   = "https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/discovery/v2.0/keys"
 | 
						|
	msAuthURL   = "https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/authorize?p=b2c_1_sign_in"
 | 
						|
	msTokenURL  = "https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/token?p=b2c_1_sign_in"
 | 
						|
)
 | 
						|
 | 
						|
func TestClientSecretFileOptionFails(t *testing.T) {
 | 
						|
	g := NewWithT(t)
 | 
						|
 | 
						|
	providerConfig := options.Provider{
 | 
						|
		ID:               providerID,
 | 
						|
		Type:             "google",
 | 
						|
		ClientID:         clientID,
 | 
						|
		ClientSecretFile: clientSecret,
 | 
						|
	}
 | 
						|
 | 
						|
	p, err := newProviderDataFromConfig(providerConfig)
 | 
						|
	g.Expect(err).ToNot(HaveOccurred())
 | 
						|
	g.Expect(p.ClientSecretFile).To(Equal(clientSecret))
 | 
						|
	g.Expect(p.ClientSecret).To(BeEmpty())
 | 
						|
 | 
						|
	s, err := p.GetClientSecret()
 | 
						|
	g.Expect(err).To(HaveOccurred())
 | 
						|
	g.Expect(s).To(BeEmpty())
 | 
						|
}
 | 
						|
 | 
						|
func TestClientSecretFileOption(t *testing.T) {
 | 
						|
	g := NewWithT(t)
 | 
						|
 | 
						|
	f, err := ioutil.TempFile("", "client_secret_temp_file_")
 | 
						|
	g.Expect(err).ToNot(HaveOccurred())
 | 
						|
 | 
						|
	clientSecretFileName := f.Name()
 | 
						|
 | 
						|
	defer func() {
 | 
						|
		g.Expect(f.Close()).To(Succeed())
 | 
						|
		g.Expect(os.Remove(clientSecretFileName)).To(Succeed())
 | 
						|
	}()
 | 
						|
 | 
						|
	_, err = f.WriteString("testcase")
 | 
						|
	g.Expect(err).ToNot(HaveOccurred())
 | 
						|
 | 
						|
	providerConfig := options.Provider{
 | 
						|
		ID:               providerID,
 | 
						|
		Type:             "google",
 | 
						|
		ClientID:         clientID,
 | 
						|
		ClientSecretFile: clientSecretFileName,
 | 
						|
	}
 | 
						|
 | 
						|
	p, err := newProviderDataFromConfig(providerConfig)
 | 
						|
	g.Expect(err).ToNot(HaveOccurred())
 | 
						|
	g.Expect(p.ClientSecretFile).To(Equal(clientSecretFileName))
 | 
						|
	g.Expect(p.ClientSecret).To(BeEmpty())
 | 
						|
 | 
						|
	s, err := p.GetClientSecret()
 | 
						|
	g.Expect(err).ToNot(HaveOccurred())
 | 
						|
	g.Expect(s).To(Equal("testcase"))
 | 
						|
}
 | 
						|
 | 
						|
func TestSkipOIDCDiscovery(t *testing.T) {
 | 
						|
	g := NewWithT(t)
 | 
						|
	providerConfig := options.Provider{
 | 
						|
		ID:               providerID,
 | 
						|
		Type:             "oidc",
 | 
						|
		ClientID:         clientID,
 | 
						|
		ClientSecretFile: clientSecret,
 | 
						|
		OIDCConfig: options.OIDCOptions{
 | 
						|
			IssuerURL:     msIssuerURL,
 | 
						|
			SkipDiscovery: true,
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	_, err := newProviderDataFromConfig(providerConfig)
 | 
						|
	g.Expect(err).To(MatchError("error building OIDC ProviderVerifier: invalid provider verifier options: missing required setting: jwks-url"))
 | 
						|
 | 
						|
	providerConfig.LoginURL = msAuthURL
 | 
						|
	providerConfig.RedeemURL = msTokenURL
 | 
						|
	providerConfig.OIDCConfig.JwksURL = msKeysURL
 | 
						|
 | 
						|
	_, err = newProviderDataFromConfig(providerConfig)
 | 
						|
	g.Expect(err).ToNot(HaveOccurred())
 | 
						|
}
 | 
						|
 | 
						|
func TestURLsCorrectlyParsed(t *testing.T) {
 | 
						|
	g := NewWithT(t)
 | 
						|
 | 
						|
	providerConfig := options.Provider{
 | 
						|
		ID:               providerID,
 | 
						|
		Type:             "oidc",
 | 
						|
		ClientID:         clientID,
 | 
						|
		ClientSecretFile: clientSecret,
 | 
						|
		LoginURL:         msAuthURL,
 | 
						|
		RedeemURL:        msTokenURL,
 | 
						|
		OIDCConfig: options.OIDCOptions{
 | 
						|
			IssuerURL:     msIssuerURL,
 | 
						|
			SkipDiscovery: true,
 | 
						|
			JwksURL:       msKeysURL,
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	pd, err := newProviderDataFromConfig(providerConfig)
 | 
						|
	g.Expect(err).ToNot(HaveOccurred())
 | 
						|
 | 
						|
	g.Expect(pd.LoginURL.String()).To(Equal(msAuthURL))
 | 
						|
	g.Expect(pd.RedeemURL.String()).To(Equal(msTokenURL))
 | 
						|
}
 | 
						|
 | 
						|
func TestScope(t *testing.T) {
 | 
						|
	g := NewWithT(t)
 | 
						|
 | 
						|
	testCases := []struct {
 | 
						|
		name            string
 | 
						|
		configuredScope string
 | 
						|
		expectedScope   string
 | 
						|
		allowedGroups   []string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			name:            "with no scope provided",
 | 
						|
			configuredScope: "",
 | 
						|
			expectedScope:   "openid email profile",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:            "with no scope provided and groups",
 | 
						|
			configuredScope: "",
 | 
						|
			expectedScope:   "openid email profile groups",
 | 
						|
			allowedGroups:   []string{"foo"},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name:            "with a configured scope provided",
 | 
						|
			configuredScope: "openid",
 | 
						|
			expectedScope:   "openid",
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, tc := range testCases {
 | 
						|
		providerConfig := options.Provider{
 | 
						|
			ID:               providerID,
 | 
						|
			Type:             "oidc",
 | 
						|
			ClientID:         clientID,
 | 
						|
			ClientSecretFile: clientSecret,
 | 
						|
			LoginURL:         msAuthURL,
 | 
						|
			RedeemURL:        msTokenURL,
 | 
						|
			Scope:            tc.configuredScope,
 | 
						|
			AllowedGroups:    tc.allowedGroups,
 | 
						|
			OIDCConfig: options.OIDCOptions{
 | 
						|
				IssuerURL:     msIssuerURL,
 | 
						|
				SkipDiscovery: true,
 | 
						|
				JwksURL:       msKeysURL,
 | 
						|
			},
 | 
						|
		}
 | 
						|
 | 
						|
		pd, err := newProviderDataFromConfig(providerConfig)
 | 
						|
		g.Expect(err).ToNot(HaveOccurred())
 | 
						|
 | 
						|
		g.Expect(pd.Scope).To(Equal(tc.expectedScope))
 | 
						|
	}
 | 
						|
}
 |