outposts/proxy: fix redirect URL error due to callback url not being joined correctly

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
Jens Langhammer 2021-09-10 16:19:29 +02:00
parent e229eda96e
commit 9a79bab43d
2 changed files with 13 additions and 3 deletions

View File

@ -4,7 +4,6 @@ import (
"context" "context"
"crypto/tls" "crypto/tls"
"encoding/gob" "encoding/gob"
"fmt"
"net/http" "net/http"
"net/url" "net/url"
"regexp" "regexp"
@ -70,7 +69,7 @@ func NewApplication(p api.ProxyOutpostConfig, c *http.Client, cs *ak.CryptoStore
oauth2Config := oauth2.Config{ oauth2Config := oauth2.Config{
ClientID: *p.ClientId, ClientID: *p.ClientId,
ClientSecret: *p.ClientSecret, ClientSecret: *p.ClientSecret,
RedirectURL: fmt.Sprintf("%s/akprox/callback", p.ExternalHost), RedirectURL: urlJoin(p.ExternalHost, "/akprox/callback"),
Endpoint: endpoint.Endpoint, Endpoint: endpoint.Endpoint,
Scopes: []string{oidc.ScopeOpenID, "profile", "email", "ak_proxy"}, Scopes: []string{oidc.ScopeOpenID, "profile", "email", "ak_proxy"},
} }

View File

@ -3,13 +3,24 @@ package application
import ( import (
"fmt" "fmt"
"net/http" "net/http"
"net/url"
"path"
"strconv" "strconv"
"goauthentik.io/internal/outpost/proxyv2/constants" "goauthentik.io/internal/outpost/proxyv2/constants"
) )
func urlJoin(originalUrl string, newPath string) string {
u, err := url.Parse(originalUrl)
if err != nil {
return originalUrl
}
u.Path = path.Join(u.Path, newPath)
return u.String()
}
func (a *Application) redirectToStart(rw http.ResponseWriter, r *http.Request) { func (a *Application) redirectToStart(rw http.ResponseWriter, r *http.Request) {
authUrl := fmt.Sprintf("%s/akprox/start", a.proxyConfig.ExternalHost) authUrl := urlJoin(a.proxyConfig.ExternalHost, "/akprox/start")
http.Redirect(rw, r, authUrl, http.StatusFound) http.Redirect(rw, r, authUrl, http.StatusFound)
} }