org.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // Copyright 2014 The Gogs Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package middleware
  5. import (
  6. "github.com/Unknwon/macaron"
  7. "github.com/gogits/gogs/models"
  8. "github.com/gogits/gogs/modules/log"
  9. )
  10. func OrgAssignment(redirect bool, args ...bool) macaron.Handler {
  11. return func(ctx *Context) {
  12. var (
  13. requireMember bool
  14. requireOwner bool
  15. requireAdminTeam bool
  16. )
  17. if len(args) >= 1 {
  18. requireMember = args[0]
  19. }
  20. if len(args) >= 2 {
  21. requireOwner = args[1]
  22. }
  23. if len(args) >= 3 {
  24. requireAdminTeam = args[2]
  25. }
  26. orgName := ctx.Params(":org")
  27. var err error
  28. ctx.Org.Organization, err = models.GetUserByName(orgName)
  29. if err != nil {
  30. if err == models.ErrUserNotExist {
  31. ctx.Handle(404, "GetUserByName", err)
  32. } else if redirect {
  33. log.Error(4, "GetUserByName", err)
  34. ctx.Redirect("/")
  35. } else {
  36. ctx.Handle(500, "GetUserByName", err)
  37. }
  38. return
  39. }
  40. org := ctx.Org.Organization
  41. ctx.Data["Org"] = org
  42. if ctx.IsSigned {
  43. ctx.Org.IsOwner = org.IsOrgOwner(ctx.User.Id)
  44. if ctx.Org.IsOwner {
  45. ctx.Org.IsMember = true
  46. ctx.Org.IsAdminTeam = true
  47. } else {
  48. if org.IsOrgMember(ctx.User.Id) {
  49. ctx.Org.IsMember = true
  50. }
  51. }
  52. }
  53. if (requireMember && !ctx.Org.IsMember) ||
  54. (requireOwner && !ctx.Org.IsOwner) {
  55. ctx.Handle(404, "OrgAssignment", err)
  56. return
  57. }
  58. ctx.Data["IsOrganizationOwner"] = ctx.Org.IsOwner
  59. ctx.Org.OrgLink = "/org/" + org.Name
  60. ctx.Data["OrgLink"] = ctx.Org.OrgLink
  61. // Team.
  62. teamName := ctx.Params(":team")
  63. if len(teamName) > 0 {
  64. ctx.Org.Team, err = org.GetTeam(teamName)
  65. if err != nil {
  66. if err == models.ErrTeamNotExist {
  67. ctx.Handle(404, "GetTeam", err)
  68. } else if redirect {
  69. log.Error(4, "GetTeam", err)
  70. ctx.Redirect("/")
  71. } else {
  72. ctx.Handle(500, "GetTeam", err)
  73. }
  74. return
  75. }
  76. ctx.Data["Team"] = ctx.Org.Team
  77. ctx.Org.IsAdminTeam = ctx.Org.Team.IsOwnerTeam() || ctx.Org.Team.Authorize == models.ORG_ADMIN
  78. }
  79. ctx.Data["IsAdminTeam"] = ctx.Org.IsAdminTeam
  80. if requireAdminTeam && !ctx.Org.IsAdminTeam {
  81. ctx.Handle(404, "OrgAssignment", err)
  82. return
  83. }
  84. }
  85. }