Add SAML support

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
Bryan Frimin
2025-10-29 18:42:12 +01:00
parent 3018a3e691
commit 2766f8e423
97 changed files with 14824 additions and 2812 deletions

View File

@@ -19,13 +19,53 @@ import (
"errors"
"runtime/debug"
"github.com/getprobo/probo/pkg/auth"
"github.com/vektah/gqlparser/v2/gqlerror"
"go.gearno.de/kit/httpserver"
"go.gearno.de/kit/log"
)
func RecoverFunc(ctx context.Context, err any) error {
if gqlErr, ok := err.(*gqlerror.Error); ok {
return gqlErr
}
var errSAMLRequired auth.ErrSAMLAuthRequired
if errors.As(asError(err), &errSAMLRequired) {
return &gqlerror.Error{
Message: "Additional authentication required to access this organization",
Extensions: map[string]any{
"code": "AUTHENTICATION_REQUIRED",
"requiresSaml": true,
"redirectUrl": errSAMLRequired.RedirectURL,
"samlConfigId": errSAMLRequired.ConfigID.String(),
"organizationId": errSAMLRequired.OrganizationID.String(),
},
}
}
var errPasswordRequired auth.ErrPasswordAuthRequired
if errors.As(asError(err), &errPasswordRequired) {
return &gqlerror.Error{
Message: "Additional authentication required to access this organization",
Extensions: map[string]any{
"code": "AUTHENTICATION_REQUIRED",
"requiresSaml": false,
"redirectUrl": errPasswordRequired.RedirectURL,
"organizationId": errPasswordRequired.OrganizationID.String(),
},
}
}
logger := httpserver.LoggerFromContext(ctx)
logger.Error("resolver panic", log.Any("error", err), log.Any("stack", string(debug.Stack())))
return errors.New("internal server error")
}
func asError(err any) error {
if e, ok := err.(error); ok {
return e
}
return errors.New("unknown panic")
}