followers.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package admin
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "github.com/owncast/owncast/activitypub/persistence"
  6. "github.com/owncast/owncast/activitypub/requests"
  7. "github.com/owncast/owncast/controllers"
  8. "github.com/owncast/owncast/core/data"
  9. )
  10. // ApproveFollower will approve a federated follow request.
  11. func ApproveFollower(w http.ResponseWriter, r *http.Request) {
  12. if !requirePOST(w, r) {
  13. return
  14. }
  15. type approveFollowerRequest struct {
  16. ActorIRI string `json:"actorIRI"`
  17. Approved bool `json:"approved"`
  18. }
  19. decoder := json.NewDecoder(r.Body)
  20. var approval approveFollowerRequest
  21. if err := decoder.Decode(&approval); err != nil {
  22. controllers.WriteSimpleResponse(w, false, "unable to handle follower state with provided values")
  23. return
  24. }
  25. if approval.Approved {
  26. // Approve a follower
  27. if err := persistence.ApprovePreviousFollowRequest(approval.ActorIRI); err != nil {
  28. controllers.WriteSimpleResponse(w, false, err.Error())
  29. return
  30. }
  31. localAccountName := data.GetDefaultFederationUsername()
  32. follower, err := persistence.GetFollower(approval.ActorIRI)
  33. if err != nil {
  34. controllers.WriteSimpleResponse(w, false, err.Error())
  35. return
  36. }
  37. // Send the approval to the follow requestor.
  38. if err := requests.SendFollowAccept(follower.Inbox, follower.FollowRequestIri, localAccountName); err != nil {
  39. controllers.WriteSimpleResponse(w, false, err.Error())
  40. return
  41. }
  42. } else {
  43. // Remove/block a follower
  44. if err := persistence.BlockOrRejectFollower(approval.ActorIRI); err != nil {
  45. controllers.WriteSimpleResponse(w, false, err.Error())
  46. return
  47. }
  48. }
  49. controllers.WriteSimpleResponse(w, true, "follower updated")
  50. }
  51. // GetPendingFollowRequests will return a list of pending follow requests.
  52. func GetPendingFollowRequests(w http.ResponseWriter, r *http.Request) {
  53. requests, err := persistence.GetPendingFollowRequests()
  54. if err != nil {
  55. controllers.WriteSimpleResponse(w, false, err.Error())
  56. return
  57. }
  58. controllers.WriteResponse(w, requests)
  59. }
  60. // GetBlockedAndRejectedFollowers will return blocked and rejected followers.
  61. func GetBlockedAndRejectedFollowers(w http.ResponseWriter, r *http.Request) {
  62. rejections, err := persistence.GetBlockedAndRejectedFollowers()
  63. if err != nil {
  64. controllers.WriteSimpleResponse(w, false, err.Error())
  65. return
  66. }
  67. controllers.WriteResponse(w, rejections)
  68. }