summaryrefslogtreecommitdiff
path: root/lib/pleroma/web/api_spec/operations/admin/media_proxy_cache_operation.ex
blob: 675504ee08f3293d8756a16af52745fda1efaa74 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# Pleroma: A lightweight social networking server
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Web.ApiSpec.Admin.MediaProxyCacheOperation do
  alias OpenApiSpex.Operation
  alias OpenApiSpex.Schema
  alias Pleroma.Web.ApiSpec.Schemas.ApiError

  import Pleroma.Web.ApiSpec.Helpers

  def open_api_operation(action) do
    operation = String.to_existing_atom("#{action}_operation")
    apply(__MODULE__, operation, [])
  end

  def index_operation do
    %Operation{
      tags: ["MediaProxy cache"],
      summary: "Retrieve a list of banned MediaProxy URLs",
      operationId: "AdminAPI.MediaProxyCacheController.index",
      security: [%{"oAuth" => ["read:media_proxy_caches"]}],
      parameters: [
        Operation.parameter(
          :query,
          :query,
          %Schema{type: :string, default: nil},
          "Page"
        ),
        Operation.parameter(
          :page,
          :query,
          %Schema{type: :integer, default: 1},
          "Page"
        ),
        Operation.parameter(
          :page_size,
          :query,
          %Schema{type: :integer, default: 50},
          "Number of statuses to return"
        )
        | admin_api_params()
      ],
      responses: %{
        200 =>
          Operation.response(
            "Array of MediaProxy URLs",
            "application/json",
            %Schema{
              type: :object,
              properties: %{
                count: %Schema{type: :integer},
                page_size: %Schema{type: :integer},
                urls: %Schema{
                  type: :array,
                  items: %Schema{
                    type: :string,
                    format: :uri,
                    description: "MediaProxy URLs"
                  }
                }
              }
            }
          )
      }
    }
  end

  def delete_operation do
    %Operation{
      tags: ["MediaProxy cache"],
      summary: "Remove a banned MediaProxy URL",
      operationId: "AdminAPI.MediaProxyCacheController.delete",
      security: [%{"oAuth" => ["write:media_proxy_caches"]}],
      parameters: admin_api_params(),
      requestBody:
        request_body(
          "Parameters",
          %Schema{
            type: :object,
            required: [:urls],
            properties: %{
              urls: %Schema{type: :array, items: %Schema{type: :string, format: :uri}}
            }
          },
          required: true
        ),
      responses: %{
        200 => empty_object_response(),
        400 => Operation.response("Error", "application/json", ApiError)
      }
    }
  end

  def purge_operation do
    %Operation{
      tags: ["MediaProxy cache"],
      summary: "Purge a URL from MediaProxy cache and optionally ban it",
      operationId: "AdminAPI.MediaProxyCacheController.purge",
      security: [%{"oAuth" => ["write:media_proxy_caches"]}],
      parameters: admin_api_params(),
      requestBody:
        request_body(
          "Parameters",
          %Schema{
            type: :object,
            required: [:urls],
            properties: %{
              urls: %Schema{type: :array, items: %Schema{type: :string, format: :uri}},
              ban: %Schema{type: :boolean, default: true}
            }
          },
          required: true
        ),
      responses: %{
        200 => empty_object_response(),
        400 => Operation.response("Error", "application/json", ApiError)
      }
    }
  end
end