Skip to content

Commit f69d50f

Browse files
fix optional path segments not working out as planned
1 parent 0dab4ad commit f69d50f

File tree

6 files changed

+144
-82
lines changed

6 files changed

+144
-82
lines changed

routers/api/v1/api.go

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,11 +1196,13 @@ func Routes() *web.Router {
11961196
// (repo scope)
11971197
m.Group("/starred", func() {
11981198
m.Get("", user.GetMyStarredRepos)
1199-
m.Group("/{username}/{group_id}?/{reponame}", func() {
1199+
fn := func() {
12001200
m.Get("", user.IsStarring)
12011201
m.Put("", user.Star)
12021202
m.Delete("", user.Unstar)
1203-
}, repoAssignment(), checkTokenPublicOnly())
1203+
}
1204+
m.Group("/{username}/{reponame}", fn, repoAssignment(), checkTokenPublicOnly())
1205+
m.Group("/{username}/{group_id}/{reponame}", fn, repoAssignment(), checkTokenPublicOnly())
12041206
}, reqStarsEnabled(), tokenRequiresScopes(auth_model.AccessTokenScopeCategoryRepository))
12051207
m.Get("/times", repo.ListMyTrackedTimes)
12061208
m.Get("/stopwatches", repo.GetStopwatches)
@@ -1247,8 +1249,7 @@ func Routes() *web.Router {
12471249

12481250
// (repo scope)
12491251
m.Post("/migrate", reqToken(), bind(api.MigrateRepoOptions{}), repo.Migrate)
1250-
1251-
m.Group("/{username}/{group_id}?/{reponame}", func() {
1252+
fn := func() {
12521253
m.Get("/compare/*", reqRepoReader(unit.TypeCode), repo.CompareDiff)
12531254

12541255
m.Combo("").Get(reqAnyRepoReader(), repo.Get).
@@ -1534,27 +1535,31 @@ func Routes() *web.Router {
15341535
}, reqAdmin(), reqToken())
15351536

15361537
m.Methods("HEAD,GET", "/{ball_type:tarball|zipball|bundle}/*", reqRepoReader(unit.TypeCode), repo.DownloadArchive)
1537-
}, repoAssignment(), checkTokenPublicOnly())
1538+
}
1539+
m.Group("/{username}/{reponame}", fn, repoAssignment(), checkTokenPublicOnly())
1540+
m.Group("/{username}/{group_id}/{reponame}", fn, repoAssignment(), checkTokenPublicOnly())
15381541
}, tokenRequiresScopes(auth_model.AccessTokenScopeCategoryRepository))
15391542

15401543
// Artifacts direct download endpoint authenticates via signed url
15411544
// it is protected by the "sig" parameter (to help to access private repo), so no need to use other middlewares
1542-
m.Get("/repos/{username}/{group_id}?/{reponame}/actions/artifacts/{artifact_id}/zip/raw", repo.DownloadArtifactRaw)
1545+
m.Get("/repos/{username}/{reponame}/actions/artifacts/{artifact_id}/zip/raw", repo.DownloadArtifactRaw)
1546+
m.Get("/repos/{username}/{group_id}/{reponame}/actions/artifacts/{artifact_id}/zip/raw", repo.DownloadArtifactRaw)
15431547

15441548
// Notifications (requires notifications scope)
15451549
m.Group("/repos", func() {
1546-
m.Group("/{username}/{group_id}?/{reponame}", func() {
1550+
fn := func() {
15471551
m.Combo("/notifications", reqToken()).
15481552
Get(notify.ListRepoNotifications).
15491553
Put(notify.ReadRepoNotifications)
1550-
}, repoAssignment(), checkTokenPublicOnly())
1554+
}
1555+
m.Group("/{username}/{reponame}", fn, repoAssignment(), checkTokenPublicOnly())
1556+
m.Group("/{username}/{group_id}/{reponame}", fn, repoAssignment(), checkTokenPublicOnly())
15511557
}, tokenRequiresScopes(auth_model.AccessTokenScopeCategoryNotification))
15521558

15531559
// Issue (requires issue scope)
15541560
m.Group("/repos", func() {
15551561
m.Get("/issues/search", repo.SearchIssues)
1556-
1557-
m.Group("/{username}/{group_id}?/{reponame}", func() {
1562+
fn := func() {
15581563
m.Group("/issues", func() {
15591564
m.Combo("").Get(repo.ListIssues).
15601565
Post(reqToken(), mustNotBeArchived, bind(api.CreateIssueOption{}), reqRepoReader(unit.TypeIssues), repo.CreateIssue)
@@ -1666,7 +1671,9 @@ func Routes() *web.Router {
16661671
Patch(reqToken(), reqRepoWriter(unit.TypeIssues, unit.TypePullRequests), bind(api.EditMilestoneOption{}), repo.EditMilestone).
16671672
Delete(reqToken(), reqRepoWriter(unit.TypeIssues, unit.TypePullRequests), repo.DeleteMilestone)
16681673
})
1669-
}, repoAssignment(), checkTokenPublicOnly())
1674+
}
1675+
m.Group("/{username}/{reponame}", fn, repoAssignment(), checkTokenPublicOnly())
1676+
m.Group("/{username}/{group_id}/{reponame}", fn, repoAssignment(), checkTokenPublicOnly())
16701677
}, tokenRequiresScopes(auth_model.AccessTokenScopeCategoryIssue))
16711678

16721679
// NOTE: these are Gitea package management API - see packages.CommonRoutes and packages.DockerContainerRoutes for endpoints that implement package manager APIs

routers/common/lfs.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const RouterMockPointCommonLFS = "common-lfs"
1414

1515
func AddOwnerRepoGitLFSRoutes(m *web.Router, middlewares ...any) {
1616
// shared by web and internal routers
17-
m.Group("/{username}/{reponame}/info/lfs", func() {
17+
fn := func() {
1818
m.Post("/objects/batch", lfs.CheckAcceptMediaType, lfs.BatchHandler)
1919
m.Put("/objects/{oid}/{size}", lfs.UploadHandler)
2020
m.Get("/objects/{oid}/{filename}", lfs.DownloadHandler)
@@ -27,5 +27,7 @@ func AddOwnerRepoGitLFSRoutes(m *web.Router, middlewares ...any) {
2727
m.Post("/{lid}/unlock", lfs.UnLockHandler)
2828
}, lfs.CheckAcceptMediaType)
2929
m.Any("/*", http.NotFound)
30-
}, append([]any{web.RouterMockPoint(RouterMockPointCommonLFS)}, middlewares...)...)
30+
}
31+
m.Group("/{username}/{reponame}/info/lfs", fn, append([]any{web.RouterMockPoint(RouterMockPointCommonLFS)}, middlewares...)...)
32+
m.Group("/{username}/{group_id}/{reponame}/info/lfs", fn, append([]any{web.RouterMockPoint(RouterMockPointCommonLFS)}, middlewares...)...)
3133
}

routers/web/githttp.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
)
1111

1212
func addOwnerRepoGitHTTPRouters(m *web.Router) {
13-
m.Group("/{username}/{group_id}?/{reponame}", func() {
13+
fn := func() {
1414
m.Methods("POST,OPTIONS", "/git-upload-pack", repo.ServiceUploadPack)
1515
m.Methods("POST,OPTIONS", "/git-receive-pack", repo.ServiceReceivePack)
1616
m.Methods("GET,OPTIONS", "/info/refs", repo.GetInfoRefs)
@@ -22,5 +22,7 @@ func addOwnerRepoGitHTTPRouters(m *web.Router) {
2222
m.Methods("GET,OPTIONS", "/objects/{head:[0-9a-f]{2}}/{hash:[0-9a-f]{38,62}}", repo.GetLooseObject)
2323
m.Methods("GET,OPTIONS", "/objects/pack/pack-{file:[0-9a-f]{40,64}}.pack", repo.GetPackFile)
2424
m.Methods("GET,OPTIONS", "/objects/pack/pack-{file:[0-9a-f]{40,64}}.idx", repo.GetIdxFile)
25-
}, optSignInIgnoreCsrf, repo.HTTPGitEnabledHandler, repo.CorsHandler(), context.UserAssignmentWeb())
25+
}
26+
m.Group("/{username}/{reponame}", fn, optSignInIgnoreCsrf, repo.HTTPGitEnabledHandler, repo.CorsHandler(), context.UserAssignmentWeb())
27+
m.Group("/{username}/{group_id}/{reponame}", fn, optSignInIgnoreCsrf, repo.HTTPGitEnabledHandler, repo.CorsHandler(), context.UserAssignmentWeb())
2628
}

0 commit comments

Comments
 (0)