git.iko.soy/typeable/oauth2-proxy
on master help sign in
136 lines 4.2 kB history raw
1package validation
3import (
4 "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/options"
5 . "github.com/onsi/ginkgo/v2"
6 . "github.com/onsi/gomega"
7)
9var _ = Describe("Providers", func() {
10 type validateProvidersTableInput struct {
11 options *options.Options
12 errStrings []string
13 }
15 validProvider := options.Provider{
16 ID: "ProviderID",
17 ClientID: "ClientID",
18 ClientSecret: "ClientSecret",
19 }
21 validOIDCSigningAlgorithmsProvider := options.Provider{
22 ID: "ProviderIDOIDCSigningAlgorithms",
23 ClientID: "ClientID",
24 ClientSecret: "ClientSecret",
25 OIDCConfig: options.OIDCOptions{
26 EnabledSigningAlgs: []string{"RS256", "EdDSA"},
27 },
28 }
30 invalidOIDCSigningAlgorithmsProvider := options.Provider{
31 ID: "ProviderIDInvalidOIDCSigningAlgorithms",
32 ClientID: "ClientID",
33 ClientSecret: "ClientSecret",
34 OIDCConfig: options.OIDCOptions{
35 EnabledSigningAlgs: []string{"RS256", "invalid"},
36 },
37 }
39 invalidOIDCSigningAlgorithmCaseProvider := options.Provider{
40 ID: "ProviderIDInvalidOIDCSigningAlgorithmCase",
41 ClientID: "ClientID",
42 ClientSecret: "ClientSecret",
43 OIDCConfig: options.OIDCOptions{
44 EnabledSigningAlgs: []string{"rs256"},
45 },
46 }
48 validLoginGovProvider := options.Provider{
49 Type: "login.gov",
50 ID: "ProviderIDLoginGov",
51 ClientID: "ClientID",
52 ClientSecret: "ClientSecret",
53 }
55 missingIDProvider := options.Provider{
56 ClientID: "ClientID",
57 ClientSecret: "ClientSecret",
58 }
60 missingProvider := "at least one provider has to be defined"
61 emptyIDMsg := "provider has empty id: ids are required for all providers"
62 duplicateProviderIDMsg := "multiple providers found with id ProviderID: provider ids must be unique"
63 skipButtonAndMultipleProvidersMsg := "SkipProviderButton and multiple providers are mutually exclusive"
64 invalidOIDCSigningAlgorithmMsg := "provider ProviderIDInvalidOIDCSigningAlgorithms has invalid EnabledSigningAlgs entry \"invalid\""
65 invalidOIDCSigningAlgorithmCaseMsg := "provider ProviderIDInvalidOIDCSigningAlgorithmCase has invalid EnabledSigningAlgs entry \"rs256\""
67 DescribeTable("validateProviders",
68 func(o *validateProvidersTableInput) {
69 Expect(validateProviders(o.options)).To(ConsistOf(o.errStrings))
70 },
71 Entry("with no providers", &validateProvidersTableInput{
72 options: &options.Options{},
73 errStrings: []string{missingProvider},
74 }),
75 Entry("with valid providers", &validateProvidersTableInput{
76 options: &options.Options{
77 Providers: options.Providers{
78 validProvider,
79 validLoginGovProvider,
80 },
81 },
82 errStrings: []string{},
83 }),
84 Entry("with an empty providerID", &validateProvidersTableInput{
85 options: &options.Options{
86 Providers: options.Providers{
87 missingIDProvider,
88 },
89 },
90 errStrings: []string{emptyIDMsg},
91 }),
92 Entry("with same providerID", &validateProvidersTableInput{
93 options: &options.Options{
94 Providers: options.Providers{
95 validProvider,
96 validProvider,
97 },
98 },
99 errStrings: []string{duplicateProviderIDMsg},
100 }),
101 Entry("with multiple providers and skip provider button", &validateProvidersTableInput{
102 options: &options.Options{
103 SkipProviderButton: true,
104 Providers: options.Providers{
105 validProvider,
106 validLoginGovProvider,
107 },
108 },
109 errStrings: []string{skipButtonAndMultipleProvidersMsg},
110 }),
111 Entry("with valid OIDC signing algorithms", &validateProvidersTableInput{
112 options: &options.Options{
113 Providers: options.Providers{
114 validOIDCSigningAlgorithmsProvider,
115 },
116 },
117 errStrings: []string{},
118 }),
119 Entry("with an invalid OIDC signing algorithm", &validateProvidersTableInput{
120 options: &options.Options{
121 Providers: options.Providers{
122 invalidOIDCSigningAlgorithmsProvider,
123 },
124 },
125 errStrings: []string{invalidOIDCSigningAlgorithmMsg},
126 }),
127 Entry("with an OIDC signing algorithm using invalid casing", &validateProvidersTableInput{
128 options: &options.Options{
129 Providers: options.Providers{
130 invalidOIDCSigningAlgorithmCaseProvider,
131 },
132 },
133 errStrings: []string{invalidOIDCSigningAlgorithmCaseMsg},
134 }),
135 )
136})