Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/git/vole.git

Write over SSH with a registered key:

git clone ssh://git@0.0.0.0:2222/vole.git

A free and open-source forge that lives in your Git repo.

Let instance admins read every repository

381d6aac38ab785d879fa82a6b8397ce6f543bab · Keenan Nemetz · 14d ago · parent 074ae160

Let instance admins read every repository

An instance administrator can already rewrite any repository's ACL, so hiding its content only hides what they govern. Raise them to at least read in the web and SSH paths, preserving any higher explicit role, and enforce the read rule on SSH upload-pack, where any authenticated key could previously clone a private repository by name. Anonymous HTTP clone still answers 404 because it carries no identity.

Group the admin surface into Repositories and Users tabs with a shared header, and teach Page.Section to mark the active tab.

server/web/templates/admin_users.html +5−15

@@ -1,14 +1,6 @@
1 1 {{define "admin_users"}}
2 2 {{template "header" .}}
3 <div class="page-head">
4 <div class="page-head-main">
5 <h1>Users</h1>
6 <p class="page-sub">Accounts, enrollment links, keys, and sessions. New accounts start with an enrollment link, never a pasted SSH key.</p>
7 </div>
8 <div class="page-head-actions">
9 <a class="button secondary" href="/admin">{{icon "book-open"}}Repositories</a>
10 </div>
11 </div>
3 {{template "adminhead" .}}
12 4
13 5 {{if .Error}}<div class="flash bad">{{.Error}}</div>{{end}}
14 6
@@ -47,7 +39,8 @@
47 39
48 40 {{define "admin_user"}}
49 41 {{template "header" .}}
50 <div class="page-head">
42 {{template "adminhead" .}}
43 <div class="page-head subhead">
51 44 <div class="page-head-main">
52 45 <h1>{{.Account.Name}}</h1>
53 46 <p class="page-sub">
@@ -56,9 +49,6 @@
56 49 · created {{since .Account.Created.Unix}}
57 50 </p>
58 51 </div>
59 <div class="page-head-actions">
60 <a class="button secondary" href="/admin/users">{{icon "users"}}All users</a>
61 </div>
62 52 </div>
63 53
64 54 {{if .Error}}<div class="flash bad">{{.Error}}</div>{{end}}
@@ -154,7 +144,8 @@
154 144
155 145 {{define "admin_invite"}}
156 146 {{template "header" .}}
157 <div class="page-head">
147 {{template "adminhead" .}}
148 <div class="page-head subhead">
158 149 <div class="page-head-main">
159 150 <h1>Enrollment link</h1>
160 151 <p class="page-sub">For <strong>{{.Account.Name}}</strong> · expires {{.Expires.UTC.Format "2006-01-02 15:04 UTC"}}</p>
@@ -173,7 +164,6 @@
173 164
174 165 <div class="form-actions">
175 166 <a class="button secondary" href="/admin/users/{{.Account.Name}}">{{icon "user"}}Back to account</a>
176 <a class="button" href="/admin/users">{{icon "users"}}All users</a>
177 167 </div>
178 168 {{template "footer" .}}
179 169 {{end}}