diff options
author | Unknwon <joe2010xtmf@163.com> | 2014-08-14 14:12:21 +0800 |
---|---|---|
committer | Unknwon <joe2010xtmf@163.com> | 2014-08-14 14:12:21 +0800 |
commit | 5acc948562547b393ba1e89b012e7421143c6dd8 (patch) | |
tree | 657653112b206fb01ff184bd30cb680b5b5a21fa /modules/middleware/org.go | |
parent | 2935ee440c82a7f998a74159255cc38924f6e0bc (diff) | |
download | gitea-5acc948562547b393ba1e89b012e7421143c6dd8.tar.gz gitea-5acc948562547b393ba1e89b012e7421143c6dd8.zip |
Page: `/org/:orgname/settings`
Diffstat (limited to 'modules/middleware/org.go')
-rw-r--r-- | modules/middleware/org.go | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/modules/middleware/org.go b/modules/middleware/org.go new file mode 100644 index 0000000000..05316a518f --- /dev/null +++ b/modules/middleware/org.go @@ -0,0 +1,55 @@ +// 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/Unknwon/macaron" + + "github.com/gogits/gogs/models" +) + +func OrgAssignment(redirect bool, args ...bool) macaron.Handler { + return func(ctx *Context) { + var ( + requireMember bool + requireOwner bool + ) + if len(args) >= 1 { + requireMember = args[0] + } + if len(args) >= 2 { + requireOwner = args[1] + } + + orgName := ctx.Params(":org") + + var err error + ctx.Org.Organization, err = models.GetUserByName(orgName) + if err != nil { + if err == models.ErrUserNotExist { + ctx.Handle(404, "GetUserByName", err) + } else if redirect { + ctx.Redirect("/") + } else { + ctx.Handle(500, "GetUserByName", err) + } + return + } + ctx.Data["Org"] = ctx.Org.Organization + + if ctx.IsSigned { + ctx.Org.IsOwner = ctx.Org.Organization.IsOrgOwner(ctx.User.Id) + if ctx.Org.IsOwner { + ctx.Org.IsMember = true + } else { + ctx.Org.IsMember = ctx.Org.Organization.IsOrgMember(ctx.User.Id) + } + } + if (requireMember && !ctx.Org.IsMember) || (requireOwner && !ctx.Org.IsOwner) { + ctx.Handle(404, "OrgAssignment", err) + return + } + } +} |