password: %OpenApiSpex.OAuthFlow{
authorizationUrl: "/oauth/authorize",
tokenUrl: "/oauth/token",
- scopes: %{"read" => "read", "write" => "write"}
+ scopes: %{"read" => "read", "write" => "write", "follow" => "follow"}
}
}
}
alias Pleroma.Web.ApiSpec.Schemas.Account
alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest
alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse
+ alias Pleroma.Web.ApiSpec.Schemas.AccountRelationship
alias Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse
alias Pleroma.Web.ApiSpec.Schemas.AccountsResponse
alias Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest
"Limit"
)
],
- responses: %{
- 200 => Operation.response("Accounts", "application/json", AccountsResponse)
- }
+ responses: %{200 => Operation.response("Accounts", "application/json", AccountsResponse)}
}
end
operationId: "AccountController.lists",
security: [%{"oAuth" => ["read:lists"]}],
description: "User lists that you have added this account to.",
+ parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}],
+ responses: %{200 => Operation.response("Lists", "application/json", ListsResponse)}
+ }
+ end
+
+ def follow_operation do
+ %Operation{
+ tags: ["accounts"],
+ summary: "Follow",
+ operationId: "AccountController.follow",
+ security: [%{"oAuth" => ["follow", "write:follows"]}],
+ description: "Follow the given account",
parameters: [
- %Reference{"$ref": "#/components/parameters/accountIdOrNickname"}
+ %Reference{"$ref": "#/components/parameters/accountIdOrNickname"},
+ Operation.parameter(
+ :reblogs,
+ :query,
+ BooleanLike,
+ "Receive this account's reblogs in home timeline? Defaults to true."
+ )
],
responses: %{
- 200 => Operation.response("Lists", "application/json", ListsResponse)
+ 200 => Operation.response("Relationship", "application/json", AccountRelationship)
}
}
end
- def follow_operation, do: :ok
def unfollow_operation, do: :ok
def mute_operation, do: :ok
def unmute_operation, do: :ok
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
-defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationshipResponse do
+defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationship do
alias OpenApiSpex.Schema
require OpenApiSpex
OpenApiSpex.schema(%{
- title: "AccountRelationshipResponse",
- description: "Response schema for an account relationship",
+ title: "AccountRelationship",
+ description: "Response schema for relationship",
type: :object,
properties: %{
- id: %Schema{type: :string},
- following: %Schema{type: :boolean},
- showing_reblogs: %Schema{type: :boolean},
- followed_by: %Schema{type: :boolean},
- blocking: %Schema{type: :boolean},
blocked_by: %Schema{type: :boolean},
+ blocking: %Schema{type: :boolean},
+ domain_blocking: %Schema{type: :boolean},
+ endorsed: %Schema{type: :boolean},
+ followed_by: %Schema{type: :boolean},
+ following: %Schema{type: :boolean},
+ id: %Schema{type: :string},
muting: %Schema{type: :boolean},
muting_notifications: %Schema{type: :boolean},
requested: %Schema{type: :boolean},
- domain_blocking: %Schema{type: :boolean},
- endorsed: %Schema{type: :boolean}
+ showing_reblogs: %Schema{type: :boolean},
+ subscribing: %Schema{type: :boolean}
},
example: %{
"JSON" => %{
- "id" => "1",
- "following" => true,
- "showing_reblogs" => true,
- "followed_by" => true,
- "blocking" => false,
"blocked_by" => false,
+ "blocking" => false,
+ "domain_blocking" => false,
+ "endorsed" => false,
+ "followed_by" => false,
+ "following" => false,
+ "id" => "9tKi3esbG7OQgZ2920",
"muting" => false,
"muting_notifications" => false,
"requested" => false,
- "domain_blocking" => false,
- "endorsed" => false
+ "showing_reblogs" => true,
+ "subscribing" => false
}
}
})
title: "AccountRelationshipsResponse",
description: "Response schema for account relationships",
type: :array,
- items: Pleroma.Web.ApiSpec.Schemas.AccountRelationshipResponse,
+ items: Pleroma.Web.ApiSpec.Schemas.AccountRelationship,
example: [
%{
"id" => "1",
"muting_notifications" => false,
"requested" => false,
"domain_blocking" => false,
+ "subscribing" => false,
"endorsed" => true
},
%{
"muting_notifications" => false,
"requested" => true,
"domain_blocking" => false,
+ "subscribing" => false,
"endorsed" => false
},
%{
"muting_notifications" => false,
"requested" => false,
"domain_blocking" => true,
+ "subscribing" => true,
"endorsed" => false
}
]
:statuses,
:followers,
:following,
- :lists
+ :lists,
+ :follow
]
)
{:error, :not_found}
end
- def follow(%{assigns: %{user: follower, account: followed}} = conn, _params) do
- with {:ok, follower} <- MastodonAPI.follow(follower, followed, conn.params) do
+ def follow(%{assigns: %{user: follower, account: followed}} = conn, params) do
+ with {:ok, follower} <- MastodonAPI.follow(follower, followed, params) do
render(conn, "relationship.json", user: follower, target: followed)
else
{:error, message} -> json_response(conn, :forbidden, %{error: message})
assert %{"id" => id} = json_response(conn, 200)
assert id == to_string(other_user.id)
+ assert_schema(json_response(conn, 200), "AccountRelationship", ApiSpec.spec())
end
test "cancelling follow request", %{conn: conn} do