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.

Fold admin work into repository settings and a Users page

9579c1f976254fdeb2ec73d4016db5b25c7921c1 · Keenan Nemetz · 14d ago · parent 381d6aac

Fold admin work into repository settings and a Users page

Remove the combined /admin tabs. Per-repository access rules now live on the repository's Settings page, visible to instance admins while repository details and the danger zone stay with repository admins. User management moves to /users, linked from the top navigation only for instance admins, and repository creation moves to /repos/new. Align the invite, danger-zone, and settings forms with the shared card-and-actions layout, and make settings section headings consistent.

server/server.go +11−13

@@ -178,19 +178,16 @@ func (s *Server) routes() *http.ServeMux {
178 178 mux.HandleFunc("POST /account/passkeys/finish", w.AddPasskeyFinish)
179 179 mux.HandleFunc("GET /auth.js", w.AuthJS)
180 180 mux.HandleFunc("GET /runners", w.RunnersPage)
181 mux.HandleFunc("GET /admin", w.AdminPage)
182 mux.HandleFunc("GET /admin/repos/new", w.AdminNewRepoPage)
183 mux.HandleFunc("POST /admin/repos", w.CreateAdminRepo)
184 mux.HandleFunc("GET /admin/users", w.AdminUsersPage)
185 mux.HandleFunc("POST /admin/users", w.CreateAdminUser)
186 mux.HandleFunc("GET /admin/users/{name}", w.AdminUserPage)
187 mux.HandleFunc("POST /admin/users/{name}/admin", w.SetAdminUser)
188 mux.HandleFunc("POST /admin/users/{name}/retire", w.RetireAdminUser)
189 mux.HandleFunc("POST /admin/users/{name}/invite", w.InviteAdminUser)
190 mux.HandleFunc("POST /admin/users/{name}/sessions/revoke", w.RevokeAdminUserSessions)
191 mux.HandleFunc("POST /admin/users/{name}/keys/remove", w.RemoveAdminUserKey)
192 mux.HandleFunc("GET /admin/repos/{name}/access", w.AdminAccessPage)
193 mux.HandleFunc("POST /admin/repos/{name}/access", w.SaveAdminAccess)
181 mux.HandleFunc("GET /repos/new", w.AdminNewRepoPage)
182 mux.HandleFunc("POST /repos", w.CreateAdminRepo)
183 mux.HandleFunc("GET /users", w.AdminUsersPage)
184 mux.HandleFunc("POST /users", w.CreateAdminUser)
185 mux.HandleFunc("GET /users/{name}", w.AdminUserPage)
186 mux.HandleFunc("POST /users/{name}/admin", w.SetAdminUser)
187 mux.HandleFunc("POST /users/{name}/retire", w.RetireAdminUser)
188 mux.HandleFunc("POST /users/{name}/invite", w.InviteAdminUser)
189 mux.HandleFunc("POST /users/{name}/sessions/revoke", w.RevokeAdminUserSessions)
190 mux.HandleFunc("POST /users/{name}/keys/remove", w.RemoveAdminUserKey)
194 191 mux.HandleFunc("GET /r/{name}", w.Overview)
195 192 mux.HandleFunc("GET /r/{name}/activity", w.Activity)
196 193 mux.HandleFunc("GET /r/{name}/code", w.Code)
@@ -234,6 +231,7 @@ func (s *Server) routes() *http.ServeMux {
234 231 mux.HandleFunc("GET /r/{name}/locks", w.LocksPage)
235 232 mux.HandleFunc("GET /r/{name}/settings", w.SettingsPage)
236 233 mux.HandleFunc("POST /r/{name}/settings", w.SaveSettings)
234 mux.HandleFunc("POST /r/{name}/settings/access", w.SaveRepositoryAccess)
237 235 mux.HandleFunc("POST /r/{name}/settings/rename", w.RenameRepository)
238 236 mux.HandleFunc("POST /r/{name}/settings/delete", w.DeleteRepository)
239 237 mux.HandleFunc("GET /r/{name}/releases", w.Releases)