package connect_v1 // This file will be automatically regenerated based on the schema, any resolver // implementations // will be copied through when generating and any unknown code will be moved to the end. // Code generated by github.com/99designs/gqlgen version v0.17.90 import ( "context" "errors" "go.gearno.de/kit/log" "go.probo.inc/probo/pkg/coredata" "go.probo.inc/probo/pkg/iam" "go.probo.inc/probo/pkg/server/api/connect/v1/schema" "go.probo.inc/probo/pkg/server/api/connect/v1/types" "go.probo.inc/probo/pkg/server/gqlutils" ) // CreateSAMLConfiguration is the resolver for the createSAMLConfiguration field. func (r *mutationResolver) CreateSAMLConfiguration(ctx context.Context, input types.CreateSAMLConfigurationInput) (*types.CreateSAMLConfigurationPayload, error) { if err := r.authorize(ctx, input.OrganizationID, iam.ActionSAMLConfigurationCreate); err != nil { return nil, err } req := &iam.CreateSAMLConfigurationRequest{ EmailDomain: input.EmailDomain, IdPEntityID: input.IdpEntityID, IdPSsoURL: input.IdpSsoURL, IdPCertificate: input.IdpCertificate, AutoSignupEnabled: input.AutoSignupEnabled, } if input.AttributeMappings != nil { req.AttributeEmail = input.AttributeMappings.Email req.AttributeFirstname = input.AttributeMappings.FirstName req.AttributeLastname = input.AttributeMappings.LastName req.AttributeRole = input.AttributeMappings.Role } samlConfiguration, err := r.iam.OrganizationService.CreateSAMLConfiguration( ctx, input.OrganizationID, req, ) if err != nil { if _, ok := errors.AsType[*iam.ErrSAMLConfigurationEmailDomainAlreadyExists](err); ok { return nil, gqlutils.Conflict(ctx, err) } r.logger.ErrorCtx(ctx, "cannot create saml configuration", log.Error(err)) return nil, gqlutils.Internal(ctx) } return &types.CreateSAMLConfigurationPayload{ SamlConfigurationEdge: types.NewSAMLConfigurationEdge( samlConfiguration, coredata.SAMLConfigurationOrderFieldCreatedAt, ), }, nil } // UpdateSAMLConfiguration is the resolver for the updateSAMLConfiguration field. func (r *mutationResolver) UpdateSAMLConfiguration(ctx context.Context, input types.UpdateSAMLConfigurationInput) (*types.UpdateSAMLConfigurationPayload, error) { if err := r.authorize(ctx, input.SamlConfigurationID, iam.ActionSAMLConfigurationUpdate); err != nil { return nil, err } req := &iam.UpdateSAMLConfigurationRequest{ IdPEntityID: input.IdpEntityID, IdPSsoURL: input.IdpSsoURL, IdPCertificate: input.IdpCertificate, AutoSignupEnabled: input.AutoSignupEnabled, EnforcementPolicy: &input.EnforcementPolicy, } if input.AttributeMappings != nil { req.AttributeEmail = input.AttributeMappings.Email req.AttributeFirstname = input.AttributeMappings.FirstName req.AttributeLastname = input.AttributeMappings.LastName req.AttributeRole = input.AttributeMappings.Role } samlConfiguration, err := r.iam.OrganizationService.UpdateSAMLConfiguration( ctx, input.OrganizationID, input.SamlConfigurationID, req, ) if err != nil { r.logger.ErrorCtx(ctx, "cannot update saml configuration", log.Error(err)) return nil, gqlutils.Internal(ctx) } return &types.UpdateSAMLConfigurationPayload{ SamlConfiguration: types.NewSAMLConfiguration(samlConfiguration), }, nil } // DeleteSAMLConfiguration is the resolver for the deleteSAMLConfiguration field. func (r *mutationResolver) DeleteSAMLConfiguration(ctx context.Context, input types.DeleteSAMLConfigurationInput) (*types.DeleteSAMLConfigurationPayload, error) { if err := r.authorize(ctx, input.OrganizationID, iam.ActionSAMLConfigurationDelete); err != nil { return nil, err } err := r.iam.OrganizationService.DeleteSAMLConfiguration(ctx, input.OrganizationID, input.SamlConfigurationID) if err != nil { r.logger.ErrorCtx(ctx, "cannot delete saml configuration", log.Error(err)) return nil, gqlutils.Internal(ctx) } return &types.DeleteSAMLConfigurationPayload{DeletedSamlConfigurationID: input.SamlConfigurationID}, nil } // TestLoginURL is the resolver for the testLoginUrl field. func (r *sAMLConfigurationResolver) TestLoginURL(ctx context.Context, obj *types.SAMLConfiguration) (string, error) { return r.baseURL.WithPath("/api/connect/v1/saml/2.0/" + obj.ID.String()).MustString(), nil } // Permission is the resolver for the permission field. func (r *sAMLConfigurationResolver) Permission(ctx context.Context, obj *types.SAMLConfiguration, action string) (bool, error) { return r.Resolver.Permission(ctx, obj, action) } // TotalCount is the resolver for the totalCount field. func (r *sAMLConfigurationConnectionResolver) TotalCount(ctx context.Context, obj *types.SAMLConfigurationConnection) (*int, error) { switch obj.Resolver.(type) { case *organizationResolver: count, err := r.iam.OrganizationService.CountSAMLConfigurations(ctx, obj.ParentID) if err != nil { r.logger.ErrorCtx(ctx, "cannot count saml configurations", log.Error(err)) return nil, gqlutils.Internal(ctx) } return &count, nil } r.logger.ErrorCtx(ctx, "unsupported resolver", log.Any("resolver", obj.Resolver)) return nil, gqlutils.Internal(ctx) } // SAMLConfiguration returns schema.SAMLConfigurationResolver implementation. func (r *Resolver) SAMLConfiguration() schema.SAMLConfigurationResolver { return &sAMLConfigurationResolver{r} } // SAMLConfigurationConnection returns schema.SAMLConfigurationConnectionResolver implementation. func (r *Resolver) SAMLConfigurationConnection() schema.SAMLConfigurationConnectionResolver { return &sAMLConfigurationConnectionResolver{r} } type sAMLConfigurationResolver struct{ *Resolver } type sAMLConfigurationConnectionResolver struct{ *Resolver }