126 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
package validation
 | 
						|
 | 
						|
import (
 | 
						|
	. "github.com/onsi/ginkgo"
 | 
						|
	. "github.com/onsi/ginkgo/extensions/table"
 | 
						|
	. "github.com/onsi/gomega"
 | 
						|
 | 
						|
	"github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/options"
 | 
						|
)
 | 
						|
 | 
						|
var _ = Describe("Allowlist", func() {
 | 
						|
	type validateRoutesTableInput struct {
 | 
						|
		routes     []string
 | 
						|
		errStrings []string
 | 
						|
	}
 | 
						|
 | 
						|
	type validateRegexesTableInput struct {
 | 
						|
		regexes    []string
 | 
						|
		errStrings []string
 | 
						|
	}
 | 
						|
 | 
						|
	type validateTrustedIPsTableInput struct {
 | 
						|
		trustedIPs []string
 | 
						|
		errStrings []string
 | 
						|
	}
 | 
						|
 | 
						|
	DescribeTable("validateRoutes",
 | 
						|
		func(r *validateRoutesTableInput) {
 | 
						|
			opts := &options.Options{
 | 
						|
				SkipAuthRoutes: r.routes,
 | 
						|
			}
 | 
						|
			Expect(validateRoutes(opts)).To(ConsistOf(r.errStrings))
 | 
						|
		},
 | 
						|
		Entry("Valid regex routes", &validateRoutesTableInput{
 | 
						|
			routes: []string{
 | 
						|
				"/foo",
 | 
						|
				"POST=/foo/bar",
 | 
						|
				"PUT=^/foo/bar$",
 | 
						|
				"DELETE=/crazy/(?:regex)?/[^/]+/stuff$",
 | 
						|
			},
 | 
						|
			errStrings: []string{},
 | 
						|
		}),
 | 
						|
		Entry("Bad regexes do not compile", &validateRoutesTableInput{
 | 
						|
			routes: []string{
 | 
						|
				"POST=/(foo",
 | 
						|
				"OPTIONS=/foo/bar)",
 | 
						|
				"GET=^]/foo/bar[$",
 | 
						|
				"GET=^]/foo/bar[$",
 | 
						|
			},
 | 
						|
			errStrings: []string{
 | 
						|
				"error compiling regex //(foo/: error parsing regexp: missing closing ): `/(foo`",
 | 
						|
				"error compiling regex //foo/bar)/: error parsing regexp: unexpected ): `/foo/bar)`",
 | 
						|
				"error compiling regex /^]/foo/bar[$/: error parsing regexp: missing closing ]: `[$`",
 | 
						|
				"error compiling regex /^]/foo/bar[$/: error parsing regexp: missing closing ]: `[$`",
 | 
						|
			},
 | 
						|
		}),
 | 
						|
	)
 | 
						|
 | 
						|
	DescribeTable("validateRegexes",
 | 
						|
		func(r *validateRegexesTableInput) {
 | 
						|
			opts := &options.Options{
 | 
						|
				SkipAuthRegex: r.regexes,
 | 
						|
			}
 | 
						|
			Expect(validateRegexes(opts)).To(ConsistOf(r.errStrings))
 | 
						|
		},
 | 
						|
		Entry("Valid regex routes", &validateRegexesTableInput{
 | 
						|
			regexes: []string{
 | 
						|
				"/foo",
 | 
						|
				"/foo/bar",
 | 
						|
				"^/foo/bar$",
 | 
						|
				"/crazy/(?:regex)?/[^/]+/stuff$",
 | 
						|
			},
 | 
						|
			errStrings: []string{},
 | 
						|
		}),
 | 
						|
		Entry("Bad regexes do not compile", &validateRegexesTableInput{
 | 
						|
			regexes: []string{
 | 
						|
				"/(foo",
 | 
						|
				"/foo/bar)",
 | 
						|
				"^]/foo/bar[$",
 | 
						|
				"^]/foo/bar[$",
 | 
						|
			},
 | 
						|
			errStrings: []string{
 | 
						|
				"error compiling regex //(foo/: error parsing regexp: missing closing ): `/(foo`",
 | 
						|
				"error compiling regex //foo/bar)/: error parsing regexp: unexpected ): `/foo/bar)`",
 | 
						|
				"error compiling regex /^]/foo/bar[$/: error parsing regexp: missing closing ]: `[$`",
 | 
						|
				"error compiling regex /^]/foo/bar[$/: error parsing regexp: missing closing ]: `[$`",
 | 
						|
			},
 | 
						|
		}),
 | 
						|
	)
 | 
						|
 | 
						|
	DescribeTable("validateTrustedIPs",
 | 
						|
		func(t *validateTrustedIPsTableInput) {
 | 
						|
			opts := &options.Options{
 | 
						|
				TrustedIPs: t.trustedIPs,
 | 
						|
			}
 | 
						|
			Expect(validateTrustedIPs(opts)).To(ConsistOf(t.errStrings))
 | 
						|
		},
 | 
						|
		Entry("Non-overlapping valid IPs", &validateTrustedIPsTableInput{
 | 
						|
			trustedIPs: []string{
 | 
						|
				"127.0.0.1",
 | 
						|
				"10.32.0.1/32",
 | 
						|
				"43.36.201.0/24",
 | 
						|
				"::1",
 | 
						|
				"2a12:105:ee7:9234:0:0:0:0/64",
 | 
						|
			},
 | 
						|
			errStrings: []string{},
 | 
						|
		}),
 | 
						|
		Entry("Overlapping valid IPs", &validateTrustedIPsTableInput{
 | 
						|
			trustedIPs: []string{
 | 
						|
				"135.180.78.199",
 | 
						|
				"135.180.78.199/32",
 | 
						|
				"d910:a5a1:16f8:ddf5:e5b9:5cef:a65e:41f4",
 | 
						|
				"d910:a5a1:16f8:ddf5:e5b9:5cef:a65e:41f4/128",
 | 
						|
			},
 | 
						|
			errStrings: []string{},
 | 
						|
		}),
 | 
						|
		Entry("Invalid IPs", &validateTrustedIPsTableInput{
 | 
						|
			trustedIPs: []string{"[::1]", "alkwlkbn/32"},
 | 
						|
			errStrings: []string{
 | 
						|
				"trusted_ips[0] ([::1]) could not be recognized",
 | 
						|
				"trusted_ips[1] (alkwlkbn/32) could not be recognized",
 | 
						|
			},
 | 
						|
		}),
 | 
						|
	)
 | 
						|
})
 |