Merging changes
This commit is contained in:
		
							parent
							
								
									1f15631547
								
							
						
					
					
						commit
						d77119be55
					
				|  | @ -222,6 +222,7 @@ | ||||||
|     "github.com/mreiferson/go-options", |     "github.com/mreiferson/go-options", | ||||||
|     "github.com/stretchr/testify/assert", |     "github.com/stretchr/testify/assert", | ||||||
|     "github.com/stretchr/testify/require", |     "github.com/stretchr/testify/require", | ||||||
|  |     "github.com/yhat/wsutil", | ||||||
|     "golang.org/x/crypto/bcrypt", |     "golang.org/x/crypto/bcrypt", | ||||||
|     "golang.org/x/net/websocket", |     "golang.org/x/net/websocket", | ||||||
|     "golang.org/x/oauth2", |     "golang.org/x/oauth2", | ||||||
|  |  | ||||||
|  | @ -4,6 +4,9 @@ | ||||||
| package main | package main | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"bufio" | ||||||
|  | 	"errors" | ||||||
|  | 	"net" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										14
									
								
								main.go
								
								
								
								
							
							
						
						
									
										14
									
								
								main.go
								
								
								
								
							|  | @ -3,7 +3,6 @@ package main | ||||||
| import ( | import ( | ||||||
| 	"flag" | 	"flag" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"log" |  | ||||||
| 	"math/rand" | 	"math/rand" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"os" | 	"os" | ||||||
|  | @ -13,6 +12,7 @@ import ( | ||||||
| 
 | 
 | ||||||
| 	"github.com/BurntSushi/toml" | 	"github.com/BurntSushi/toml" | ||||||
| 	options "github.com/mreiferson/go-options" | 	options "github.com/mreiferson/go-options" | ||||||
|  | 	"github.com/pusher/oauth2_proxy/logger" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func main() { | func main() { | ||||||
|  | @ -20,7 +20,7 @@ func main() { | ||||||
| 	flagSet := flag.NewFlagSet("oauth2_proxy", flag.ExitOnError) | 	flagSet := flag.NewFlagSet("oauth2_proxy", flag.ExitOnError) | ||||||
| 
 | 
 | ||||||
| 	emailDomains := StringArray{} | 	emailDomains := StringArray{} | ||||||
| 	whitelistDomains := StringArray{} | 	whitelistandardomains := StringArray{} | ||||||
| 	upstreams := StringArray{} | 	upstreams := StringArray{} | ||||||
| 	skipAuthRegex := StringArray{} | 	skipAuthRegex := StringArray{} | ||||||
| 	googleGroups := StringArray{} | 	googleGroups := StringArray{} | ||||||
|  | @ -49,7 +49,7 @@ func main() { | ||||||
| 	flagSet.Duration("flush-interval", time.Duration(1)*time.Second, "period between response flushing when streaming responses") | 	flagSet.Duration("flush-interval", time.Duration(1)*time.Second, "period between response flushing when streaming responses") | ||||||
| 
 | 
 | ||||||
| 	flagSet.Var(&emailDomains, "email-domain", "authenticate emails with the specified domain (may be given multiple times). Use * to authenticate any email") | 	flagSet.Var(&emailDomains, "email-domain", "authenticate emails with the specified domain (may be given multiple times). Use * to authenticate any email") | ||||||
| 	flagSet.Var(&whitelistDomains, "whitelist-domain", "allowed domains for redirection after authentication. Prefix domain with a . to allow subdomains (eg .example.com)") | 	flagSet.Var(&whitelistandardomains, "whitelist-domain", "allowed domains for redirection after authentication. Prefix domain with a . to allow subdomains (eg .example.com)") | ||||||
| 	flagSet.String("azure-tenant", "common", "go to a tenant-specific or common (tenant-independent) endpoint.") | 	flagSet.String("azure-tenant", "common", "go to a tenant-specific or common (tenant-independent) endpoint.") | ||||||
| 	flagSet.String("github-org", "", "restrict logins to members of this organisation") | 	flagSet.String("github-org", "", "restrict logins to members of this organisation") | ||||||
| 	flagSet.String("github-team", "", "restrict logins to members of this team") | 	flagSet.String("github-team", "", "restrict logins to members of this team") | ||||||
|  | @ -158,16 +158,12 @@ func main() { | ||||||
| 
 | 
 | ||||||
| 	var handler http.Handler | 	var handler http.Handler | ||||||
| 	if opts.GCPHealthChecks { | 	if opts.GCPHealthChecks { | ||||||
| 		handler = gcpHealthcheck(LoggingHandler(os.Stdout, oauthproxy, opts.RequestLogging, opts.RequestLoggingFormat)) | 		handler = gcpHealthcheck(LoggingHandler(oauthproxy)) | ||||||
| 	} else { | 	} else { | ||||||
| 		handler = LoggingHandler(os.Stdout, oauthproxy, opts.RequestLogging, opts.RequestLoggingFormat) | 		handler = LoggingHandler(oauthproxy) | ||||||
| 	} | 	} | ||||||
| 	s := &Server{ | 	s := &Server{ | ||||||
| <<<<<<< HEAD |  | ||||||
| 		Handler: handler, | 		Handler: handler, | ||||||
| ======= |  | ||||||
| 		Handler: LoggingHandler(oauthproxy), |  | ||||||
| >>>>>>> Auth and standard logging with file rolling |  | ||||||
| 		Opts:    opts, | 		Opts:    opts, | ||||||
| 	} | 	} | ||||||
| 	s.ListenAndServe() | 	s.ListenAndServe() | ||||||
|  |  | ||||||
|  | @ -185,23 +185,10 @@ func NewOAuthProxy(opts *Options, validator func(string) bool) *OAuthProxy { | ||||||
| 		path := u.Path | 		path := u.Path | ||||||
| 		switch u.Scheme { | 		switch u.Scheme { | ||||||
| 		case httpScheme, httpsScheme: | 		case httpScheme, httpsScheme: | ||||||
| <<<<<<< HEAD | 			logger.Printf("mapping path %q => upstream %q", path, u) | ||||||
| 			log.Printf("mapping path %q => upstream %q", path, u) |  | ||||||
| 			proxy := NewWebSocketOrRestReverseProxy(u, opts, auth) | 			proxy := NewWebSocketOrRestReverseProxy(u, opts, auth) | ||||||
| 			serveMux.Handle(path, proxy) | 			serveMux.Handle(path, proxy) | ||||||
| 
 | 
 | ||||||
| ======= |  | ||||||
| 			u.Path = "" |  | ||||||
| 			logger.Printf("mapping path %q => upstream %q", path, u) |  | ||||||
| 			proxy := NewReverseProxy(u, opts.FlushInterval) |  | ||||||
| 			if !opts.PassHostHeader { |  | ||||||
| 				setProxyUpstreamHostHeader(proxy, u) |  | ||||||
| 			} else { |  | ||||||
| 				setProxyDirector(proxy) |  | ||||||
| 			} |  | ||||||
| 			serveMux.Handle(path, |  | ||||||
| 				&UpstreamProxy{u.Host, proxy, auth}) |  | ||||||
| >>>>>>> Auth and standard logging with file rolling |  | ||||||
| 		case "file": | 		case "file": | ||||||
| 			if u.Fragment != "" { | 			if u.Fragment != "" { | ||||||
| 				path = u.Fragment | 				path = u.Fragment | ||||||
|  | @ -228,11 +215,7 @@ func NewOAuthProxy(opts *Options, validator func(string) bool) *OAuthProxy { | ||||||
| 		refresh = fmt.Sprintf("after %s", opts.CookieRefresh) | 		refresh = fmt.Sprintf("after %s", opts.CookieRefresh) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| <<<<<<< HEAD | 	logger.Printf("Cookie settings: name:%s secure(https):%v httponly:%v expiry:%s domain:%s path:%s refresh:%s", opts.CookieName, opts.CookieSecure, opts.CookieHTTPOnly, opts.CookieExpire, opts.CookieDomain, opts.CookiePath, refresh) | ||||||
| 	log.Printf("Cookie settings: name:%s secure(https):%v httponly:%v expiry:%s domain:%s path:%s refresh:%s", opts.CookieName, opts.CookieSecure, opts.CookieHTTPOnly, opts.CookieExpire, opts.CookieDomain, opts.CookiePath, refresh) |  | ||||||
| ======= |  | ||||||
| 	logger.Printf("Cookie settings: name:%s secure(https):%v httponly:%v expiry:%s domain:%s refresh:%s", opts.CookieName, opts.CookieSecure, opts.CookieHTTPOnly, opts.CookieExpire, opts.CookieDomain, refresh) |  | ||||||
| >>>>>>> Auth and standard logging with file rolling |  | ||||||
| 
 | 
 | ||||||
| 	var cipher *cookie.Cipher | 	var cipher *cookie.Cipher | ||||||
| 	if opts.PassAccessToken || opts.SetAuthorization || opts.PassAuthorization || (opts.CookieRefresh != time.Duration(0)) { | 	if opts.PassAccessToken || opts.SetAuthorization || opts.PassAuthorization || (opts.CookieRefresh != time.Duration(0)) { | ||||||
|  |  | ||||||
							
								
								
									
										50
									
								
								options.go
								
								
								
								
							
							
						
						
									
										50
									
								
								options.go
								
								
								
								
							|  | @ -18,7 +18,7 @@ import ( | ||||||
| 	"github.com/mbland/hmacauth" | 	"github.com/mbland/hmacauth" | ||||||
| 	"github.com/pusher/oauth2_proxy/logger" | 	"github.com/pusher/oauth2_proxy/logger" | ||||||
| 	"github.com/pusher/oauth2_proxy/providers" | 	"github.com/pusher/oauth2_proxy/providers" | ||||||
| 	lumberjack "gopkg.in/natefinch/lumberjack.v2" | 	"gopkg.in/natefinch/lumberjack.v2" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // Options holds Configuration Options that can be set by Command Line Flag,
 | // Options holds Configuration Options that can be set by Command Line Flag,
 | ||||||
|  | @ -74,7 +74,6 @@ type Options struct { | ||||||
| 
 | 
 | ||||||
| 	// These options allow for other providers besides Google, with
 | 	// These options allow for other providers besides Google, with
 | ||||||
| 	// potential overrides.
 | 	// potential overrides.
 | ||||||
| <<<<<<< HEAD |  | ||||||
| 	Provider          string `flag:"provider" cfg:"provider" env:"OAUTH2_PROXY_PROVIDER"` | 	Provider          string `flag:"provider" cfg:"provider" env:"OAUTH2_PROXY_PROVIDER"` | ||||||
| 	OIDCIssuerURL     string `flag:"oidc-issuer-url" cfg:"oidc_issuer_url" env:"OAUTH2_PROXY_OIDC_ISSUER_URL"` | 	OIDCIssuerURL     string `flag:"oidc-issuer-url" cfg:"oidc_issuer_url" env:"OAUTH2_PROXY_OIDC_ISSUER_URL"` | ||||||
| 	SkipOIDCDiscovery bool   `flag:"skip-oidc-discovery" cfg:"skip_oidc_discovery" env:"OAUTH2_SKIP_OIDC_DISCOVERY"` | 	SkipOIDCDiscovery bool   `flag:"skip-oidc-discovery" cfg:"skip_oidc_discovery" env:"OAUTH2_SKIP_OIDC_DISCOVERY"` | ||||||
|  | @ -87,25 +86,6 @@ type Options struct { | ||||||
| 	Scope             string `flag:"scope" cfg:"scope" env:"OAUTH2_PROXY_SCOPE"` | 	Scope             string `flag:"scope" cfg:"scope" env:"OAUTH2_PROXY_SCOPE"` | ||||||
| 	ApprovalPrompt    string `flag:"approval-prompt" cfg:"approval_prompt" env:"OAUTH2_PROXY_APPROVAL_PROMPT"` | 	ApprovalPrompt    string `flag:"approval-prompt" cfg:"approval_prompt" env:"OAUTH2_PROXY_APPROVAL_PROMPT"` | ||||||
| 
 | 
 | ||||||
| 	RequestLogging       bool   `flag:"request-logging" cfg:"request_logging" env:"OAUTH2_PROXY_REQUEST_LOGGING"` |  | ||||||
| 	RequestLoggingFormat string `flag:"request-logging-format" cfg:"request_logging_format" env:"OAUTH2_PROXY_REQUEST_LOGGING_FORMAT"` |  | ||||||
| 
 |  | ||||||
| 	SignatureKey    string `flag:"signature-key" cfg:"signature_key" env:"OAUTH2_PROXY_SIGNATURE_KEY"` |  | ||||||
| 	AcrValues       string `flag:"acr-values" cfg:"acr_values" env:"OAUTH2_PROXY_ACR_VALUES"` |  | ||||||
| 	JWTKey          string `flag:"jwt-key" cfg:"jwt_key" env:"OAUTH2_PROXY_JWT_KEY"` |  | ||||||
| 	PubJWKURL       string `flag:"pubjwk-url" cfg:"pubjwk_url" env:"OAUTH2_PROXY_PUBJWK_URL"` |  | ||||||
| 	GCPHealthChecks bool   `flag:"gcp-healthchecks" cfg:"gcp_healthchecks" env:"OAUTH2_PROXY_GCP_HEALTHCHECKS"` |  | ||||||
| ======= |  | ||||||
| 	Provider          string `flag:"provider" cfg:"provider"` |  | ||||||
| 	OIDCIssuerURL     string `flag:"oidc-issuer-url" cfg:"oidc_issuer_url"` |  | ||||||
| 	LoginURL          string `flag:"login-url" cfg:"login_url"` |  | ||||||
| 	RedeemURL         string `flag:"redeem-url" cfg:"redeem_url"` |  | ||||||
| 	ProfileURL        string `flag:"profile-url" cfg:"profile_url"` |  | ||||||
| 	ProtectedResource string `flag:"resource" cfg:"resource"` |  | ||||||
| 	ValidateURL       string `flag:"validate-url" cfg:"validate_url"` |  | ||||||
| 	Scope             string `flag:"scope" cfg:"scope"` |  | ||||||
| 	ApprovalPrompt    string `flag:"approval-prompt" cfg:"approval_prompt"` |  | ||||||
| 
 |  | ||||||
| 	// Configuration values for logging
 | 	// Configuration values for logging
 | ||||||
| 	LoggingFilename       string `flag:"logging-filename" cfg:"logging_filename"` | 	LoggingFilename       string `flag:"logging-filename" cfg:"logging_filename"` | ||||||
| 	LoggingMaxSize        int    `flag:"logging-max-size" cfg:"logging_max_size"` | 	LoggingMaxSize        int    `flag:"logging-max-size" cfg:"logging_max_size"` | ||||||
|  | @ -121,7 +101,10 @@ type Options struct { | ||||||
| 	AuthLoggingFormat     string `flag:"auth-logging-format" cfg:"auth_logging_format"` | 	AuthLoggingFormat     string `flag:"auth-logging-format" cfg:"auth_logging_format"` | ||||||
| 
 | 
 | ||||||
| 	SignatureKey    string `flag:"signature-key" cfg:"signature_key" env:"OAUTH2_PROXY_SIGNATURE_KEY"` | 	SignatureKey    string `flag:"signature-key" cfg:"signature_key" env:"OAUTH2_PROXY_SIGNATURE_KEY"` | ||||||
| >>>>>>> Auth and standard logging with file rolling | 	AcrValues       string `flag:"acr-values" cfg:"acr_values" env:"OAUTH2_PROXY_ACR_VALUES"` | ||||||
|  | 	JWTKey          string `flag:"jwt-key" cfg:"jwt_key" env:"OAUTH2_PROXY_JWT_KEY"` | ||||||
|  | 	PubJWKURL       string `flag:"pubjwk-url" cfg:"pubjwk_url" env:"OAUTH2_PROXY_PUBJWK_URL"` | ||||||
|  | 	GCPHealthChecks bool   `flag:"gcp-healthchecks" cfg:"gcp_healthchecks" env:"OAUTH2_PROXY_GCP_HEALTHCHECKS"` | ||||||
| 
 | 
 | ||||||
| 	// internal values that are set after config validation
 | 	// internal values that are set after config validation
 | ||||||
| 	redirectURL   *url.URL | 	redirectURL   *url.URL | ||||||
|  | @ -141,7 +124,6 @@ type SignatureData struct { | ||||||
| // NewOptions constructs a new Options with defaulted values
 | // NewOptions constructs a new Options with defaulted values
 | ||||||
| func NewOptions() *Options { | func NewOptions() *Options { | ||||||
| 	return &Options{ | 	return &Options{ | ||||||
| <<<<<<< HEAD |  | ||||||
| 		ProxyPrefix:           "/oauth2", | 		ProxyPrefix:           "/oauth2", | ||||||
| 		ProxyWebSockets:       true, | 		ProxyWebSockets:       true, | ||||||
| 		HTTPAddress:           "127.0.0.1:4180", | 		HTTPAddress:           "127.0.0.1:4180", | ||||||
|  | @ -161,28 +143,7 @@ func NewOptions() *Options { | ||||||
| 		SetAuthorization:      false, | 		SetAuthorization:      false, | ||||||
| 		PassAuthorization:     false, | 		PassAuthorization:     false, | ||||||
| 		ApprovalPrompt:        "force", | 		ApprovalPrompt:        "force", | ||||||
| 		RequestLogging:       true, |  | ||||||
| 		SkipOIDCDiscovery:     false, | 		SkipOIDCDiscovery:     false, | ||||||
| 		RequestLoggingFormat: defaultRequestLoggingFormat, |  | ||||||
| ======= |  | ||||||
| 		ProxyPrefix:           "/oauth2", |  | ||||||
| 		HTTPAddress:           "127.0.0.1:4180", |  | ||||||
| 		HTTPSAddress:          ":443", |  | ||||||
| 		DisplayHtpasswdForm:   true, |  | ||||||
| 		CookieName:            "_oauth2_proxy", |  | ||||||
| 		CookieSecure:          true, |  | ||||||
| 		CookieHTTPOnly:        true, |  | ||||||
| 		CookieExpire:          time.Duration(168) * time.Hour, |  | ||||||
| 		CookieRefresh:         time.Duration(0), |  | ||||||
| 		SetXAuthRequest:       false, |  | ||||||
| 		SkipAuthPreflight:     false, |  | ||||||
| 		PassBasicAuth:         true, |  | ||||||
| 		PassUserHeaders:       true, |  | ||||||
| 		PassAccessToken:       false, |  | ||||||
| 		PassHostHeader:        true, |  | ||||||
| 		SetAuthorization:      false, |  | ||||||
| 		PassAuthorization:     false, |  | ||||||
| 		ApprovalPrompt:        "force", |  | ||||||
| 		LoggingFilename:       "", | 		LoggingFilename:       "", | ||||||
| 		LoggingMaxSize:        100, | 		LoggingMaxSize:        100, | ||||||
| 		LoggingMaxAge:         7, | 		LoggingMaxAge:         7, | ||||||
|  | @ -195,7 +156,6 @@ func NewOptions() *Options { | ||||||
| 		RequestLoggingFormat:  logger.DefaultRequestLoggingFormat, | 		RequestLoggingFormat:  logger.DefaultRequestLoggingFormat, | ||||||
| 		AuthLogging:           true, | 		AuthLogging:           true, | ||||||
| 		AuthLoggingFormat:     logger.DefaultAuthLoggingFormat, | 		AuthLoggingFormat:     logger.DefaultAuthLoggingFormat, | ||||||
| >>>>>>> Auth and standard logging with file rolling |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue