package console_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.87 import ( "context" "errors" "fmt" "go.gearno.de/kit/log" "go.probo.inc/probo/pkg/coredata" "go.probo.inc/probo/pkg/gid" "go.probo.inc/probo/pkg/iam" "go.probo.inc/probo/pkg/probo" "go.probo.inc/probo/pkg/server/api/authn" "go.probo.inc/probo/pkg/server/api/console/v1/schema" "go.probo.inc/probo/pkg/server/api/console/v1/types" "go.probo.inc/probo/pkg/server/gqlutils" ) // Node is the resolver for the node field. func (r *queryResolver) Node(ctx context.Context, id gid.GID) (types.Node, error) { var ( loadNode func(ctx context.Context, id gid.GID) (types.Node, error) action string prb = r.ProboService(ctx, id.TenantID()) ) switch id.EntityType() { case coredata.OrganizationEntityType: action = iam.ActionOrganizationGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { organization, err := prb.Organizations.Get(ctx, id) if err != nil { return nil, err } return types.NewOrganization(organization), nil } case coredata.VendorEntityType: action = probo.ActionVendorGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { vendor, err := prb.Vendors.Get(ctx, id) if err != nil { return nil, err } return types.NewVendor(vendor), nil } case coredata.FrameworkEntityType: action = probo.ActionFrameworkGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { framework, err := prb.Frameworks.Get(ctx, id) if err != nil { return nil, err } return types.NewFramework(framework), nil } case coredata.MeasureEntityType: action = probo.ActionMeasureGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { measure, err := prb.Measures.Get(ctx, id) if err != nil { return nil, err } return types.NewMeasure(measure), nil } case coredata.TaskEntityType: action = probo.ActionTaskGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { task, err := prb.Tasks.Get(ctx, id) if err != nil { return nil, err } return types.NewTask(task), nil } case coredata.EvidenceEntityType: action = probo.ActionEvidenceList loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { evidence, err := prb.Evidences.Get(ctx, id) if err != nil { return nil, err } return types.NewEvidence(evidence), nil } case coredata.DocumentEntityType: action = probo.ActionDocumentGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { document, err := prb.Documents.Get(ctx, id) if err != nil { return nil, err } return types.NewDocument(document), nil } case coredata.ControlEntityType: action = probo.ActionControlList loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { control, err := prb.Controls.Get(ctx, id) if err != nil { return nil, err } return types.NewControl(control), nil } case coredata.RiskEntityType: action = probo.ActionRiskGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { risk, err := prb.Risks.Get(ctx, id) if err != nil { return nil, err } return types.NewRisk(risk), nil } case coredata.VendorComplianceReportEntityType: action = probo.ActionVendorComplianceReportGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { vendorComplianceReport, err := prb.VendorComplianceReports.Get(ctx, id) if err != nil { return nil, err } return types.NewVendorComplianceReport(vendorComplianceReport), nil } case coredata.VendorContactEntityType: action = probo.ActionVendorContactGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { vendorContact, err := prb.VendorContacts.Get(ctx, id) if err != nil { return nil, err } return types.NewVendorContact(vendorContact), nil } case coredata.VendorServiceEntityType: action = probo.ActionVendorServiceGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { vendorService, err := prb.VendorServices.Get(ctx, id) if err != nil { return nil, err } return types.NewVendorService(vendorService), nil } case coredata.DocumentVersionEntityType: action = probo.ActionDocumentVersionList loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { documentVersion, err := prb.Documents.GetVersion(ctx, id) if err != nil { return nil, err } return types.NewDocumentVersion(documentVersion), nil } case coredata.DocumentVersionSignatureEntityType: action = probo.ActionDocumentVersionSignatureList loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { documentVersionSignature, err := prb.Documents.GetVersionSignature(ctx, id) if err != nil { return nil, err } return types.NewDocumentVersionSignature(documentVersionSignature), nil } case coredata.AssetEntityType: action = probo.ActionAssetList loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { asset, err := prb.Assets.Get(ctx, id) if err != nil { return nil, err } return types.NewAsset(asset), nil } case coredata.DatumEntityType: action = probo.ActionDatumList loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { datum, err := prb.Data.Get(ctx, id) if err != nil { return nil, err } return types.NewDatum(datum), nil } case coredata.AuditEntityType: action = probo.ActionAuditList loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { audit, err := prb.Audits.Get(ctx, id) if err != nil { return nil, err } return types.NewAudit(audit), nil } case coredata.FindingEntityType: action = probo.ActionFindingList loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { finding, err := prb.Findings.Get(ctx, id) if err != nil { return nil, err } return types.NewFinding(finding), nil } case coredata.ObligationEntityType: action = probo.ActionObligationList loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { obligation, err := prb.Obligations.Get(ctx, id) if err != nil { return nil, err } return types.NewObligation(obligation), nil } case coredata.ReportEntityType: action = probo.ActionReportGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { report, err := prb.Reports.Get(ctx, id) if err != nil { return nil, err } return types.NewReport(report), nil } case coredata.ProcessingActivityEntityType: action = probo.ActionProcessingActivityList loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { processingActivity, err := prb.ProcessingActivities.Get(ctx, id) if err != nil { return nil, err } return types.NewProcessingActivity(processingActivity), nil } case coredata.DataProtectionImpactAssessmentEntityType: // TODO: add action // action = probo.ActionDataProtectionImpactAssessmentGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { dpia, err := prb.DataProtectionImpactAssessments.Get(ctx, id) if err != nil { return nil, err } return types.NewDataProtectionImpactAssessment(dpia), nil } case coredata.TransferImpactAssessmentEntityType: // TODO: add action //action = probo.ActionTransferImpactAssessmentGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { tia, err := prb.TransferImpactAssessments.Get(ctx, id) if err != nil { return nil, err } return types.NewTransferImpactAssessment(tia), nil } case coredata.SnapshotEntityType: action = probo.ActionSnapshotList loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { snapshot, err := prb.Snapshots.Get(ctx, id) if err != nil { return nil, err } return types.NewSnapshot(snapshot), nil } case coredata.TrustCenterEntityType: action = probo.ActionTrustCenterGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { trustCenter, err := prb.TrustCenters.Get(ctx, id) if err != nil { return nil, err } var file *coredata.File if trustCenter.NonDisclosureAgreementFileID != nil { file, err = prb.Files.Get(ctx, *trustCenter.NonDisclosureAgreementFileID) if err != nil { return nil, fmt.Errorf("cannot get NDA file: %w", err) } } return types.NewTrustCenter(trustCenter, file), nil } case coredata.TrustCenterAccessEntityType: action = probo.ActionTrustCenterAccessGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { trustCenterAccess, err := prb.TrustCenterAccesses.Get(ctx, id) if err != nil { return nil, err } return types.NewTrustCenterAccess(trustCenterAccess), nil } case coredata.RightsRequestEntityType: action = probo.ActionRightsRequestGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { rightsRequest, err := prb.RightsRequests.Get(ctx, id) if err != nil { return nil, err } return types.NewRightsRequest(rightsRequest), nil } case coredata.StatementOfApplicabilityEntityType: action = probo.ActionStatementOfApplicabilityGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { statementOfApplicability, err := prb.StatementsOfApplicability.Get(ctx, id) if err != nil { return nil, err } return types.NewStatementOfApplicability(statementOfApplicability), nil } case coredata.WebhookSubscriptionEntityType: action = probo.ActionWebhookSubscriptionGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { wc, err := prb.WebhookSubscriptions.Get(ctx, id) if err != nil { return nil, err } return types.NewWebhookSubscription(wc), nil } case coredata.AccessReviewCampaignEntityType: action = probo.ActionAccessReviewCampaignGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { scope := coredata.NewScopeFromObjectID(id) campaign, err := r.accessReview.Campaigns(scope).Get(ctx, id) if err != nil { return nil, err } return types.NewAccessReviewCampaign(campaign), nil } case coredata.AccessSourceEntityType: action = probo.ActionAccessSourceGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { scope := coredata.NewScopeFromObjectID(id) source, err := r.accessReview.Sources(scope).Get(ctx, id) if err != nil { return nil, err } return types.NewAccessSource(source), nil } case coredata.AccessEntryEntityType: action = probo.ActionAccessEntryGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { scope := coredata.NewScopeFromObjectID(id) entry, err := r.accessReview.Entries(scope).Get(ctx, id) if err != nil { return nil, err } return types.NewAccessEntry(entry), nil } case coredata.CookieBannerEntityType: action = probo.ActionCookieBannerGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { scope := coredata.NewScopeFromObjectID(id) banner, err := r.cookieBanner.GetCookieBanner(ctx, scope, id) if err != nil { return nil, err } return types.NewCookieBanner(banner), nil } case coredata.CookieCategoryEntityType: action = probo.ActionCookieCategoryGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { scope := coredata.NewScopeFromObjectID(id) category, err := r.cookieBanner.GetCookieCategory(ctx, scope, id) if err != nil { return nil, err } return types.NewCookieCategory(category), nil } case coredata.CookieBannerVersionEntityType: action = probo.ActionCookieBannerVersionGet loadNode = func(ctx context.Context, id gid.GID) (types.Node, error) { scope := coredata.NewScopeFromObjectID(id) version, err := r.cookieBanner.GetCookieBannerVersion(ctx, scope, id) if err != nil { return nil, err } return &types.CookieBannerVersion{ ID: version.ID, Version: version.Version, State: string(version.State), CreatedAt: version.CreatedAt, UpdatedAt: version.UpdatedAt, }, nil } default: } if err := r.authorize(ctx, id, action); err != nil { return nil, err } node, err := loadNode(ctx, id) if err != nil { if errors.Is(err, coredata.ErrResourceNotFound) { return nil, gqlutils.NotFound(ctx, err) } r.logger.ErrorCtx(ctx, "cannot load node", log.Error(err)) return nil, gqlutils.Internal(ctx) } return node, nil } // Viewer is the resolver for the viewer field. func (r *queryResolver) Viewer(ctx context.Context) (*types.Viewer, error) { identity := authn.IdentityFromContext(ctx) session := authn.SessionFromContext(ctx) apiKey := authn.APIKeyFromContext(ctx) var viewerID gid.GID if session != nil { viewerID = session.ID } else if apiKey != nil { viewerID = apiKey.ID } else { viewerID = identity.ID } return &types.Viewer{ID: viewerID}, nil } // Mutation returns schema.MutationResolver implementation. func (r *Resolver) Mutation() schema.MutationResolver { return &mutationResolver{r} } // Query returns schema.QueryResolver implementation. func (r *Resolver) Query() schema.QueryResolver { return &queryResolver{r} } type mutationResolver struct{ *Resolver } type queryResolver struct{ *Resolver }