DomainBlocksController.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. namespace App\Http\Controllers\Api\V1\Admin;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Validation\Rule;
  5. use App\Http\Controllers\Api\ApiController;
  6. use App\Instance;
  7. use App\Services\InstanceService;
  8. use App\Http\Resources\MastoApi\Admin\DomainBlockResource;
  9. class DomainBlocksController extends ApiController {
  10. public function index(Request $request) {
  11. $this->validate($request, [
  12. 'limit' => 'sometimes|integer|max:100|min:1',
  13. ]);
  14. $limit = $request->input('limit', 100);
  15. $res = Instance::moderated()
  16. ->orderBy('id')
  17. ->cursorPaginate($limit)
  18. ->withQueryString();
  19. return $this->json(DomainBlockResource::collection($res), [
  20. 'Link' => $this->linksForCollection($res)
  21. ]);
  22. }
  23. public function show(Request $request, $id) {
  24. $domain_block = Instance::moderated()->find($id);
  25. if (!$domain_block) {
  26. return $this->json([ 'error' => 'Record not found'], [], 404);
  27. }
  28. return $this->json(new DomainBlockResource($domain_block));
  29. }
  30. public function create(Request $request) {
  31. $this->validate($request, [
  32. 'domain' => 'required|string|min:1|max:120',
  33. 'severity' => [
  34. 'sometimes',
  35. Rule::in(['noop', 'silence', 'suspend'])
  36. ],
  37. 'reject_media' => 'sometimes|required|boolean',
  38. 'reject_reports' => 'sometimes|required|boolean',
  39. 'private_comment' => 'sometimes|string|min:1|max:1000',
  40. 'public_comment' => 'sometimes|string|min:1|max:1000',
  41. 'obfuscate' => 'sometimes|required|boolean'
  42. ]);
  43. $domain = $request->input('domain');
  44. $severity = $request->input('severity');
  45. $private_comment = $request->input('private_comment');
  46. abort_if(!strpos($domain, '.'), 400, 'Invalid domain');
  47. abort_if(!filter_var($domain, FILTER_VALIDATE_DOMAIN), 400, 'Invalid domain');
  48. $existing_domain_block = Instance::moderated()->whereDomain($domain)->first();
  49. if ($existing_domain_block) {
  50. return $this->json([
  51. 'error' => 'A domain block already exists for this domain',
  52. 'existing_domain_block' => new DomainBlockResource($existing_domain_block)
  53. ], [], 422);
  54. }
  55. $domain_block = Instance::updateOrCreate(
  56. [ 'domain' => $domain ],
  57. [ 'banned' => $severity === 'suspend', 'unlisted' => $severity === 'silence', 'notes' => [$private_comment]]
  58. );
  59. InstanceService::refresh();
  60. return $this->json(new DomainBlockResource($domain_block));
  61. }
  62. public function update(Request $request, $id) {
  63. $this->validate($request, [
  64. 'severity' => [
  65. 'sometimes',
  66. Rule::in(['noop', 'silence', 'suspend'])
  67. ],
  68. 'reject_media' => 'sometimes|required|boolean',
  69. 'reject_reports' => 'sometimes|required|boolean',
  70. 'private_comment' => 'sometimes|string|min:1|max:1000',
  71. 'public_comment' => 'sometimes|string|min:1|max:1000',
  72. 'obfuscate' => 'sometimes|required|boolean'
  73. ]);
  74. $severity = $request->input('severity');
  75. $private_comment = $request->input('private_comment');
  76. $domain_block = Instance::moderated()->find($id);
  77. if (!$domain_block) {
  78. return $this->json([ 'error' => 'Record not found'], [], 404);
  79. }
  80. $domain_block->banned = $severity === 'suspend';
  81. $domain_block->unlisted = $severity === 'silence';
  82. $domain_block->notes = [$private_comment];
  83. $domain_block->save();
  84. InstanceService::refresh();
  85. return $this->json(new DomainBlockResource($domain_block));
  86. }
  87. public function delete(Request $request, $id) {
  88. $domain_block = Instance::moderated()->find($id);
  89. if (!$domain_block) {
  90. return $this->json([ 'error' => 'Record not found'], [], 404);
  91. }
  92. $domain_block->banned = false;
  93. $domain_block->unlisted = false;
  94. $domain_block->save();
  95. InstanceService::refresh();
  96. return $this->json(null, [], 200);
  97. }
  98. }