diff --git a/pkg/iam/saml/service.go b/pkg/iam/saml/service.go index 99380c30e..696eac955 100644 --- a/pkg/iam/saml/service.go +++ b/pkg/iam/saml/service.go @@ -99,14 +99,6 @@ func (s *Service) Run(ctx context.Context) error { } } -func (s *Service) GetEntityID() string { - return fmt.Sprintf("%s/connect/saml/metadata", s.baseURL) -} - -func (s *Service) GetAcsURL() string { - return fmt.Sprintf("%s/connect/saml/consume", s.baseURL) -} - func (s *Service) GenerateSpMetadata() ([]byte, error) { sp := s.baseServiceProvider() return xml.MarshalIndent(sp.Metadata(), "", " ") diff --git a/pkg/server/api/connect/v1/graphql_handler.go b/pkg/server/api/connect/v1/graphql_handler.go index 1bfe2ecfe..0f326456f 100644 --- a/pkg/server/api/connect/v1/graphql_handler.go +++ b/pkg/server/api/connect/v1/graphql_handler.go @@ -21,6 +21,7 @@ import ( "github.com/99designs/gqlgen/graphql" "github.com/vektah/gqlparser/v2/gqlerror" "go.gearno.de/kit/log" + "go.probo.inc/probo/pkg/baseurl" "go.probo.inc/probo/pkg/iam" "go.probo.inc/probo/pkg/securecookie" "go.probo.inc/probo/pkg/server/api/connect/v1/schema" @@ -91,11 +92,12 @@ func IsViewerDirective(ctx context.Context, obj any, next graphql.Resolver) (any return next(ctx) } -func NewGraphQLHandler(svc *iam.Service, logger *log.Logger, cookieConfig securecookie.Config) http.Handler { +func NewGraphQLHandler(svc *iam.Service, logger *log.Logger, baseURL *baseurl.BaseURL, cookieConfig securecookie.Config) http.Handler { config := schema.Config{ Resolvers: &Resolver{ logger: logger, iam: svc, + baseURL: baseURL, cookieConfig: cookieConfig, }, Directives: schema.DirectiveRoot{ diff --git a/pkg/server/api/connect/v1/resolver.go b/pkg/server/api/connect/v1/resolver.go index 24271e6e1..9e3717c5e 100644 --- a/pkg/server/api/connect/v1/resolver.go +++ b/pkg/server/api/connect/v1/resolver.go @@ -30,6 +30,7 @@ type ( Resolver struct { logger *log.Logger iam *iam.Service + baseURL *baseurl.BaseURL cookieConfig securecookie.Config } ) @@ -53,7 +54,7 @@ func NewMux(logger *log.Logger, svc *iam.Service, cookieConfig securecookie.Conf r.Use(HTTPContextMiddleware) sessionMiddleware := NewSessionMiddleware(svc, cookieConfig) - graphqlHandler := NewGraphQLHandler(svc, logger, cookieConfig) + graphqlHandler := NewGraphQLHandler(svc, logger, baseURL, cookieConfig) samlHandler := NewSAMLHandler(svc, cookieConfig, baseURL) router := r.With(sessionMiddleware) diff --git a/pkg/server/api/connect/v1/v1_resolver.go b/pkg/server/api/connect/v1/v1_resolver.go index e129e3e6e..3daabeb3d 100644 --- a/pkg/server/api/connect/v1/v1_resolver.go +++ b/pkg/server/api/connect/v1/v1_resolver.go @@ -9,7 +9,6 @@ import ( "context" "errors" "fmt" - "strings" "time" "github.com/99designs/gqlgen/graphql" @@ -1250,13 +1249,7 @@ func (r *queryResolver) CheckSSOAvailability(ctx context.Context, email string) // TestLoginURL is the resolver for the testLoginUrl field. func (r *sAMLConfigurationResolver) TestLoginURL(ctx context.Context, obj *types.SAMLConfiguration) (string, error) { - entityID := r.iam.SAMLService.GetEntityID() - parts := strings.Split(entityID, "/connect/saml/metadata") - if len(parts) != 2 { - return "", fmt.Errorf("invalid entity ID format") - } - - return fmt.Sprintf("%s/connect/saml/login/%s", parts[0], obj.ID), nil + return r.baseURL.WithPath("/api/connect/v1/saml/2.0/" + obj.ID.String()).MustString(), nil } // TotalCount is the resolver for the totalCount field.