Skip to content

Commit 1bec723

Browse files
committed
temporary patch to avoid shipping a major security hole
1 parent 6154dbe commit 1bec723

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

Sources/UnidocServer/Operations/Procedures/Unidoc.BuildArtifact (ext).swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ import S3Client
55
extension Unidoc.BuildArtifact
66
{
77
mutating
8-
func export(from server:Unidoc.Server) async throws -> [Unidoc.BuildLogType]
8+
func export(from server:Unidoc.Server,
9+
_logsIncluded:Bool = true) async throws -> [Unidoc.BuildLogType]
910
{
1011
var logs:[Unidoc.BuildLogType] = []
1112

1213
let logsToExport:Int = self.logs.count
13-
if logsToExport > 0
14+
if logsToExport > 0 && _logsIncluded
1415
{
1516
if let bucket:AWS.S3.Bucket = server.bucket.assets
1617
{

Sources/UnidocServer/Operations/Procedures/Unidoc.BuilderUploadOperation.swift

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,12 @@ extension Unidoc.BuilderUploadOperation:Unidoc.BlockingOperation
4040

4141
case .labeled:
4242
var artifact:Unidoc.BuildArtifact = try .init(bson: bson)
43-
let logs:[Unidoc.BuildLogType] = try await artifact.export(from: server)
43+
let logs:[Unidoc.BuildLogType]
4444

4545
switch artifact.outcome
4646
{
4747
case .failure(let reason):
48+
logs = try await artifact.export(from: server)
4849
try await server.db.packageBuilds.finishBuild(
4950
package: artifact.package,
5051
failure: reason,
@@ -54,11 +55,27 @@ extension Unidoc.BuilderUploadOperation:Unidoc.BlockingOperation
5455
case .success(let snapshot):
5556
/// A successful (labeled) build also sets the platform preference, since we now
5657
/// know that the package can be built on that platform.
57-
let _:Unidoc.PackageMetadata? = try await server.db.packages.reset(
58+
let _metadata:Unidoc.PackageMetadata? = try await server.db.packages.reset(
5859
platformPreference: snapshot.metadata.triple,
5960
of: snapshot.id.package,
6061
with: session)
6162

63+
/// Right now, exporting build logs for private repositories is a security
64+
/// hazard, because the logs contain secrets, and the log URLs are easily
65+
/// predicted. For now, we just discard the logs for private repositories.
66+
let _logsIncluded:Bool
67+
if case .github(let origin)? = _metadata?.repo?.origin,
68+
case _? = origin.installation
69+
{
70+
_logsIncluded = false
71+
}
72+
else
73+
{
74+
_logsIncluded = true
75+
}
76+
77+
logs = try await artifact.export(from: server, _logsIncluded: _logsIncluded)
78+
6279
try await server.db.packageBuilds.finishBuild(
6380
package: artifact.package,
6481
failure: nil,

0 commit comments

Comments
 (0)