Migrate to phoenix 1.7 #626
10 changed files with 71 additions and 8 deletions
|
@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||
|
||||
## Added
|
||||
- Full compatibility with Erlang OTP26
|
||||
- handling of GET /api/v1/preferences
|
||||
|
||||
## Changed
|
||||
- OTP builds are now built on erlang OTP26
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
This guide covers a installation using an OTP release. To install Akkoma from source, please check out the corresponding guide for your distro.
|
||||
|
||||
## Pre-requisites
|
||||
* A machine running Linux with GNU (e.g. Debian, Ubuntu) or musl (e.g. Alpine) libc and an `x86_64` CPU you have root access to. If you are not sure if it's compatible see [Detecting flavour section](#detecting-flavour) below
|
||||
* A machine running Linux with GNU (e.g. Debian, Ubuntu) or musl (e.g. Alpine) libc and an `x86_64` or `arm64` CPU you have root access to. If you are not sure if it's compatible see [Detecting flavour section](#detecting-flavour) below
|
||||
* For installing OTP releases on RedHat-based distros like Fedora and Centos Stream, please follow [this guide](./otp_redhat_en.md) instead.
|
||||
* A (sub)domain pointed to the machine
|
||||
|
||||
|
@ -187,18 +187,18 @@ The location of nginx configs is dependent on the distro
|
|||
|
||||
=== "Alpine"
|
||||
```
|
||||
cp /opt/akkoma/installation/nginx/akkoma.nginx /etc/nginx/conf.d/akkoma.conf
|
||||
cp /opt/akkoma/installation/akkoma.nginx /etc/nginx/conf.d/akkoma.conf
|
||||
```
|
||||
|
||||
=== "Debian/Ubuntu"
|
||||
```
|
||||
cp /opt/akkoma/installation/nginx/akkoma.nginx /etc/nginx/sites-available/akkoma.conf
|
||||
cp /opt/akkoma/installation/akkoma.nginx /etc/nginx/sites-available/akkoma.conf
|
||||
ln -s /etc/nginx/sites-available/akkoma.conf /etc/nginx/sites-enabled/akkoma.conf
|
||||
```
|
||||
|
||||
If your distro does not have either of those you can append `include /etc/nginx/akkoma.conf` to the end of the http section in /etc/nginx/nginx.conf and
|
||||
```sh
|
||||
cp /opt/akkoma/installation/nginx/akkoma.nginx /etc/nginx/akkoma.conf
|
||||
cp /opt/akkoma/installation/akkoma.nginx /etc/nginx/akkoma.conf
|
||||
```
|
||||
|
||||
#### Edit the nginx config
|
||||
|
|
|
@ -178,7 +178,7 @@ certbot certonly --standalone --preferred-challenges http -d yourinstance.tld
|
|||
#### Copy Akkoma nginx configuration to the nginx folder
|
||||
|
||||
```shell
|
||||
cp /opt/akkoma/installation/nginx/akkoma.nginx /etc/nginx/conf.d/akkoma.conf
|
||||
cp /opt/akkoma/installation/akkoma.nginx /etc/nginx/conf.d/akkoma.conf
|
||||
```
|
||||
|
||||
#### Edit the nginx config
|
||||
|
|
|
@ -130,6 +130,7 @@ def run(["get-packs" | args]) do
|
|||
}
|
||||
|
||||
File.write!(Path.join(pack_path, "pack.json"), Jason.encode!(pack_json, pretty: true))
|
||||
Pleroma.Emoji.reload()
|
||||
else
|
||||
IO.puts(IO.ANSI.format([:bright, :red, "No pack named \"#{pack_name}\" found"]))
|
||||
end
|
||||
|
@ -235,6 +236,7 @@ def run(["gen-pack" | args]) do
|
|||
|
||||
IO.puts("#{pack_file} has been created with the #{name} pack")
|
||||
end
|
||||
Pleroma.Emoji.reload()
|
||||
end
|
||||
|
||||
def run(["reload"]) do
|
||||
|
|
|
@ -30,12 +30,12 @@ def run(["index"]) do
|
|||
meili_put(
|
||||
"/indexes/objects/settings/ranking-rules",
|
||||
[
|
||||
"published:desc",
|
||||
"words",
|
||||
"exactness",
|
||||
"proximity",
|
||||
"typo",
|
||||
"exactness",
|
||||
"attribute",
|
||||
"published:desc",
|
||||
"sort"
|
||||
]
|
||||
)
|
||||
|
|
|
@ -451,6 +451,20 @@ def endorsements_operation do
|
|||
}
|
||||
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
|
||||
%Operation{
|
||||
tags: ["Retrieve account information"],
|
||||
|
|
|
@ -51,7 +51,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
|
|||
plug(
|
||||
OAuthScopesPlug,
|
||||
%{scopes: ["read:accounts"]}
|
||||
when action in [:verify_credentials, :endorsements, :identity_proofs]
|
||||
when action in [:verify_credentials, :endorsements, :identity_proofs, :preferences]
|
||||
)
|
||||
|
||||
plug(
|
||||
|
@ -544,4 +544,9 @@ def endorsements(conn, params), do: MastodonAPIController.empty_array(conn, para
|
|||
|
||||
@doc "GET /api/v1/identity_proofs"
|
||||
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
|
||||
|
|
|
@ -190,6 +190,17 @@ def render("instance.json", %{instance: %Pleroma.Instances.Instance{} = instance
|
|||
|
||||
def render("instance.json", _), do: nil
|
||||
|
||||
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 do_render("show.json", %{user: user} = opts) do
|
||||
user = User.sanitize_html(user, User.html_filter_policy(opts[:for]))
|
||||
display_name = user.name || user.nickname
|
||||
|
|
|
@ -629,6 +629,8 @@ defmodule Pleroma.Web.Router do
|
|||
post("/tags/:id/follow", TagController, :follow)
|
||||
post("/tags/:id/unfollow", TagController, :unfollow)
|
||||
get("/followed_tags", TagController, :show_followed)
|
||||
|
||||
get("/preferences", AccountController, :preferences)
|
||||
end
|
||||
|
||||
scope "/api/web", Pleroma.Web do
|
||||
|
|
|
@ -2060,4 +2060,32 @@ test "removing user from followers errors", %{user: user, conn: conn} do
|
|||
assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn_res, 404)
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue