OverviewFilesCommitsIssuesDocsReleasesPeers

pear-git commits / fa18a23

Filter private repos from public API listing
Private repos are now hidden from /api/repos for non-admin users. Only admins (authenticated with admin permissions) see private repos. Anonymous frontpage browsing won't show them. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
fa18a23a1187079b972be691ee9c4b7b59c3d503
by plankatron <fleeky@gmail.com> · 2026-04-07T04:26:10.000Z

Changed files (1) +22 -13

lib/routes/repos.js +22 -13
……@@ -55,19 +55,28 @@ export function registerRepoRoutes(router) {
5555async function handleListRepos(req, res, server) {
5656 const { repos, linkedRepos } = server.repoData
5757 try {
58 const repoList = repos.map(repo => ({
59 name: repo.name,
60 path: repo.path,
61 commits: repo.commits || 0,
62 branches: repo.branches || 0,
63 lastCommit: repo.lastCommit || null,
64 visibility: repo.visibility || 'public',
65 owner: repo.owner || null,
66 category: repo.category || null,
67 namespace: repo.namespace || null,
68 deploy: repo.deploy || null,
69 linked: linkedRepos && linkedRepos.has(repo.name) ? true : undefined
70 }))
58 // Check if request is from an admin (has valid auth)
59 const isAdmin = req.user && req.user.globalPermissions && req.user.globalPermissions.admin
60
61 const repoList = repos
62 .filter(repo => {
63 // Private repos only visible to admins
64 if ((repo.visibility === 'private') && !isAdmin) return false
65 return true
66 })
67 .map(repo => ({
68 name: repo.name,
69 path: repo.path,
70 commits: repo.commits || 0,
71 branches: repo.branches || 0,
72 lastCommit: repo.lastCommit || null,
73 visibility: repo.visibility || 'public',
74 owner: repo.owner || null,
75 category: repo.category || null,
76 namespace: repo.namespace || null,
77 deploy: repo.deploy || null,
78 linked: linkedRepos && linkedRepos.has(repo.name) ? true : undefined
79 }))
7180
7281 json(res, repoList)
7382 } catch (err) {