| @@ -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 | |||
| } | |||
| } | |||
| @@ -1,56 +1,14 @@ | |||
| package repo | |||
| import ( | |||
| "github.com/codegangsta/martini" | |||
| "github.com/gogits/gogs/models" | |||
| "github.com/gogits/gogs/modules/auth" | |||
| "github.com/gogits/gogs/modules/base" | |||
| "github.com/martini-contrib/render" | |||
| "github.com/martini-contrib/sessions" | |||
| "net/http" | |||
| ) | |||
| 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) | |||
| func Single(r render.Render, data base.TmplData) { | |||
| if !data["IsRepositoryValid"].(bool) { | |||
| 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) | |||
| return | |||
| } | |||
| data["Repository"] = repo | |||
| data["Owner"] = user | |||
| data["Title"] = user.Name + "/" + repo.Name | |||
| data["RepositoryLink"] = data["Title"] | |||
| data["IsRepoToolbarSource"] = true | |||
| r.HTML(200, "repo/single", data) | |||
| } | |||
| @@ -70,12 +70,12 @@ func runWeb(*cli.Context) { | |||
| m.Get("/user/:username", auth.SignInRequire(false), user.Profile) | |||
| m.Get("/:username/:reponame", repo.Repo) | |||
| //m.Get("/:username/:reponame", repo.Repo) | |||
| 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) | |||
| listenAddr := fmt.Sprintf("%s:%s", | |||
| base.Cfg.MustValue("server", "HTTP_ADDR"), | |||