@@ -29,18 +29,19 @@ import (
2929// Options holds Configuration Options that can be set by Command Line Flag,
3030// or Config File
3131type Options struct {
32− ProxyPrefix string `flag:"proxy-prefix" cfg:"proxy_prefix" env:"OAUTH2_PROXY_PROXY_PREFIX"`
33− PingPath string `flag:"ping-path" cfg:"ping_path" env:"OAUTH2_PROXY_PING_PATH"`
34− ProxyWebSockets bool `flag:"proxy-websockets" cfg:"proxy_websockets" env:"OAUTH2_PROXY_PROXY_WEBSOCKETS"`
35− HTTPAddress string `flag:"http-address" cfg:"http_address" env:"OAUTH2_PROXY_HTTP_ADDRESS"`
36− HTTPSAddress string `flag:"https-address" cfg:"https_address" env:"OAUTH2_PROXY_HTTPS_ADDRESS"`
37− ReverseProxy bool `flag:"reverse-proxy" cfg:"reverse_proxy" env:"OAUTH2_PROXY_REVERSE_PROXY"`
38− ForceHTTPS bool `flag:"force-https" cfg:"force_https" env:"OAUTH2_PROXY_FORCE_HTTPS"`
39− RedirectURL string `flag:"redirect-url" cfg:"redirect_url" env:"OAUTH2_PROXY_REDIRECT_URL"`
40− ClientID string `flag:"client-id" cfg:"client_id" env:"OAUTH2_PROXY_CLIENT_ID"`
41− ClientSecret string `flag:"client-secret" cfg:"client_secret" env:"OAUTH2_PROXY_CLIENT_SECRET"`
42− TLSCertFile string `flag:"tls-cert-file" cfg:"tls_cert_file" env:"OAUTH2_PROXY_TLS_CERT_FILE"`
43− TLSKeyFile string `flag:"tls-key-file" cfg:"tls_key_file" env:"OAUTH2_PROXY_TLS_KEY_FILE"`
32+ ProxyPrefix string `flag:"proxy-prefix" cfg:"proxy_prefix" env:"OAUTH2_PROXY_PROXY_PREFIX"`
33+ PingPath string `flag:"ping-path" cfg:"ping_path" env:"OAUTH2_PROXY_PING_PATH"`
34+ ProxyWebSockets bool `flag:"proxy-websockets" cfg:"proxy_websockets" env:"OAUTH2_PROXY_PROXY_WEBSOCKETS"`
35+ HTTPAddress string `flag:"http-address" cfg:"http_address" env:"OAUTH2_PROXY_HTTP_ADDRESS"`
36+ HTTPSAddress string `flag:"https-address" cfg:"https_address" env:"OAUTH2_PROXY_HTTPS_ADDRESS"`
37+ ReverseProxy bool `flag:"reverse-proxy" cfg:"reverse_proxy" env:"OAUTH2_PROXY_REVERSE_PROXY"`
38+ ForceHTTPS bool `flag:"force-https" cfg:"force_https" env:"OAUTH2_PROXY_FORCE_HTTPS"`
39+ RedirectURL string `flag:"redirect-url" cfg:"redirect_url" env:"OAUTH2_PROXY_REDIRECT_URL"`
40+ ClientID string `flag:"client-id" cfg:"client_id" env:"OAUTH2_PROXY_CLIENT_ID"`
41+ ClientSecret string `flag:"client-secret" cfg:"client_secret" env:"OAUTH2_PROXY_CLIENT_SECRET"`
42+ ClientSecretFile string `flag:"client-secret-file" cfg:"client_secret_file" env:"OAUTH2_PROXY_CLIENT_SECRET_FILE"`
43+ TLSCertFile string `flag:"tls-cert-file" cfg:"tls_cert_file" env:"OAUTH2_PROXY_TLS_CERT_FILE"`
44+ TLSKeyFile string `flag:"tls-key-file" cfg:"tls_key_file" env:"OAUTH2_PROXY_TLS_KEY_FILE"`
4445
4546 AuthenticatedEmailsFile string `flag:"authenticated-emails-file" cfg:"authenticated_emails_file" env:"OAUTH2_PROXY_AUTHENTICATED_EMAILS_FILE"`
4647 KeycloakGroup string `flag:"keycloak-group" cfg:"keycloak_group" env:"OAUTH2_PROXY_KEYCLOAK_GROUP"`
@@ -222,8 +223,16 @@ func (o *Options) Validate() error {
222223 msgs = append(msgs, "missing setting: client-id")
223224 }
224225 // login.gov uses a signed JWT to authenticate, not a client-secret
225− if o.ClientSecret == "" && o.Provider != "login.gov" {
226− msgs = append(msgs, "missing setting: client-secret")
226+ if o.Provider != "login.gov" {
227+ if o.ClientSecret == "" && o.ClientSecretFile == "" {
228+ msgs = append(msgs, "missing setting: client-secret or client-secret-file")
229+ }
230+ if o.ClientSecret == "" && o.ClientSecretFile != "" {
231+ _, err := ioutil.ReadFile(o.ClientSecretFile)
232+ if err != nil {
233+ msgs = append(msgs, "could not read client secret file: "+o.ClientSecretFile)
234+ }
235+ }
227236 }
228237 if o.AuthenticatedEmailsFile == "" && len(o.EmailDomains) == 0 && o.HtpasswdFile == "" {
229238 msgs = append(msgs, "missing setting for email validation: email-domain or authenticated-emails-file required."+
@@ -392,10 +401,11 @@ func (o *Options) Validate() error {
392401
393402func parseProviderInfo(o *Options, msgs []string) []string {
394403 p := &providers.ProviderData{
395− Scope: o.Scope,
396− ClientID: o.ClientID,
397− ClientSecret: o.ClientSecret,
398− ApprovalPrompt: o.ApprovalPrompt,
404+ Scope: o.Scope,
405+ ClientID: o.ClientID,
406+ ClientSecret: o.ClientSecret,
407+ ClientSecretFile: o.ClientSecretFile,
408+ ApprovalPrompt: o.ApprovalPrompt,
399409 }
400410 p.LoginURL, msgs = parseURL(o.LoginURL, "login", msgs)
401411 p.RedeemURL, msgs = parseURL(o.RedeemURL, "redeem", msgs)