diff options
-rw-r--r-- | gogs.go | 4 | ||||
-rw-r--r-- | modules/auth/repo.go | 62 | ||||
-rw-r--r-- | routers/repo/single.go | 47 | ||||
-rw-r--r-- | templates/repo/single.tmpl | 1 | ||||
-rw-r--r-- | web.go | 4 |
5 files changed, 73 insertions, 45 deletions
@@ -27,12 +27,12 @@ func init() { } func checkRunUser() bool { - user, err := user.Current() + u, err := user.Current() if err != nil { // TODO: log return false } - return user.Username == base.Cfg.MustValue("", "RUN_USER") + return u.Username == base.Cfg.MustValue("", "RUN_USER") } func main() { diff --git a/modules/auth/repo.go b/modules/auth/repo.go index 981315d4..d7696646 100644 --- a/modules/auth/repo.go +++ b/modules/auth/repo.go @@ -12,8 +12,11 @@ import ( "github.com/gogits/binding" + "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/log" + "github.com/martini-contrib/render" + "github.com/martini-contrib/sessions" ) type CreateRepoForm struct { @@ -52,3 +55,62 @@ func (f *CreateRepoForm) Validate(errors *binding.Errors, req *http.Request, con validate(errors, data, f) } + +func RepoAssignment(redirect bool) martini.Handler { + return func(params martini.Params, r render.Render, data base.TmplData, session sessions.Session) { + // assign false first + data["IsRepositoryValid"] = false + + var ( + user *models.User + err error + ) + // get repository owner + isOwner := (data["SignedUserName"] == params["username"]) + if !isOwner { + user, err = models.GetUserByName(params["username"]) + if err != nil { + if redirect { + r.Redirect("/") + return + } + //data["ErrorMsg"] = err + //log.Error("repo.Single: %v", err) + //r.HTML(200, "base/error", data) + return + } + } else { + user = SignedInUser(session) + } + if user == nil { + if redirect { + r.Redirect("/") + return + } + //data["ErrorMsg"] = "invliad user account for single repository" + //log.Error("repo.Single: %v", err) + //r.HTML(200, "base/error", data) + return + } + data["IsRepositoryOwner"] = isOwner + + // get repository + repo, err := models.GetRepositoryByName(user, params["reponame"]) + if err != nil { + if redirect { + r.Redirect("/") + return + } + //data["ErrorMsg"] = err + //log.Error("repo.Single: %v", err) + //r.HTML(200, "base/error", data) + return + } + + data["Repository"] = repo + data["Owner"] = user + data["Title"] = user.Name + "/" + repo.Name + data["RepositoryLink"] = data["Title"] + data["IsRepositoryValid"] = true + } +} diff --git a/routers/repo/single.go b/routers/repo/single.go index 476daaca..db16a84b 100644 --- a/routers/repo/single.go +++ b/routers/repo/single.go @@ -1,59 +1,19 @@ package repo import ( - "net/http" - "github.com/codegangsta/martini" "github.com/martini-contrib/render" - "github.com/martini-contrib/sessions" "github.com/gogits/gogs/models" - "github.com/gogits/gogs/modules/auth" "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/log" ) -func Single(params martini.Params, req *http.Request, r render.Render, data base.TmplData, session sessions.Session) { - var ( - user *models.User - err error - ) - // get repository owner - isOwner := (data["SignedUserName"] == params["username"]) - if !isOwner { - user, err = models.GetUserByName(params["username"]) - if err != nil { - data["ErrorMsg"] = err - //log.Error("repo.Single: %v", err) - r.HTML(200, "base/error", data) - return - } - } else { - user = auth.SignedInUser(session) - } - if user == nil { - data["ErrorMsg"] = "invliad user account for single repository" - //log.Error("repo.Single: %v", err) - r.HTML(200, "base/error", data) - return - } - data["IsRepositoryOwner"] = isOwner - - // get repository - repo, err := models.GetRepositoryByName(user, params["reponame"]) - if err != nil { - data["ErrorMsg"] = err - //log.Error("repo.Single: %v", err) - r.HTML(200, "base/error", data) +func Single(params martini.Params, r render.Render, data base.TmplData) { + if !data["IsRepositoryValid"].(bool) { return } - data["Repository"] = repo - data["Owner"] = user - data["Title"] = user.Name + "/" + repo.Name - data["RepositoryLink"] = data["Title"] - data["IsRepoToolbarSource"] = true - files, err := models.GetReposFiles(params["username"], params["reponame"], "HEAD", "/") if err != nil { data["ErrorMsg"] = err @@ -62,6 +22,9 @@ func Single(params martini.Params, req *http.Request, r render.Render, data base return } + data["IsRepoToolbarSource"] = true + data["Files"] = files + r.HTML(200, "repo/single", data) } diff --git a/templates/repo/single.tmpl b/templates/repo/single.tmpl index 9d4a24f8..28bbea63 100644 --- a/templates/repo/single.tmpl +++ b/templates/repo/single.tmpl @@ -33,6 +33,7 @@ </div> {{template "repo/toolbar" .}} <div id="gogs-body" class="container"> + <h4>Source Files:</h4> <ul> {{range .Files}} <li>{{.Name}} - {{.Type}}</li> @@ -74,7 +74,9 @@ func runWeb(*cli.Context) { m.Any("/repo/create", auth.SignInRequire(true), binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create) m.Any("/repo/delete", auth.SignInRequire(true), repo.Delete) m.Any("/repo/list", auth.SignInRequire(false), repo.List) - m.Get("/:username/:reponame", auth.SignInRequire(false), repo.Single) + m.Get("/:username/:reponame", auth.SignInRequire(false), auth.RepoAssignment(true), repo.Single) + + //m.Get("/:username/:reponame", repo.Repo) //m.Get("/:username/:reponame", repo.Repo) |