(c *Context, args ...bool)
| 21 | } |
| 22 | |
| 23 | func HandleOrgAssignment(c *Context, args ...bool) { |
| 24 | var ( |
| 25 | requireMember bool |
| 26 | requireOwner bool |
| 27 | requireTeamMember bool |
| 28 | requireTeamAdmin bool |
| 29 | ) |
| 30 | if len(args) >= 1 { |
| 31 | requireMember = args[0] |
| 32 | } |
| 33 | if len(args) >= 2 { |
| 34 | requireOwner = args[1] |
| 35 | } |
| 36 | if len(args) >= 3 { |
| 37 | requireTeamMember = args[2] |
| 38 | } |
| 39 | if len(args) >= 4 { |
| 40 | requireTeamAdmin = args[3] |
| 41 | } |
| 42 | |
| 43 | orgName := c.Params(":org") |
| 44 | |
| 45 | var err error |
| 46 | c.Org.Organization, err = database.Handle.Users().GetByUsername(c.Req.Context(), orgName) |
| 47 | if err != nil { |
| 48 | c.NotFoundOrError(err, "get organization by name") |
| 49 | return |
| 50 | } |
| 51 | org := c.Org.Organization |
| 52 | c.Data["Org"] = org |
| 53 | |
| 54 | // Force redirection when username is actually a user. |
| 55 | if !org.IsOrganization() { |
| 56 | c.Redirect("/" + org.Name) |
| 57 | return |
| 58 | } |
| 59 | |
| 60 | // Admin has super access. |
| 61 | if c.IsLogged && c.User.IsAdmin { |
| 62 | c.Org.IsOwner = true |
| 63 | c.Org.IsMember = true |
| 64 | c.Org.IsTeamMember = true |
| 65 | c.Org.IsTeamAdmin = true |
| 66 | } else if c.IsLogged { |
| 67 | c.Org.IsOwner = org.IsOwnedBy(c.User.ID) |
| 68 | if c.Org.IsOwner { |
| 69 | c.Org.IsMember = true |
| 70 | c.Org.IsTeamMember = true |
| 71 | c.Org.IsTeamAdmin = true |
| 72 | } else if org.IsOrgMember(c.User.ID) { |
| 73 | c.Org.IsMember = true |
| 74 | } |
| 75 | } else { |
| 76 | // Fake data. |
| 77 | c.Data["SignedUser"] = &database.User{} |
| 78 | } |
| 79 | if (requireMember && !c.Org.IsMember) || |
| 80 | (requireOwner && !c.Org.IsOwner) { |
no test coverage detected