Allow CORS origins in safeRedirect hosts

Local Vite continue URLs use absolute localhost origins that never
pass verified custom-domain checks. Reuse AllowedOrigins so post-auth
redirects work in dev without disabling Validate.

Signed-off-by: Émile Ré <emile@probo.com>
This commit is contained in:
Émile Ré
2026-07-29 16:42:04 +02:00
parent 69721c6afd
commit ed297ccc9e
5 changed files with 127 additions and 12 deletions

View File

@@ -21,7 +21,6 @@
package api
import (
"context"
"errors"
"fmt"
"net/http"
@@ -49,6 +48,7 @@ import (
"go.probo.inc/probo/pkg/probo"
"go.probo.inc/probo/pkg/resourcealias"
"go.probo.inc/probo/pkg/riskmanagement"
"go.probo.inc/probo/pkg/saferedirect"
"go.probo.inc/probo/pkg/securecookie"
agent_v1 "go.probo.inc/probo/pkg/server/api/agent/v1"
connect_v1 "go.probo.inc/probo/pkg/server/api/connect/v1"
@@ -262,13 +262,11 @@ func NewServer(cfg Config) (*Server, error) {
cfg.TokenSecret,
cfg.File,
cfg.BaseURL,
func(ctx context.Context, host string) bool {
if host == cfg.BaseURL.Host() {
return true
}
return cfg.Visitor.IsVerifiedRedirectHost(ctx, host)
},
saferedirect.Any(
saferedirect.StaticHosts(cfg.BaseURL.Host()),
saferedirect.Origins(cfg.AllowedOrigins...),
cfg.Visitor.IsVerifiedRedirectHost,
),
cfg.GraphQLLimits,
),
agentHandler: agent_v1.NewMux(

View File

@@ -15,7 +15,6 @@
package complianceportal_v1
import (
"context"
"net/http"
"github.com/go-chi/chi/v5"
@@ -27,6 +26,7 @@ import (
"go.probo.inc/probo/pkg/iam"
"go.probo.inc/probo/pkg/mailman"
"go.probo.inc/probo/pkg/resourcealias"
"go.probo.inc/probo/pkg/saferedirect"
"go.probo.inc/probo/pkg/securecookie"
"go.probo.inc/probo/pkg/server"
"go.probo.inc/probo/pkg/server/api/authn"
@@ -37,6 +37,7 @@ import (
type MuxConfig struct {
BaseURL *baseurl.BaseURL
ExtraHeaderFields map[string]string
AllowedOrigins []string
Logger *log.Logger
IAM *iam.Service
Visitor *visitor.Service
@@ -66,9 +67,10 @@ func NewMux(cfg MuxConfig) (http.Handler, error) {
r.Get("/robots.txt", markdownHandler.HandleRobotsTxt)
r.Get("/sitemap.xml", markdownHandler.HandleSitemap)
allowedHost := func(ctx context.Context, host string) bool {
return cfg.Visitor.IsVerifiedRedirectHost(ctx, host)
}
allowedHost := saferedirect.Any(
saferedirect.Origins(cfg.AllowedOrigins...),
cfg.Visitor.IsVerifiedRedirectHost,
)
oauthInitiateHandler := NewOAuthInitiateHandler(
cfg.BaseURL,