From 3f484ac3306bab3fb6ab6bfa41991d29f6165894 Mon Sep 17 00:00:00 2001 From: Ludovic Vielle Date: Wed, 10 Jun 2026 09:25:20 +0200 Subject: [PATCH] Compute stable URL in types.NewFile, wire baseURL into console v1 Resolver Signed-off-by: Ludovic Vielle --- pkg/server/api/console/v1/audit_resolvers.go | 2 +- .../api/console/v1/evidence_resolvers.go | 2 +- pkg/server/api/console/v1/graphql_handler.go | 3 +++ pkg/server/api/console/v1/resolver.go | 2 ++ .../api/console/v1/third_party_resolvers.go | 2 +- .../api/console/v1/trust_center_resolvers.go | 2 +- pkg/server/api/console/v1/types/file.go | 25 +++++++++++++------ 7 files changed, 27 insertions(+), 11 deletions(-) diff --git a/pkg/server/api/console/v1/audit_resolvers.go b/pkg/server/api/console/v1/audit_resolvers.go index afb4032e4..f4ad043c4 100644 --- a/pkg/server/api/console/v1/audit_resolvers.go +++ b/pkg/server/api/console/v1/audit_resolvers.go @@ -90,7 +90,7 @@ func (r *auditResolver) ReportFile(ctx context.Context, obj *types.Audit) (*type return nil, gqlutils.Internal(ctx) } - return types.NewFile(file), nil + return types.NewFile(file, r.baseURL), nil } // Controls is the resolver for the controls field. diff --git a/pkg/server/api/console/v1/evidence_resolvers.go b/pkg/server/api/console/v1/evidence_resolvers.go index 008741261..cd5edcd9e 100644 --- a/pkg/server/api/console/v1/evidence_resolvers.go +++ b/pkg/server/api/console/v1/evidence_resolvers.go @@ -43,7 +43,7 @@ func (r *evidenceResolver) File(ctx context.Context, obj *types.Evidence) (*type return nil, gqlutils.Internal(ctx) } - return types.NewFile(file), nil + return types.NewFile(file, r.baseURL), nil } // Task is the resolver for the task field. diff --git a/pkg/server/api/console/v1/graphql_handler.go b/pkg/server/api/console/v1/graphql_handler.go index 1b738885f..0ea4b52d5 100644 --- a/pkg/server/api/console/v1/graphql_handler.go +++ b/pkg/server/api/console/v1/graphql_handler.go @@ -20,6 +20,7 @@ import ( "go.gearno.de/kit/log" "go.probo.inc/probo/pkg/accessreview" "go.probo.inc/probo/pkg/agentrun" + "go.probo.inc/probo/pkg/baseurl" "go.probo.inc/probo/pkg/connector" "go.probo.inc/probo/pkg/connector/provider" "go.probo.inc/probo/pkg/cookiebanner" @@ -49,6 +50,7 @@ func NewGraphQLHandler( logger *log.Logger, thirdPartySvc *thirdparty.Service, riskManagementSvc *riskmanagement.Service, + baseURL *baseurl.BaseURL, ) http.Handler { config := schema.Config{ Resolvers: &Resolver{ @@ -66,6 +68,7 @@ func NewGraphQLHandler( riskManagement: riskManagementSvc, thirdParty: thirdPartySvc, customDomainCname: customDomainCname, + baseURL: baseURL, logger: logger, }, } diff --git a/pkg/server/api/console/v1/resolver.go b/pkg/server/api/console/v1/resolver.go index 6136e22d3..3b2b51839 100644 --- a/pkg/server/api/console/v1/resolver.go +++ b/pkg/server/api/console/v1/resolver.go @@ -64,6 +64,7 @@ type ( riskManagement *riskmanagement.Service thirdParty *thirdparty.Service logger *log.Logger + baseURL *baseurl.BaseURL customDomainCname string } ) @@ -104,6 +105,7 @@ func NewMux( logger, thirdPartySvc, riskManagementSvc, + baseURL, ) r.Group(func(r chi.Router) { diff --git a/pkg/server/api/console/v1/third_party_resolvers.go b/pkg/server/api/console/v1/third_party_resolvers.go index e5df70121..546ecae26 100644 --- a/pkg/server/api/console/v1/third_party_resolvers.go +++ b/pkg/server/api/console/v1/third_party_resolvers.go @@ -1064,7 +1064,7 @@ func (r *thirdPartyComplianceReportResolver) File(ctx context.Context, obj *type return nil, gqlutils.Internal(ctx) } - return types.NewFile(file), nil + return types.NewFile(file, r.baseURL), nil } // Permission is the resolver for the permission field. diff --git a/pkg/server/api/console/v1/trust_center_resolvers.go b/pkg/server/api/console/v1/trust_center_resolvers.go index 04c414468..da12687d2 100644 --- a/pkg/server/api/console/v1/trust_center_resolvers.go +++ b/pkg/server/api/console/v1/trust_center_resolvers.go @@ -1079,7 +1079,7 @@ func (r *trustCenterDocumentAccessResolver) ReportFile(ctx context.Context, obj return nil, gqlutils.Internal(ctx) } - return types.NewFile(file), nil + return types.NewFile(file, r.baseURL), nil } // Audit is the resolver for the audit field. diff --git a/pkg/server/api/console/v1/types/file.go b/pkg/server/api/console/v1/types/file.go index 73294dda2..3dd2e25bf 100644 --- a/pkg/server/api/console/v1/types/file.go +++ b/pkg/server/api/console/v1/types/file.go @@ -15,16 +15,27 @@ package types import ( + "go.probo.inc/probo/pkg/baseurl" "go.probo.inc/probo/pkg/coredata" ) -func NewFile(r *coredata.File) *File { +func NewFile(r *coredata.File, base *baseurl.BaseURL) *File { + var path string + if r.Visibility == coredata.FileVisibilityPublic { + path = "/api/files/v1/public/" + r.ID.String() + } else { + path = "/api/files/v1/" + r.ID.String() + } + + url := base.WithPath(path).MustString() + return &File{ - ID: r.ID, - MimeType: r.MimeType, - FileName: r.FileName, - Size: r.FileSize, - CreatedAt: r.CreatedAt, - UpdatedAt: r.UpdatedAt, + ID: r.ID, + MimeType: r.MimeType, + FileName: r.FileName, + Size: r.FileSize, + DownloadURL: url, + CreatedAt: r.CreatedAt, + UpdatedAt: r.UpdatedAt, } }