@@ -20,6 +20,7 @@ import (
20 "github.com/coreos/go-oidc"
20 "github.com/coreos/go-oidc"
21 "github.com/mbland/hmacauth"
21 "github.com/mbland/hmacauth"
22 sessionsapi "github.com/pusher/oauth2_proxy/pkg/apis/sessions"
22 sessionsapi "github.com/pusher/oauth2_proxy/pkg/apis/sessions"
23+ "github.com/pusher/oauth2_proxy/pkg/cookies"
23 "github.com/pusher/oauth2_proxy/pkg/encryption"
24 "github.com/pusher/oauth2_proxy/pkg/encryption"
24 "github.com/pusher/oauth2_proxy/pkg/logger"
25 "github.com/pusher/oauth2_proxy/pkg/logger"
25 "github.com/pusher/oauth2_proxy/providers"
26 "github.com/pusher/oauth2_proxy/providers"
@@ -68,6 +69,7 @@ type OAuthProxy struct {
68 CookieHTTPOnly bool
69 CookieHTTPOnly bool
69 CookieExpire time.Duration
70 CookieExpire time.Duration
70 CookieRefresh time.Duration
71 CookieRefresh time.Duration
72+ CookieSameSite string
71 Validator func(string) bool
73 Validator func(string) bool
73 RobotsPath string
75 RobotsPath string
@@ -195,7 +197,7 @@ func NewWebSocketOrRestReverseProxy(u *url.URL, opts *Options, auth hmacauth.Hma
198−// NewOAuthProxy creates a new instance of OOuthProxy from the options provided
200+// NewOAuthProxy creates a new instance of OAuthProxy from the options provided
199func NewOAuthProxy(opts *Options, validator func(string) bool) *OAuthProxy {
201func NewOAuthProxy(opts *Options, validator func(string) bool) *OAuthProxy {
200 serveMux := http.NewServeMux()
202 serveMux := http.NewServeMux()
201 var auth hmacauth.HmacAuth
203 var auth hmacauth.HmacAuth
@@ -260,7 +262,7 @@ func NewOAuthProxy(opts *Options, validator func(string) bool) *OAuthProxy {
260 refresh = fmt.Sprintf("after %s", opts.CookieRefresh)
262 refresh = fmt.Sprintf("after %s", opts.CookieRefresh)
263− 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)
265+ logger.Printf("Cookie settings: name:%s secure(https):%v httponly:%v expiry:%s domain:%s path:%s samesite:%s refresh:%s", opts.CookieName, opts.CookieSecure, opts.CookieHTTPOnly, opts.CookieExpire, opts.CookieDomain, opts.CookiePath, opts.CookieSameSite, refresh)
265 return &OAuthProxy{
267 return &OAuthProxy{
266 CookieName: opts.CookieName,
268 CookieName: opts.CookieName,
@@ -272,6 +274,7 @@ func NewOAuthProxy(opts *Options, validator func(string) bool) *OAuthProxy {
272 CookieHTTPOnly: opts.CookieHTTPOnly,
274 CookieHTTPOnly: opts.CookieHTTPOnly,
273 CookieExpire: opts.CookieExpire,
275 CookieExpire: opts.CookieExpire,
274 CookieRefresh: opts.CookieRefresh,
276 CookieRefresh: opts.CookieRefresh,
277+ CookieSameSite: opts.CookieSameSite,
275 Validator: validator,
278 Validator: validator,
277 RobotsPath: "/robots.txt",
280 RobotsPath: "/robots.txt",
@@ -380,6 +383,7 @@ func (p *OAuthProxy) makeCookie(req *http.Request, name string, value string, ex
380 HttpOnly: p.CookieHTTPOnly,
383 HttpOnly: p.CookieHTTPOnly,
381 Secure: p.CookieSecure,
384 Secure: p.CookieSecure,
382 Expires: now.Add(expiration),
385 Expires: now.Add(expiration),
386+ SameSite: cookies.ParseSameSite(p.CookieSameSite),