collaborators.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package repo
  2. import (
  3. "net/http"
  4. api "github.com/gogs/go-gogs-client"
  5. "gogs.io/gogs/internal/context"
  6. "gogs.io/gogs/internal/database"
  7. )
  8. func ListCollaborators(c *context.APIContext) {
  9. collaborators, err := c.Repo.Repository.GetCollaborators()
  10. if err != nil {
  11. c.Error(err, "get collaborators")
  12. return
  13. }
  14. apiCollaborators := make([]*api.Collaborator, len(collaborators))
  15. for i := range collaborators {
  16. apiCollaborators[i] = collaborators[i].APIFormat()
  17. }
  18. c.JSONSuccess(&apiCollaborators)
  19. }
  20. func AddCollaborator(c *context.APIContext, form api.AddCollaboratorOption) {
  21. collaborator, err := database.Handle.Users().GetByUsername(c.Req.Context(), c.Params(":collaborator"))
  22. if err != nil {
  23. if database.IsErrUserNotExist(err) {
  24. c.Status(http.StatusUnprocessableEntity)
  25. } else {
  26. c.Error(err, "get user by name")
  27. }
  28. return
  29. }
  30. if err := c.Repo.Repository.AddCollaborator(collaborator); err != nil {
  31. c.Error(err, "add collaborator")
  32. return
  33. }
  34. if form.Permission != nil {
  35. if err := c.Repo.Repository.ChangeCollaborationAccessMode(collaborator.ID, database.ParseAccessMode(*form.Permission)); err != nil {
  36. c.Error(err, "change collaboration access mode")
  37. return
  38. }
  39. }
  40. c.NoContent()
  41. }
  42. func IsCollaborator(c *context.APIContext) {
  43. collaborator, err := database.Handle.Users().GetByUsername(c.Req.Context(), c.Params(":collaborator"))
  44. if err != nil {
  45. if database.IsErrUserNotExist(err) {
  46. c.Status(http.StatusUnprocessableEntity)
  47. } else {
  48. c.Error(err, "get user by name")
  49. }
  50. return
  51. }
  52. if !c.Repo.Repository.IsCollaborator(collaborator.ID) {
  53. c.NotFound()
  54. } else {
  55. c.NoContent()
  56. }
  57. }
  58. func DeleteCollaborator(c *context.APIContext) {
  59. collaborator, err := database.Handle.Users().GetByUsername(c.Req.Context(), c.Params(":collaborator"))
  60. if err != nil {
  61. if database.IsErrUserNotExist(err) {
  62. c.Status(http.StatusUnprocessableEntity)
  63. } else {
  64. c.Error(err, "get user by name")
  65. }
  66. return
  67. }
  68. if err := c.Repo.Repository.DeleteCollaboration(collaborator.ID); err != nil {
  69. c.Error(err, "delete collaboration")
  70. return
  71. }
  72. c.NoContent()
  73. }