]> source.dussan.org Git - gitea.git/commitdiff
modify RepoAssignment
authorslene <vslene@gmail.com>
Sat, 15 Mar 2014 16:03:23 +0000 (00:03 +0800)
committerslene <vslene@gmail.com>
Sat, 15 Mar 2014 16:03:23 +0000 (00:03 +0800)
modules/auth/repo.go
modules/middleware/context.go
modules/middleware/repo.go [new file with mode: 0644]
routers/repo/single.go
web.go

index 5fe091d62f92973b04afed053e96c066655e9b44..ac1b6b699b379f200e0d4ebf7f11d74acc73e397 100644 (file)
@@ -12,11 +12,8 @@ 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 {
@@ -61,62 +58,3 @@ type DeleteRepoForm struct {
        UserName string `form:"userName" binding:"Required"`
        RepoId   int64  `form:"repoId" binding:"Required"`
 }
-
-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
-       }
-}
index d3fe7bbfbe29b610fae604916d0f67db5241b29b..42ef1320cb9ea4b7e8ab724e9ac2d7abf5db5918 100644 (file)
@@ -29,6 +29,12 @@ type Context struct {
        Render   render.Render
        User     *models.User
        IsSigned bool
+
+       Repo struct {
+               IsValid    bool
+               IsOwner    bool
+               Repository *models.Repository
+       }
 }
 
 // Query querys form parameter.
diff --git a/modules/middleware/repo.go b/modules/middleware/repo.go
new file mode 100644 (file)
index 0000000..fcf1f07
--- /dev/null
@@ -0,0 +1,76 @@
+// Copyright 2014 The Gogs Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package middleware
+
+import (
+       "github.com/codegangsta/martini"
+
+       "github.com/gogits/gogs/models"
+)
+
+func RepoAssignment(redirect bool) martini.Handler {
+       return func(ctx *Context, params martini.Params) {
+               // assign false first
+               ctx.Data["IsRepositoryValid"] = false
+
+               var (
+                       user *models.User
+                       err  error
+               )
+
+               // get repository owner
+               ctx.Repo.IsOwner = ctx.IsSigned && ctx.User.LowerName == params["username"]
+               ctx.Data["IsRepositoryOwner"] = ctx.Repo.IsOwner
+
+               if !ctx.Repo.IsOwner {
+                       user, err = models.GetUserByName(params["username"])
+                       if err != nil {
+                               if redirect {
+                                       ctx.Render.Redirect("/")
+                                       return
+                               }
+                               //data["ErrorMsg"] = err
+                               //log.Error("repo.Single: %v", err)
+                               //r.HTML(200, "base/error", data)
+                               return
+                       }
+               } else {
+                       user = ctx.User
+               }
+
+               if user == nil {
+                       if redirect {
+                               ctx.Render.Redirect("/")
+                               return
+                       }
+                       //data["ErrorMsg"] = "invliad user account for single repository"
+                       //log.Error("repo.Single: %v", err)
+                       //r.HTML(200, "base/error", data)
+                       return
+               }
+
+               // get repository
+               repo, err := models.GetRepositoryByName(user, params["reponame"])
+               if err != nil {
+                       if redirect {
+                               ctx.Render.Redirect("/")
+                               return
+                       }
+                       //data["ErrorMsg"] = err
+                       //log.Error("repo.Single: %v", err)
+                       //r.HTML(200, "base/error", data)
+                       return
+               }
+
+               ctx.Repo.IsValid = true
+               ctx.Repo.Repository = repo
+
+               ctx.Data["IsRepositoryValid"] = true
+               ctx.Data["Repository"] = repo
+               ctx.Data["Owner"] = user
+               ctx.Data["Title"] = user.Name + "/" + repo.Name
+               ctx.Data["RepositoryLink"] = ctx.Data["Title"]
+       }
+}
index e933951050a77d0377cd2a7f81927a729d21e5ea..bd5cfa1196a2476e66961032f5d19485caa2e406 100644 (file)
@@ -10,12 +10,14 @@ import (
 )
 
 func Single(ctx *middleware.Context, params martini.Params) {
-       if !ctx.Data["IsRepositoryValid"].(bool) {
+       if !ctx.Repo.IsValid {
                return
        }
+
        if params["branchname"] == "" {
                params["branchname"] = "master"
        }
+
        treename := params["_1"]
        files, err := models.GetReposFiles(params["username"], params["reponame"],
                params["branchname"], treename)
@@ -46,11 +48,16 @@ func Single(ctx *middleware.Context, params martini.Params) {
 }
 
 func Setting(ctx *middleware.Context) {
-       if !ctx.Data["IsRepositoryValid"].(bool) {
+       if !ctx.Repo.IsValid {
                return
        }
 
-       ctx.Data["Title"] = ctx.Data["Title"].(string) + " - settings"
+       var title string
+       if t, ok := ctx.Data["Title"].(string); ok {
+               title = t
+       }
+
+       ctx.Data["Title"] = title + " - settings"
        ctx.Data["IsRepoToolbarSetting"] = true
        ctx.Render.HTML(200, "repo/setting", ctx.Data)
 }
diff --git a/web.go b/web.go
index ad19a5da01529872c593025c7f357585369fbea6..af430917f58413a43bf0b8408b99cdfe20c56b2f 100644 (file)
--- a/web.go
+++ b/web.go
@@ -68,12 +68,12 @@ func runWeb(*cli.Context) {
        m.Any("/repo/delete", middleware.SignInRequire(true), binding.Bind(auth.DeleteRepoForm{}), repo.Delete)
        m.Any("/repo/list", middleware.SignInRequire(false), repo.List)
 
-       m.Get("/:username/:reponame/settings", middleware.SignInRequire(false), auth.RepoAssignment(true), repo.Setting)
+       m.Get("/:username/:reponame/settings", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Setting)
        m.Get("/:username/:reponame/tree/:branchname/**",
-               middleware.SignInRequire(false), auth.RepoAssignment(true), repo.Single)
+               middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Single)
        m.Get("/:username/:reponame/tree/:branchname",
-               middleware.SignInRequire(false), auth.RepoAssignment(true), repo.Single)
-       m.Get("/:username/:reponame", middleware.SignInRequire(false), auth.RepoAssignment(true), repo.Single)
+               middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Single)
+       m.Get("/:username/:reponame", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Single)
 
        //m.Get("/:username/:reponame", repo.Repo)