diff options
Diffstat (limited to 'modules/middleware')
-rw-r--r-- | modules/middleware/auth.go | 7 | ||||
-rw-r--r-- | modules/middleware/context.go | 18 | ||||
-rw-r--r-- | modules/middleware/logger.go | 2 | ||||
-rw-r--r-- | modules/middleware/render.go | 2 | ||||
-rw-r--r-- | modules/middleware/repo.go | 117 |
5 files changed, 117 insertions, 29 deletions
diff --git a/modules/middleware/auth.go b/modules/middleware/auth.go index 64f75d75..bde3be72 100644 --- a/modules/middleware/auth.go +++ b/modules/middleware/auth.go @@ -7,7 +7,7 @@ package middleware import ( "net/url" - "github.com/codegangsta/martini" + "github.com/go-martini/martini" "github.com/gogits/gogs/modules/base" ) @@ -21,6 +21,11 @@ type ToggleOptions struct { func Toggle(options *ToggleOptions) martini.Handler { return func(ctx *Context) { + if !base.InstallLock { + ctx.Redirect("/install") + return + } + if options.SignOutRequire && ctx.IsSigned && ctx.Req.RequestURI != "/" { ctx.Redirect("/") return diff --git a/modules/middleware/context.go b/modules/middleware/context.go index d81ab999..d2b268cd 100644 --- a/modules/middleware/context.go +++ b/modules/middleware/context.go @@ -15,9 +15,10 @@ import ( "strings" "time" - "github.com/codegangsta/martini" + "github.com/go-martini/martini" "github.com/gogits/cache" + "github.com/gogits/git" "github.com/gogits/session" "github.com/gogits/gogs/models" @@ -41,11 +42,18 @@ type Context struct { csrfToken string Repo struct { - IsValid bool IsOwner bool IsWatching bool + IsBranch bool + IsTag bool + IsCommit bool Repository *models.Repository Owner *models.User + Commit *git.Commit + GitRepo *git.Repository + BranchName string + CommitId string + RepoLink string CloneLink struct { SSH string HTTPS string @@ -98,6 +106,10 @@ func (ctx *Context) Handle(status int, title string, err error) { ctx.HTML(status, fmt.Sprintf("status/%d", status)) } +func (ctx *Context) Debug(msg string, args ...interface{}) { + log.Debug(msg, args...) +} + func (ctx *Context) GetCookie(name string) string { cookie, err := ctx.Req.Cookie(name) if err != nil { @@ -257,7 +269,7 @@ func InitContext() martini.Handler { if user != nil { ctx.Data["SignedUser"] = user ctx.Data["SignedUserId"] = user.Id - ctx.Data["SignedUserName"] = user.LowerName + ctx.Data["SignedUserName"] = user.Name ctx.Data["IsAdmin"] = ctx.User.IsAdmin } diff --git a/modules/middleware/logger.go b/modules/middleware/logger.go index dcf85246..fc8e1a81 100644 --- a/modules/middleware/logger.go +++ b/modules/middleware/logger.go @@ -11,7 +11,7 @@ import ( "runtime" "time" - "github.com/codegangsta/martini" + "github.com/go-martini/martini" ) var isWindows bool diff --git a/modules/middleware/render.go b/modules/middleware/render.go index 869ef9ab..98d485af 100644 --- a/modules/middleware/render.go +++ b/modules/middleware/render.go @@ -17,7 +17,7 @@ import ( "path/filepath" "time" - "github.com/codegangsta/martini" + "github.com/go-martini/martini" "github.com/gogits/gogs/modules/base" ) diff --git a/modules/middleware/repo.go b/modules/middleware/repo.go index 54b735af..f446d6a8 100644 --- a/modules/middleware/repo.go +++ b/modules/middleware/repo.go @@ -9,24 +9,40 @@ import ( "fmt" "strings" - "github.com/codegangsta/martini" + "github.com/go-martini/martini" + + "github.com/gogits/git" "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/base" ) -func RepoAssignment(redirect bool) martini.Handler { +func RepoAssignment(redirect bool, args ...bool) martini.Handler { return func(ctx *Context, params martini.Params) { - // assign false first - ctx.Data["IsRepositoryValid"] = false + // valid brachname + var validBranch bool + // display bare quick start if it is a bare repo + var displayBare bool + + if len(args) >= 1 { + validBranch = args[0] + } + + if len(args) >= 2 { + displayBare = args[1] + } var ( user *models.User err error ) + userName := params["username"] + repoName := params["reponame"] + branchName := params["branchname"] + // get repository owner - ctx.Repo.IsOwner = ctx.IsSigned && ctx.User.LowerName == strings.ToLower(params["username"]) + ctx.Repo.IsOwner = ctx.IsSigned && ctx.User.LowerName == strings.ToLower(userName) if !ctx.Repo.IsOwner { user, err = models.GetUserByName(params["username"]) @@ -51,10 +67,8 @@ func RepoAssignment(redirect bool) martini.Handler { return } - ctx.Repo.Owner = user - // get repository - repo, err := models.GetRepositoryByName(user.Id, params["reponame"]) + repo, err := models.GetRepositoryByName(user.Id, repoName) if err != nil { if err == models.ErrRepoNotExist { ctx.Handle(404, "RepoAssignment", err) @@ -62,30 +76,87 @@ func RepoAssignment(redirect bool) martini.Handler { ctx.Redirect("/") return } - ctx.Handle(200, "RepoAssignment", err) + ctx.Handle(404, "RepoAssignment", err) return } - - ctx.Repo.IsValid = true - if ctx.User != nil { - ctx.Repo.IsWatching = models.IsWatching(ctx.User.Id, repo.Id) - } ctx.Repo.Repository = repo - ctx.Repo.CloneLink.SSH = fmt.Sprintf("%s@%s:%s/%s.git", base.RunUser, base.Domain, user.LowerName, repo.LowerName) - ctx.Repo.CloneLink.HTTPS = fmt.Sprintf("%s%s/%s.git", base.AppUrl, user.LowerName, repo.LowerName) - if len(params["branchname"]) == 0 { - params["branchname"] = "master" + ctx.Data["IsBareRepo"] = ctx.Repo.Repository.IsBare + + gitRepo, err := git.OpenRepository(models.RepoPath(userName, repoName)) + if err != nil { + ctx.Handle(404, "RepoAssignment Invalid repo "+models.RepoPath(userName, repoName), err) + return } - ctx.Data["Branchname"] = params["branchname"] + ctx.Repo.GitRepo = gitRepo - ctx.Data["IsRepositoryValid"] = true + ctx.Repo.Owner = user + ctx.Repo.RepoLink = "/" + user.Name + "/" + repo.Name + + ctx.Data["Title"] = user.Name + "/" + repo.Name ctx.Data["Repository"] = repo ctx.Data["Owner"] = user - ctx.Data["Title"] = user.Name + "/" + repo.Name - ctx.Data["CloneLink"] = ctx.Repo.CloneLink - ctx.Data["RepositoryLink"] = ctx.Data["Title"] + ctx.Data["RepoLink"] = ctx.Repo.RepoLink ctx.Data["IsRepositoryOwner"] = ctx.Repo.IsOwner + ctx.Data["BranchName"] = "" + + ctx.Repo.CloneLink.SSH = fmt.Sprintf("%s@%s:%s/%s.git", base.RunUser, base.Domain, user.LowerName, repo.LowerName) + ctx.Repo.CloneLink.HTTPS = fmt.Sprintf("%s%s/%s.git", base.AppUrl, user.LowerName, repo.LowerName) + ctx.Data["CloneLink"] = ctx.Repo.CloneLink + + // when repo is bare, not valid branch + if !ctx.Repo.Repository.IsBare && validBranch { + detect: + if len(branchName) > 0 { + // TODO check tag + if models.IsBranchExist(user.Name, repoName, branchName) { + ctx.Repo.IsBranch = true + ctx.Repo.BranchName = branchName + + ctx.Repo.Commit, err = gitRepo.GetCommitOfBranch(branchName) + if err != nil { + ctx.Handle(404, "RepoAssignment invalid branch", nil) + return + } + + ctx.Repo.CommitId = ctx.Repo.Commit.Oid.String() + + } else if len(branchName) == 40 { + ctx.Repo.IsCommit = true + ctx.Repo.CommitId = branchName + ctx.Repo.BranchName = branchName + + ctx.Repo.Commit, err = gitRepo.GetCommit(branchName) + if err != nil { + ctx.Handle(404, "RepoAssignment invalid commit", nil) + return + } + } else { + ctx.Handle(404, "RepoAssignment invalid repo", nil) + return + } + + } else { + branchName = "master" + goto detect + } + + ctx.Data["IsBranch"] = ctx.Repo.IsBranch + ctx.Data["IsCommit"] = ctx.Repo.IsCommit + } + + // repo is bare and display enable + if displayBare && ctx.Repo.Repository.IsBare { + ctx.HTML(200, "repo/single_bare") + return + } + + if ctx.IsSigned { + ctx.Repo.IsWatching = models.IsWatching(ctx.User.Id, repo.Id) + } + + ctx.Data["BranchName"] = ctx.Repo.BranchName + ctx.Data["CommitId"] = ctx.Repo.CommitId ctx.Data["IsRepositoryWatching"] = ctx.Repo.IsWatching } } |