You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

member.go 3.8 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. // Copyright 2017 The Gitea 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 org
  5. import (
  6. "fmt"
  7. api "code.gitea.io/sdk/gitea"
  8. "code.gitea.io/gitea/models"
  9. "code.gitea.io/gitea/modules/context"
  10. "code.gitea.io/gitea/modules/setting"
  11. "code.gitea.io/gitea/routers/api/v1/user"
  12. )
  13. // listMembers list an organization's members
  14. func listMembers(ctx *context.APIContext, publicOnly bool) {
  15. var members []*models.User
  16. if publicOnly {
  17. orgUsers, err := models.GetOrgUsersByOrgID(ctx.Org.Organization.ID)
  18. if err != nil {
  19. ctx.Error(500, "GetOrgUsersByOrgID", err)
  20. return
  21. }
  22. memberIDs := make([]int64, 0, len(orgUsers))
  23. for _, orgUser := range orgUsers {
  24. if orgUser.IsPublic {
  25. memberIDs = append(memberIDs, orgUser.UID)
  26. }
  27. }
  28. if members, err = models.GetUsersByIDs(memberIDs); err != nil {
  29. ctx.Error(500, "GetUsersByIDs", err)
  30. return
  31. }
  32. } else {
  33. if err := ctx.Org.Organization.GetMembers(); err != nil {
  34. ctx.Error(500, "GetMembers", err)
  35. return
  36. }
  37. members = ctx.Org.Organization.Members
  38. }
  39. apiMembers := make([]*api.User, len(members))
  40. for i, member := range members {
  41. apiMembers[i] = member.APIFormat()
  42. }
  43. ctx.JSON(200, apiMembers)
  44. }
  45. // ListMembers list an organization's members
  46. func ListMembers(ctx *context.APIContext) {
  47. publicOnly := ctx.User == nil || !ctx.Org.Organization.IsOrgMember(ctx.User.ID)
  48. listMembers(ctx, publicOnly)
  49. }
  50. // ListPublicMembers list an organization's public members
  51. func ListPublicMembers(ctx *context.APIContext) {
  52. listMembers(ctx, true)
  53. }
  54. // IsMember check if a user is a member of an organization
  55. func IsMember(ctx *context.APIContext) {
  56. userToCheck := user.GetUserByParams(ctx)
  57. if ctx.Written() {
  58. return
  59. }
  60. if ctx.User != nil && ctx.Org.Organization.IsOrgMember(ctx.User.ID) {
  61. if ctx.Org.Organization.IsOrgMember(userToCheck.ID) {
  62. ctx.Status(204)
  63. } else {
  64. ctx.Status(404)
  65. }
  66. } else if ctx.User != nil && ctx.User.ID == userToCheck.ID {
  67. ctx.Status(404)
  68. } else {
  69. redirectURL := fmt.Sprintf("%sapi/v1/orgs/%s/public_members/%s",
  70. setting.AppURL, ctx.Org.Organization.Name, userToCheck.Name)
  71. ctx.Redirect(redirectURL, 302)
  72. }
  73. }
  74. // IsPublicMember check if a user is a public member of an organization
  75. func IsPublicMember(ctx *context.APIContext) {
  76. userToCheck := user.GetUserByParams(ctx)
  77. if ctx.Written() {
  78. return
  79. }
  80. if userToCheck.IsPublicMember(ctx.Org.Organization.ID) {
  81. ctx.Status(204)
  82. } else {
  83. ctx.Status(404)
  84. }
  85. }
  86. // PublicizeMember make a member's membership public
  87. func PublicizeMember(ctx *context.APIContext) {
  88. userToPublicize := user.GetUserByParams(ctx)
  89. if ctx.Written() {
  90. return
  91. }
  92. if userToPublicize.ID != ctx.User.ID {
  93. ctx.Error(403, "", "Cannot publicize another member")
  94. return
  95. }
  96. err := models.ChangeOrgUserStatus(ctx.Org.Organization.ID, userToPublicize.ID, true)
  97. if err != nil {
  98. ctx.Error(500, "ChangeOrgUserStatus", err)
  99. return
  100. }
  101. ctx.Status(204)
  102. }
  103. // ConcealMember make a member's membership not public
  104. func ConcealMember(ctx *context.APIContext) {
  105. userToConceal := user.GetUserByParams(ctx)
  106. if ctx.Written() {
  107. return
  108. }
  109. if userToConceal.ID != ctx.User.ID {
  110. ctx.Error(403, "", "Cannot conceal another member")
  111. return
  112. }
  113. err := models.ChangeOrgUserStatus(ctx.Org.Organization.ID, userToConceal.ID, false)
  114. if err != nil {
  115. ctx.Error(500, "ChangeOrgUserStatus", err)
  116. return
  117. }
  118. ctx.Status(204)
  119. }
  120. // DeleteMember remove a member from an organization
  121. func DeleteMember(ctx *context.APIContext) {
  122. member := user.GetUserByParams(ctx)
  123. if ctx.Written() {
  124. return
  125. }
  126. if err := ctx.Org.Organization.RemoveMember(member.ID); err != nil {
  127. ctx.Error(500, "RemoveMember", err)
  128. }
  129. ctx.Status(204)
  130. }