Merge pull request 'mastodon_api: Add /api/v1/preferences endpoint' (#625) from redstrate/akkoma:work/redstrate/preferences into develop
Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/625
This commit is contained in:
commit
2df7707060
5 changed files with 61 additions and 1 deletions
|
@ -451,6 +451,20 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def preferences_operation do
|
||||||
|
%Operation{
|
||||||
|
tags: ["Account Preferences"],
|
||||||
|
description: "Preferences defined by the user in their account settings.",
|
||||||
|
summary: "Preferred common behaviors to be shared across clients.",
|
||||||
|
operationId: "AccountController.preferences",
|
||||||
|
security: [%{"oAuth" => ["read:accounts"]}],
|
||||||
|
responses: %{
|
||||||
|
200 => Operation.response("Preferences", "application/json", Account),
|
||||||
|
401 => Operation.response("Error", "application/json", ApiError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def identity_proofs_operation do
|
def identity_proofs_operation do
|
||||||
%Operation{
|
%Operation{
|
||||||
tags: ["Retrieve account information"],
|
tags: ["Retrieve account information"],
|
||||||
|
|
|
@ -51,7 +51,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
|
||||||
plug(
|
plug(
|
||||||
OAuthScopesPlug,
|
OAuthScopesPlug,
|
||||||
%{scopes: ["read:accounts"]}
|
%{scopes: ["read:accounts"]}
|
||||||
when action in [:verify_credentials, :endorsements, :identity_proofs]
|
when action in [:verify_credentials, :endorsements, :identity_proofs, :preferences]
|
||||||
)
|
)
|
||||||
|
|
||||||
plug(
|
plug(
|
||||||
|
@ -544,4 +544,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
|
||||||
|
|
||||||
@doc "GET /api/v1/identity_proofs"
|
@doc "GET /api/v1/identity_proofs"
|
||||||
def identity_proofs(conn, params), do: MastodonAPIController.empty_array(conn, params)
|
def identity_proofs(conn, params), do: MastodonAPIController.empty_array(conn, params)
|
||||||
|
|
||||||
|
@doc "GET /api/v1/preferences"
|
||||||
|
def preferences(%{assigns: %{user: user}} = conn, params) do
|
||||||
|
render(conn, "preferences.json", user: user)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -315,6 +315,17 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
|
||||||
|> maybe_put_email_address(user, opts[:for])
|
|> maybe_put_email_address(user, opts[:for])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def render("preferences.json", %{user: user} = opts) do
|
||||||
|
# TODO: Do we expose more settings that make sense to plug in here?
|
||||||
|
%{
|
||||||
|
"posting:default:visibility": user.default_scope,
|
||||||
|
"posting:default:sensitive": false,
|
||||||
|
"posting:default:language": nil,
|
||||||
|
"reading:expand:media": "default",
|
||||||
|
"reading:expand:spoilers": false
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
defp username_from_nickname(string) when is_binary(string) do
|
defp username_from_nickname(string) when is_binary(string) do
|
||||||
hd(String.split(string, "@"))
|
hd(String.split(string, "@"))
|
||||||
end
|
end
|
||||||
|
|
|
@ -629,6 +629,8 @@ defmodule Pleroma.Web.Router do
|
||||||
post("/tags/:id/follow", TagController, :follow)
|
post("/tags/:id/follow", TagController, :follow)
|
||||||
post("/tags/:id/unfollow", TagController, :unfollow)
|
post("/tags/:id/unfollow", TagController, :unfollow)
|
||||||
get("/followed_tags", TagController, :show_followed)
|
get("/followed_tags", TagController, :show_followed)
|
||||||
|
|
||||||
|
get("/preferences", AccountController, :preferences)
|
||||||
end
|
end
|
||||||
|
|
||||||
scope "/api/web", Pleroma.Web do
|
scope "/api/web", Pleroma.Web do
|
||||||
|
|
|
@ -2060,4 +2060,32 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
|
||||||
assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn_res, 404)
|
assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn_res, 404)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "preferences" do
|
||||||
|
test "get account preferences" do
|
||||||
|
user = insert(:user, default_scope: "public")
|
||||||
|
%{conn: conn} = oauth_access(["read:accounts"], user: user)
|
||||||
|
|
||||||
|
conn = get(conn, "/api/v1/preferences")
|
||||||
|
response = json_response_and_validate_schema(conn, 200)
|
||||||
|
|
||||||
|
assert %{
|
||||||
|
"posting:default:language" => nil,
|
||||||
|
"posting:default:sensitive" => false,
|
||||||
|
"posting:default:visibility" => "public",
|
||||||
|
"reading:expand:media" => "default",
|
||||||
|
"reading:expand:spoilers" => false
|
||||||
|
} = response
|
||||||
|
end
|
||||||
|
|
||||||
|
test "test changing account preferences" do
|
||||||
|
user = insert(:user, default_scope: "unlisted")
|
||||||
|
%{conn: conn} = oauth_access(["read:accounts"], user: user)
|
||||||
|
|
||||||
|
conn = get(conn, "/api/v1/preferences")
|
||||||
|
response = json_response_and_validate_schema(conn, 200)
|
||||||
|
|
||||||
|
assert response["posting:default:visibility"] == "unlisted"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue