 f01bc20d44
			
		
	
	f01bc20d44
	
	
	
		
			
			* api: allow API requests as managed outpost's account when using secret_key Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * root: load secret key from env Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * outposts: make listener IP configurable Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * outpost/proxy: run outpost in background and pass requests conditionally Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * outpost: unify branding to embedded Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * web/admin: fix embedded outpost not being editable Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * web: fix mismatched host detection Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * tests/e2e: fix LDAP test not including user for embedded outpost Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * tests/e2e: fix user matching Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * api: add tests for secret_key auth Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * root: load environment variables using github.com/Netflix/go-env Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package proxy
 | |
| 
 | |
| import (
 | |
| 	"net"
 | |
| 	"net/http"
 | |
| 	"strings"
 | |
| 	"time"
 | |
| 
 | |
| 	sessionsapi "github.com/oauth2-proxy/oauth2-proxy/pkg/apis/sessions"
 | |
| 	"github.com/oauth2-proxy/oauth2-proxy/pkg/cookies"
 | |
| 	"goauthentik.io/internal/utils/web"
 | |
| )
 | |
| 
 | |
| // MakeCSRFCookie creates a cookie for CSRF
 | |
| func (p *OAuthProxy) MakeCSRFCookie(req *http.Request, value string, expiration time.Duration, now time.Time) *http.Cookie {
 | |
| 	return p.makeCookie(req, p.CSRFCookieName, value, expiration, now)
 | |
| }
 | |
| 
 | |
| func (p *OAuthProxy) makeCookie(req *http.Request, name string, value string, expiration time.Duration, now time.Time) *http.Cookie {
 | |
| 	cookieDomain := cookies.GetCookieDomain(req, p.CookieDomains)
 | |
| 
 | |
| 	if cookieDomain != "" {
 | |
| 		domain := web.GetHost(req)
 | |
| 		if h, _, err := net.SplitHostPort(domain); err == nil {
 | |
| 			domain = h
 | |
| 		}
 | |
| 		if !strings.HasSuffix(domain, cookieDomain) {
 | |
| 			p.logger.Errorf("Warning: request host is %q but using configured cookie domain of %q", domain, cookieDomain)
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return &http.Cookie{
 | |
| 		Name:     name,
 | |
| 		Value:    value,
 | |
| 		Path:     p.CookiePath,
 | |
| 		Domain:   cookieDomain,
 | |
| 		HttpOnly: p.CookieHTTPOnly,
 | |
| 		Secure:   p.CookieSecure,
 | |
| 		Expires:  now.Add(expiration),
 | |
| 		SameSite: cookies.ParseSameSite(p.CookieSameSite),
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // ClearCSRFCookie creates a cookie to unset the CSRF cookie stored in the user's
 | |
| // session
 | |
| func (p *OAuthProxy) ClearCSRFCookie(rw http.ResponseWriter, req *http.Request) {
 | |
| 	http.SetCookie(rw, p.MakeCSRFCookie(req, "", time.Hour*-1, time.Now()))
 | |
| }
 | |
| 
 | |
| // SetCSRFCookie adds a CSRF cookie to the response
 | |
| func (p *OAuthProxy) SetCSRFCookie(rw http.ResponseWriter, req *http.Request, val string) {
 | |
| 	http.SetCookie(rw, p.MakeCSRFCookie(req, val, p.CookieExpire, time.Now()))
 | |
| }
 | |
| 
 | |
| // ClearSessionCookie creates a cookie to unset the user's authentication cookie
 | |
| // stored in the user's session
 | |
| func (p *OAuthProxy) ClearSessionCookie(rw http.ResponseWriter, req *http.Request) error {
 | |
| 	return p.sessionStore.Clear(rw, req)
 | |
| }
 | |
| 
 | |
| // LoadCookiedSession reads the user's authentication details from the request
 | |
| func (p *OAuthProxy) LoadCookiedSession(req *http.Request) (*sessionsapi.SessionState, error) {
 | |
| 	return p.sessionStore.Load(req)
 | |
| }
 | |
| 
 | |
| // SaveSession creates a new session cookie value and sets this on the response
 | |
| func (p *OAuthProxy) SaveSession(rw http.ResponseWriter, req *http.Request, s *sessionsapi.SessionState) error {
 | |
| 	return p.sessionStore.Save(rw, req, s)
 | |
| }
 |