DomainBlocksController.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. $res = Instance::moderated()
  25. ->findOrFail($id);
  26. return $this->json(new DomainBlockResource($res));
  27. }
  28. public function create(Request $request) {
  29. $this->validate($request, [
  30. 'domain' => 'required|string|min:1|max:120',
  31. 'severity' => [
  32. 'sometimes',
  33. Rule::in(['noop', 'silence', 'suspend'])
  34. ],
  35. 'reject_media' => 'sometimes|required|boolean',
  36. 'reject_reports' => 'sometimes|required|boolean',
  37. 'private_comment' => 'sometimes|string|min:1|max:1000',
  38. 'public_comment' => 'sometimes|string|min:1|max:1000',
  39. 'obfuscate' => 'sometimes|required|boolean'
  40. ]);
  41. $domain = $request->input('domain');
  42. $severity = $request->input('severity');
  43. $private_comment = $request->input('private_comment');
  44. abort_if(!strpos($domain, '.'), 400, 'Invalid domain');
  45. abort_if(!filter_var($domain, FILTER_VALIDATE_DOMAIN), 400, 'Invalid domain');
  46. $existing = Instance::moderated()->whereDomain($domain)->first();
  47. if ($existing) {
  48. return $this->json([
  49. 'error' => 'A domain block already exists for this domain',
  50. 'existing_domain_block' => new DomainBlockResource($existing)
  51. ], [], 422);
  52. }
  53. $domain_block = Instance::updateOrCreate(
  54. [ 'domain' => $domain ],
  55. [ 'banned' => $severity === 'suspend', 'unlisted' => $severity === 'silence', 'notes' => [$private_comment]]
  56. );
  57. InstanceService::refresh();
  58. return $this->json(new DomainBlockResource($domain_block));
  59. }
  60. }