aboutsummaryrefslogtreecommitdiffstats
path: root/routers/repo/setting.go
diff options
context:
space:
mode:
authorUnknown <joe2010xtmf@163.com>2014-05-01 11:32:12 -0400
committerUnknown <joe2010xtmf@163.com>2014-05-01 11:32:12 -0400
commitf6c4fbeb37bc7fcbc947c162358c39e9bed90488 (patch)
tree37d9ba100ba006b9d322014bff1975014b8f3fd3 /routers/repo/setting.go
parent0dfb5560cdee369b2292071d14d750b2477c6086 (diff)
downloadgitea-f6c4fbeb37bc7fcbc947c162358c39e9bed90488.tar.gz
gitea-f6c4fbeb37bc7fcbc947c162358c39e9bed90488.zip
Collaborator
Diffstat (limited to 'routers/repo/setting.go')
-rw-r--r--routers/repo/setting.go88
1 files changed, 75 insertions, 13 deletions
diff --git a/routers/repo/setting.go b/routers/repo/setting.go
index bb36260912..8f7b84b694 100644
--- a/routers/repo/setting.go
+++ b/routers/repo/setting.go
@@ -6,7 +6,10 @@ package repo
import (
"fmt"
+ "strings"
+
"github.com/gogits/git"
+
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log"
@@ -20,13 +23,7 @@ func Setting(ctx *middleware.Context) {
}
ctx.Data["IsRepoToolbarSetting"] = true
-
- var title string
- if t, ok := ctx.Data["Title"].(string); ok {
- title = t
- }
-
- ctx.Data["Title"] = title + " - settings"
+ ctx.Data["Title"] = strings.TrimPrefix(ctx.Repo.RepoLink, "/") + " - settings"
ctx.HTML(200, "repo/setting")
}
@@ -128,17 +125,82 @@ func SettingPost(ctx *middleware.Context) {
func Collaboration(ctx *middleware.Context) {
if !ctx.Repo.IsOwner {
- ctx.Handle(404, "repo.Setting", nil)
+ ctx.Error(404)
return
}
- ctx.Data["IsRepoToolbarSetting"] = true
+ repoLink := strings.TrimPrefix(ctx.Repo.RepoLink, "/")
+ ctx.Data["IsRepoToolbarCollaboration"] = true
+ ctx.Data["Title"] = repoLink + " - collaboration"
+
+ // Delete collaborator.
+ remove := strings.ToLower(ctx.Query("remove"))
+ if len(remove) > 0 && remove != ctx.Repo.Owner.LowerName {
+ if err := models.DeleteAccess(&models.Access{UserName: remove, RepoName: repoLink}); err != nil {
+ ctx.Handle(500, "repo.Collaboration(DeleteAccess)", err)
+ return
+ }
+ ctx.Flash.Success("Collaborator has been removed.")
+ ctx.Redirect(ctx.Repo.RepoLink + "/settings/collaboration")
+ return
+ }
+
+ names, err := models.GetCollaborators(repoLink)
+ if err != nil {
+ ctx.Handle(500, "repo.Collaboration(GetCollaborators)", err)
+ return
+ }
- var title string
- if t, ok := ctx.Data["Title"].(string); ok {
- title = t
+ us := make([]*models.User, len(names))
+ for i, name := range names {
+ us[i], err = models.GetUserByName(name)
+ if err != nil {
+ ctx.Handle(500, "repo.Collaboration(GetUserByName)", err)
+ return
+ }
}
- ctx.Data["Title"] = title + " - collaboration"
+ ctx.Data["Collaborators"] = us
ctx.HTML(200, "repo/collaboration")
}
+
+func CollaborationPost(ctx *middleware.Context) {
+ if !ctx.Repo.IsOwner {
+ ctx.Error(404)
+ return
+ }
+
+ repoLink := strings.TrimPrefix(ctx.Repo.RepoLink, "/")
+ name := strings.ToLower(ctx.Query("collaborator"))
+ if len(name) == 0 || ctx.Repo.Owner.LowerName == name {
+ ctx.Redirect(ctx.Req.RequestURI)
+ return
+ }
+ has, err := models.HasAccess(name, repoLink, models.AU_WRITABLE)
+ if err != nil {
+ ctx.Handle(500, "repo.CollaborationPost(HasAccess)", err)
+ return
+ } else if has {
+ ctx.Redirect(ctx.Req.RequestURI)
+ return
+ }
+
+ isExist, err := models.IsUserExist(name)
+ if err != nil {
+ ctx.Handle(500, "repo.CollaborationPost(IsUserExist)", err)
+ return
+ } else if !isExist {
+ ctx.Flash.Error("Given user does not exist.")
+ ctx.Redirect(ctx.Req.RequestURI)
+ return
+ }
+
+ if err := models.AddAccess(&models.Access{UserName: name, RepoName: repoLink,
+ Mode: models.AU_WRITABLE}); err != nil {
+ ctx.Handle(500, "repo.CollaborationPost(AddAccess)", err)
+ return
+ }
+
+ ctx.Flash.Success("New collaborator has been added.")
+ ctx.Redirect(ctx.Req.RequestURI)
+}