Skip to content

Commit 705d897

Browse files
committed
add an interface for hiding/unhiding packages, exclude hidden packages from the search index and the activity feed
1 parent 3967f4a commit 705d897

15 files changed

+228
-44
lines changed

Package.resolved

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/Swiftinit/Tree/Swiftinit.API.Post.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ extension Swiftinit.API
33
@frozen public
44
enum Post:String, Swiftinit.Method
55
{
6-
case alignPackage = "align-package"
7-
case indexRepo = "index-repo"
8-
case indexRepoTag = "index-repo-tag"
6+
case packageAlign = "package-align"
7+
case packageConfig = "package-config"
8+
case packageIndex = "package-index"
9+
case packageIndexTag = "package-index-tag"
10+
911
case uplinkAll = "uplink-all"
1012
case uplink
1113
case unlink

Sources/SwiftinitPages/Surfaces/Administration/Swiftinit.AdminPage.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ extension Swiftinit.AdminPage:Swiftinit.AdministrativePage
105105
main[.form]
106106
{
107107
$0.enctype = "\(MediaType.application(.x_www_form_urlencoded))"
108-
$0.action = "\(Swiftinit.API[.indexRepo])"
108+
$0.action = "\(Swiftinit.API[.packageIndex])"
109109
$0.method = "post"
110110
}
111111
content:

Sources/SwiftinitPages/Surfaces/Editions/Swiftinit.TagsPage.swift

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,10 @@ extension Swiftinit.TagsPage:Swiftinit.ApplicationPage
236236
{
237237
$0[.span] { $0.class = "placeholder" } = "none"
238238
}
239-
240239
}
240+
241+
$0[.dt] = "Hidden"
242+
$0[.dd] = self.package.hidden ? "yes" : "no"
241243
}
242244

243245
guard self.user?.maintains(package: self.package) ?? !format.secure
@@ -249,7 +251,7 @@ extension Swiftinit.TagsPage:Swiftinit.ApplicationPage
249251
$0[.form]
250252
{
251253
$0.enctype = "\(MediaType.application(.x_www_form_urlencoded))"
252-
$0.action = "\(Swiftinit.API[.alignPackage])"
254+
$0.action = "\(Swiftinit.API[.packageAlign])"
253255
$0.method = "post"
254256
}
255257
content:
@@ -260,7 +262,7 @@ extension Swiftinit.TagsPage:Swiftinit.ApplicationPage
260262
{
261263
$0.type = "hidden"
262264
$0.name = "package"
263-
$0.value = "\(self.package.symbol)"
265+
$0.value = "\(self.package.id)"
264266
}
265267

266268
$0[.input]
@@ -296,7 +298,39 @@ extension Swiftinit.TagsPage:Swiftinit.ApplicationPage
296298
$0[.form]
297299
{
298300
$0.enctype = "\(MediaType.application(.x_www_form_urlencoded))"
299-
$0.action = "\(Swiftinit.API[.indexRepoTag])"
301+
$0.action = "\(Swiftinit.API[.packageConfig])"
302+
$0.method = "post"
303+
}
304+
content:
305+
{
306+
$0[.p]
307+
{
308+
$0[.input]
309+
{
310+
$0.type = "hidden"
311+
$0.name = "package"
312+
$0.value = "\(self.package.id)"
313+
}
314+
315+
$0[.input]
316+
{
317+
$0.type = "hidden"
318+
$0.name = "hidden"
319+
$0.value = self.package.hidden ? "false" : "true"
320+
}
321+
}
322+
$0[.p]
323+
{
324+
$0[.button] { $0.type = "submit" } = self.package.hidden
325+
? "Unhide Package"
326+
: "Hide Package"
327+
}
328+
}
329+
330+
$0[.form]
331+
{
332+
$0.enctype = "\(MediaType.application(.x_www_form_urlencoded))"
333+
$0.action = "\(Swiftinit.API[.packageIndexTag])"
300334
$0.method = "post"
301335
}
302336
content:
@@ -307,7 +341,7 @@ extension Swiftinit.TagsPage:Swiftinit.ApplicationPage
307341
{
308342
$0.type = "hidden"
309343
$0.name = "package"
310-
$0.value = "\(self.package.symbol)"
344+
$0.value = "\(self.package.id)"
311345
}
312346

313347
$0[.input]
@@ -319,7 +353,7 @@ extension Swiftinit.TagsPage:Swiftinit.ApplicationPage
319353
}
320354
$0[.p]
321355
{
322-
$0[.button] { $0.type = "submit" } = "Index GitHub Tag"
356+
$0[.button] { $0.type = "submit" } = "Index Package Tag (GitHub)"
323357
}
324358
}
325359
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
extension Swiftinit.PackageConfigEndpoint
2+
{
3+
enum Update
4+
{
5+
case hidden(Bool)
6+
}
7+
}
8+
9+
import HTTP
10+
import MongoDB
11+
import UnidocDB
12+
13+
extension Swiftinit
14+
{
15+
struct PackageConfigEndpoint:Sendable
16+
{
17+
let package:Unidoc.Package
18+
let update:Update
19+
20+
init(package:Unidoc.Package, update:Update)
21+
{
22+
self.package = package
23+
self.update = update
24+
}
25+
}
26+
}
27+
extension Swiftinit.PackageConfigEndpoint:RestrictedEndpoint
28+
{
29+
func load(from server:borrowing Swiftinit.Server) async throws -> HTTP.ServerResponse?
30+
{
31+
let session:Mongo.Session = try await .init(from: server.db.sessions)
32+
let updated:Unidoc.PackageMetadata?
33+
switch self.update
34+
{
35+
case .hidden(let hidden):
36+
updated = try await server.db.packages.update(package: self.package,
37+
hidden: hidden,
38+
with: session)
39+
}
40+
41+
guard
42+
let updated:Unidoc.PackageMetadata
43+
else
44+
{
45+
return .notFound("No such package")
46+
}
47+
48+
try await server.db.unidoc.rebuildPackageList(with: session)
49+
return .redirect(.see(other: "\(Swiftinit.Tags[updated.symbol])"))
50+
}
51+
}

Sources/SwiftinitServer/Endpoints/Interactive/Swiftinit.IndexRepoEndpoint.swift renamed to Sources/SwiftinitServer/Endpoints/Interactive/Swiftinit.PackageIndexEndpoint.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import UnidocRecords
99

1010
extension Swiftinit
1111
{
12-
struct IndexRepoEndpoint:Sendable
12+
struct PackageIndexEndpoint:Sendable
1313
{
1414
let owner:String
1515
let repo:String
@@ -21,7 +21,7 @@ extension Swiftinit
2121
}
2222
}
2323
}
24-
extension Swiftinit.IndexRepoEndpoint:RestrictedEndpoint
24+
extension Swiftinit.PackageIndexEndpoint:RestrictedEndpoint
2525
{
2626
func load(from server:borrowing Swiftinit.Server) async throws -> HTTP.ServerResponse?
2727
{

Sources/SwiftinitServer/Endpoints/Interactive/Swiftinit.IndexRepoTagEndpoint.swift renamed to Sources/SwiftinitServer/Endpoints/Interactive/Swiftinit.PackageIndexTagEndpoint.swift

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@ import UnidocRecords
99

1010
extension Swiftinit
1111
{
12-
struct IndexRepoTagEndpoint:Sendable
12+
struct PackageIndexTagEndpoint:Sendable
1313
{
14-
let package:Symbol.Package
14+
let package:Unidoc.Package
1515
let tag:String
1616

17-
init(package:Symbol.Package, tag:String)
17+
init(package:Unidoc.Package, tag:String)
1818
{
1919
self.package = package
2020
self.tag = tag
2121
}
2222
}
2323
}
24-
extension Swiftinit.IndexRepoTagEndpoint:RestrictedEndpoint
24+
extension Swiftinit.PackageIndexTagEndpoint:RestrictedEndpoint
2525
{
2626
func load(from server:borrowing Swiftinit.Server) async throws -> HTTP.ServerResponse?
2727
{
@@ -35,8 +35,7 @@ extension Swiftinit.IndexRepoTagEndpoint:RestrictedEndpoint
3535
let session:Mongo.Session = try await .init(from: server.db.sessions)
3636

3737
guard
38-
let package:Unidoc.PackageMetadata = try await server.db.unidoc.package(
39-
named: self.package,
38+
let package:Unidoc.PackageMetadata = try await server.db.packages.find(id: self.package,
4039
with: session)
4140
else
4241
{

Sources/SwiftinitServer/Endpoints/Interactive/Swiftinit.RobotsEndpoint.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ extension Swiftinit.RobotsEndpoint:PublicEndpoint
4646
User-agent: *
4747
Disallow: /admin/
4848
Disallow: /auth/
49+
Disallow: /reference/
4950
5051
""")
5152
}

Sources/SwiftinitServer/Endpoints/Procedural/Swiftinit.GlobalUplinkEndpoint.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ extension Swiftinit.GlobalUplinkEndpoint:NonblockingEndpoint
2525
session:Mongo.Session,
2626
status:Status) async
2727
{
28-
try? await server.db.unidoc.rebuild(queue: self.queue, with: session)
28+
try? await server.db.unidoc.rebuildVolumes(queue: self.queue, with: session)
2929
}
3030
}

Sources/SwiftinitServer/Endpoints/Procedural/Swiftinit.PackageAlignEndpoint.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ extension Swiftinit
88
{
99
struct PackageAlignEndpoint:Sendable
1010
{
11-
let package:Symbol.Package
11+
let package:Unidoc.Package
1212
let realm:String?
1313
let force:Bool
1414

15-
init(package:Symbol.Package,
15+
init(package:Unidoc.Package,
1616
realm:String?,
1717
force:Bool)
1818
{
@@ -57,8 +57,7 @@ extension Swiftinit.PackageAlignEndpoint:NonblockingEndpoint
5757
}
5858

5959
guard
60-
let package:Unidoc.PackageMetadata = try await server.db.unidoc.package(
61-
named: self.package,
60+
let package:Unidoc.PackageMetadata = try await server.db.packages.find(id: self.package,
6261
with: session)
6362
else
6463
{

0 commit comments

Comments
 (0)