logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

status_operation.ex (4719B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.ApiSpec.Admin.StatusOperation do
  5. alias OpenApiSpex.Operation
  6. alias OpenApiSpex.Schema
  7. alias Pleroma.Web.ApiSpec.Schemas.Account
  8. alias Pleroma.Web.ApiSpec.Schemas.ApiError
  9. alias Pleroma.Web.ApiSpec.Schemas.FlakeID
  10. alias Pleroma.Web.ApiSpec.Schemas.Status
  11. alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope
  12. import Pleroma.Web.ApiSpec.Helpers
  13. import Pleroma.Web.ApiSpec.StatusOperation, only: [id_param: 0]
  14. def open_api_operation(action) do
  15. operation = String.to_existing_atom("#{action}_operation")
  16. apply(__MODULE__, operation, [])
  17. end
  18. def index_operation do
  19. %Operation{
  20. tags: ["Status administration"],
  21. operationId: "AdminAPI.StatusController.index",
  22. summary: "Get all statuses",
  23. security: [%{"oAuth" => ["admin:read:statuses"]}],
  24. parameters: [
  25. Operation.parameter(
  26. :godmode,
  27. :query,
  28. %Schema{type: :boolean, default: false},
  29. "Allows to see private statuses"
  30. ),
  31. Operation.parameter(
  32. :local_only,
  33. :query,
  34. %Schema{type: :boolean, default: false},
  35. "Excludes remote statuses"
  36. ),
  37. Operation.parameter(
  38. :with_reblogs,
  39. :query,
  40. %Schema{type: :boolean, default: false},
  41. "Allows to see reblogs"
  42. ),
  43. Operation.parameter(
  44. :page,
  45. :query,
  46. %Schema{type: :integer, default: 1},
  47. "Page"
  48. ),
  49. Operation.parameter(
  50. :page_size,
  51. :query,
  52. %Schema{type: :integer, default: 50},
  53. "Number of statuses to return"
  54. )
  55. | admin_api_params()
  56. ],
  57. responses: %{
  58. 200 =>
  59. Operation.response("Array of statuses", "application/json", %Schema{
  60. type: :array,
  61. items: status()
  62. })
  63. }
  64. }
  65. end
  66. def show_operation do
  67. %Operation{
  68. tags: ["Status administration"],
  69. summary: "Get status",
  70. operationId: "AdminAPI.StatusController.show",
  71. parameters: [id_param() | admin_api_params()],
  72. security: [%{"oAuth" => ["admin:read:statuses"]}],
  73. responses: %{
  74. 200 => Operation.response("Status", "application/json", status()),
  75. 404 => Operation.response("Not Found", "application/json", ApiError)
  76. }
  77. }
  78. end
  79. def update_operation do
  80. %Operation{
  81. tags: ["Status administration"],
  82. summary: "Change the scope of a status",
  83. operationId: "AdminAPI.StatusController.update",
  84. parameters: [id_param() | admin_api_params()],
  85. security: [%{"oAuth" => ["admin:write:statuses"]}],
  86. requestBody: request_body("Parameters", update_request(), required: true),
  87. responses: %{
  88. 200 => Operation.response("Status", "application/json", Status),
  89. 400 => Operation.response("Error", "application/json", ApiError)
  90. }
  91. }
  92. end
  93. def delete_operation do
  94. %Operation{
  95. tags: ["Status administration"],
  96. summary: "Delete status",
  97. operationId: "AdminAPI.StatusController.delete",
  98. parameters: [id_param() | admin_api_params()],
  99. security: [%{"oAuth" => ["admin:write:statuses"]}],
  100. responses: %{
  101. 200 => empty_object_response(),
  102. 404 => Operation.response("Not Found", "application/json", ApiError)
  103. }
  104. }
  105. end
  106. defp status do
  107. %Schema{
  108. anyOf: [
  109. Status,
  110. %Schema{
  111. type: :object,
  112. properties: %{
  113. account: %Schema{allOf: [Account, admin_account()]}
  114. }
  115. }
  116. ]
  117. }
  118. end
  119. def admin_account do
  120. %Schema{
  121. type: :object,
  122. properties: %{
  123. id: FlakeID,
  124. avatar: %Schema{type: :string},
  125. nickname: %Schema{type: :string},
  126. display_name: %Schema{type: :string},
  127. is_active: %Schema{type: :boolean},
  128. local: %Schema{type: :boolean},
  129. roles: %Schema{
  130. type: :object,
  131. properties: %{
  132. admin: %Schema{type: :boolean},
  133. moderator: %Schema{type: :boolean}
  134. }
  135. },
  136. tags: %Schema{type: :string},
  137. is_confirmed: %Schema{type: :boolean}
  138. }
  139. }
  140. end
  141. defp update_request do
  142. %Schema{
  143. type: :object,
  144. properties: %{
  145. sensitive: %Schema{
  146. type: :boolean,
  147. description: "Mark status and attached media as sensitive?"
  148. },
  149. visibility: VisibilityScope
  150. },
  151. example: %{
  152. "visibility" => "private",
  153. "sensitive" => "false"
  154. }
  155. }
  156. end
  157. end