From 6002d7260329e4fa22c1069434d58dcc258b15c8 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Mon, 20 Feb 2017 18:05:34 -0500 Subject: [PATCH] router: fix 404 when repository name contains dot E.g. atomi.github.io --- cmd/web.go | 11 +++++++---- gogs.go | 2 +- modules/context/repo.go | 12 ++++++------ templates/.VERSION | 2 +- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/cmd/web.go b/cmd/web.go index 92fbe2a70..7f00e2398 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -632,14 +632,17 @@ func runWeb(ctx *cli.Context) error { }, ignSignIn, context.RepoAssignment(), context.RepoRef()) m.Group("/:username", func() { - m.Group("/:reponame", func() { - m.Get("", repo.Home) - m.Get("\\.git$", repo.Home) + m.Group("", func() { + m.Get("/:reponame", repo.Home) }, ignSignIn, context.RepoAssignment(true), context.RepoRef()) m.Group("/:reponame", func() { m.Head("/tasks/trigger", repo.TriggerTask) - m.Route("\\.git/*", "GET,POST", ignSignInAndCsrf, repo.HTTPContexter(), repo.HTTP) + }) + // Use the regexp to match the repository name validation + m.Group("/:reponame([\\d\\w-_\\.]+\\.git$)", func() { + m.Get("", ignSignIn, context.RepoAssignment(true), context.RepoRef(), repo.Home) + m.Route("/*", "GET,POST", ignSignInAndCsrf, repo.HTTPContexter(), repo.HTTP) }) }) // ***** END: Repository ***** diff --git a/gogs.go b/gogs.go index 76a4a107c..412c899eb 100644 --- a/gogs.go +++ b/gogs.go @@ -16,7 +16,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.9.161.0220" +const APP_VER = "0.9.162.0220" func init() { setting.AppVer = APP_VER diff --git a/modules/context/repo.go b/modules/context/repo.go index 97fd3e36f..710cbbf62 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -146,18 +146,18 @@ func RepoAssignment(args ...bool) macaron.Handler { err error ) - userName := ctx.Params(":username") - repoName := ctx.Params(":reponame") + ownerName := ctx.Params(":username") + repoName := strings.TrimSuffix(ctx.Params(":reponame"), ".git") refName := ctx.Params(":branchname") if len(refName) == 0 { refName = ctx.Params(":path") } // Check if the user is the same as the repository owner - if ctx.IsSigned && ctx.User.LowerName == strings.ToLower(userName) { + if ctx.IsSigned && ctx.User.LowerName == strings.ToLower(ownerName) { owner = ctx.User } else { - owner, err = models.GetUserByName(userName) + owner, err = models.GetUserByName(ownerName) if err != nil { if models.IsErrUserNotExist(err) { if ctx.Query("go-get") == "1" { @@ -230,9 +230,9 @@ func RepoAssignment(args ...bool) macaron.Handler { ctx.Data["RepoName"] = ctx.Repo.Repository.Name ctx.Data["IsBareRepo"] = ctx.Repo.Repository.IsBare - gitRepo, err := git.OpenRepository(models.RepoPath(userName, repoName)) + gitRepo, err := git.OpenRepository(models.RepoPath(ownerName, repoName)) if err != nil { - ctx.Handle(500, "RepoAssignment Invalid repo "+models.RepoPath(userName, repoName), err) + ctx.Handle(500, "RepoAssignment Invalid repo "+models.RepoPath(ownerName, repoName), err) return } ctx.Repo.GitRepo = gitRepo diff --git a/templates/.VERSION b/templates/.VERSION index 720049a69..9d96dbb8d 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.9.161.0220 \ No newline at end of file +0.9.162.0220 \ No newline at end of file