fix issuer for embedded outpost Signed-off-by: Jens Langhammer <jens@goauthentik.io> Signed-off-by: Jens Langhammer <jens@goauthentik.io>
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package application
 | 
						|
 | 
						|
import (
 | 
						|
	"net/url"
 | 
						|
	"os"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	log "github.com/sirupsen/logrus"
 | 
						|
	"goauthentik.io/api/v3"
 | 
						|
	"golang.org/x/oauth2"
 | 
						|
)
 | 
						|
 | 
						|
type OIDCEndpoint struct {
 | 
						|
	oauth2.Endpoint
 | 
						|
	TokenIntrospection string
 | 
						|
	EndSessionEndpoint string
 | 
						|
	JwksUri            string
 | 
						|
	Issuer             string
 | 
						|
}
 | 
						|
 | 
						|
func updateURL(rawUrl string, scheme string, host string) string {
 | 
						|
	u, err := url.Parse(rawUrl)
 | 
						|
	if err != nil {
 | 
						|
		return rawUrl
 | 
						|
	}
 | 
						|
	u.Host = host
 | 
						|
	u.Scheme = scheme
 | 
						|
	return u.String()
 | 
						|
}
 | 
						|
 | 
						|
func GetOIDCEndpoint(p api.ProxyOutpostConfig, authentikHost string, embedded bool) OIDCEndpoint {
 | 
						|
	authUrl := p.OidcConfiguration.AuthorizationEndpoint
 | 
						|
	endUrl := p.OidcConfiguration.EndSessionEndpoint
 | 
						|
	tokenUrl := p.OidcConfiguration.TokenEndpoint
 | 
						|
	jwksUrl := p.OidcConfiguration.JwksUri
 | 
						|
	if browserHost, found := os.LookupEnv("AUTHENTIK_HOST_BROWSER"); found && browserHost != "" {
 | 
						|
		host := os.Getenv("AUTHENTIK_HOST")
 | 
						|
		authUrl = strings.ReplaceAll(authUrl, host, browserHost)
 | 
						|
		endUrl = strings.ReplaceAll(endUrl, host, browserHost)
 | 
						|
		jwksUrl = strings.ReplaceAll(jwksUrl, host, browserHost)
 | 
						|
	}
 | 
						|
	ep := OIDCEndpoint{
 | 
						|
		Endpoint: oauth2.Endpoint{
 | 
						|
			AuthURL:   authUrl,
 | 
						|
			TokenURL:  tokenUrl,
 | 
						|
			AuthStyle: oauth2.AuthStyleInParams,
 | 
						|
		},
 | 
						|
		EndSessionEndpoint: endUrl,
 | 
						|
		JwksUri:            jwksUrl,
 | 
						|
		TokenIntrospection: p.OidcConfiguration.IntrospectionEndpoint,
 | 
						|
		Issuer:             p.OidcConfiguration.Issuer,
 | 
						|
	}
 | 
						|
	if !embedded {
 | 
						|
		return ep
 | 
						|
	}
 | 
						|
	if authentikHost == "" {
 | 
						|
		log.Warning("Outpost has localhost/blank API Connection but no authentik_host is configured.")
 | 
						|
		return ep
 | 
						|
	}
 | 
						|
	aku, err := url.Parse(authentikHost)
 | 
						|
	if err != nil {
 | 
						|
		return ep
 | 
						|
	}
 | 
						|
	ep.AuthURL = updateURL(authUrl, aku.Scheme, aku.Host)
 | 
						|
	ep.EndSessionEndpoint = updateURL(endUrl, aku.Scheme, aku.Host)
 | 
						|
	ep.JwksUri = updateURL(jwksUrl, aku.Scheme, aku.Host)
 | 
						|
	ep.TokenURL = updateURL(tokenUrl, aku.Scheme, aku.Host)
 | 
						|
	ep.Issuer = updateURL(ep.Issuer, aku.Scheme, aku.Host)
 | 
						|
	return ep
 | 
						|
}
 |