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",
 | |
| 			},
 | |
| 		}),
 | |
| 	)
 | |
| })
 |