# Conflicts: # CHANGELOG.md2298-weird-follow-issue
@@ -198,7 +198,7 @@ amd64: | |||
variables: &release-variables | |||
MIX_ENV: prod | |||
before_script: &before-release | |||
- apt-get update && apt-get install -y cmake | |||
- apt-get update && apt-get install -y cmake libmagic-dev | |||
- echo "import Mix.Config" > config/prod.secret.exs | |||
- mix local.hex --force | |||
- mix local.rebar --force | |||
@@ -217,7 +217,7 @@ amd64-musl: | |||
cache: *release-cache | |||
variables: *release-variables | |||
before_script: &before-release-musl | |||
- apk add git gcc g++ musl-dev make cmake | |||
- apk add git gcc g++ musl-dev make cmake file-dev | |||
- echo "import Mix.Config" > config/prod.secret.exs | |||
- mix local.hex --force | |||
- mix local.rebar --force | |||
@@ -9,7 +9,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). | |||
- Mix tasks for controlling user account confirmation status in bulk (`mix pleroma.user confirm_all` and `mix pleroma.user unconfirm_all`) | |||
- Mix task for sending confirmation emails to all unconfirmed users (`mix pleroma.email send_confirmation_mails`) | |||
- Mix task option for force-unfollowing relays | |||
- Setting `:instance, autofollowing_nicknames` to provide a way to make accounts automatically follow new users that register on the local Pleroma instance. | |||
- Media preview proxy (requires `ffmpeg` and `ImageMagick` to be installed and media proxy to be enabled; see `:media_preview_proxy` config for more details). | |||
- Pleroma API: Importing the mutes users from CSV files. | |||
- Experimental websocket-based federation between Pleroma instances. | |||
- Configuration: Add `:instance, autofollowing_nicknames` setting to provide a way to make accounts automatically follow new users that register on the local Pleroma instance. | |||
### Changed | |||
@@ -24,11 +28,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). | |||
- Minimum lifetime for ephmeral activities changed to 10 minutes and made configurable (`:min_lifetime` option). | |||
- Introduced optional dependencies on `ffmpeg`, `ImageMagick`, `exiftool` software packages. Please refer to `docs/installation/optional/media_graphics_packages.md`. | |||
### Added | |||
- Media preview proxy (requires `ffmpeg` and `ImageMagick` to be installed and media proxy to be enabled; see `:media_preview_proxy` config for more details). | |||
- Pleroma API: Importing the mutes users from CSV files. | |||
- Experimental websocket-based federation between Pleroma instances. | |||
<details> | |||
<summary>API Changes</summary> | |||
@@ -50,6 +49,7 @@ switched to a new configuration mechanism, however it was not officially removed | |||
- Add documented-but-missing chat pagination. | |||
- Allow sending out emails again. | |||
- Allow sending chat messages to yourself | |||
## Unreleased (Patch) | |||
@@ -123,7 +123,6 @@ websocket_config = [ | |||
# Configures the endpoint | |||
config :pleroma, Pleroma.Web.Endpoint, | |||
instrumenters: [Pleroma.Web.Endpoint.Instrumenter], | |||
url: [host: "localhost"], | |||
http: [ | |||
ip: {127, 0, 0, 1}, | |||
@@ -143,7 +142,7 @@ config :pleroma, Pleroma.Web.Endpoint, | |||
secret_key_base: "aK4Abxf29xU9TTDKre9coZPUgevcVCFQJe/5xP/7Lt4BEif6idBIbjupVbOrbKxl", | |||
signing_salt: "CqaoopA2", | |||
render_errors: [view: Pleroma.Web.ErrorView, accepts: ~w(json)], | |||
pubsub: [name: Pleroma.PubSub, adapter: Phoenix.PubSub.PG2], | |||
pubsub_server: Pleroma.PubSub, | |||
secure_cookie_flag: true, | |||
extra_cookie_attrs: [ | |||
"SameSite=Lax" | |||
@@ -829,13 +829,7 @@ config :pleroma, :config_description, [ | |||
key: :autofollowed_nicknames, | |||
type: {:list, :string}, | |||
description: | |||
"Set to nicknames of (local) users that every new user should automatically follow", | |||
suggestions: [ | |||
"lain", | |||
"kaniini", | |||
"lanodan", | |||
"rinpatch" | |||
] | |||
"Set to nicknames of (local) users that every new user should automatically follow" | |||
}, | |||
%{ | |||
key: :autofollowing_nicknames, | |||
@@ -1,11 +1,41 @@ | |||
# ChatMessages | |||
# AP Extensions | |||
## Actor endpoints | |||
ChatMessages are the messages sent in 1-on-1 chats. They are similar to | |||
The following endpoints are additionally present into our actors. | |||
- `oauthRegistrationEndpoint` (`http://litepub.social/ns#oauthRegistrationEndpoint`) | |||
- `uploadMedia` (`https://www.w3.org/ns/activitystreams#uploadMedia`) | |||
### oauthRegistrationEndpoint | |||
Points to MastodonAPI `/api/v1/apps` for now. | |||
See <https://docs.joinmastodon.org/methods/apps/> | |||
### uploadMedia | |||
Inspired by <https://www.w3.org/wiki/SocialCG/ActivityPub/MediaUpload>, it is part of the ActivityStreams namespace because it used to be part of the ActivityPub specification and got removed from it. | |||
Content-Type: multipart/form-data | |||
Parameters: | |||
- (required) `file`: The file being uploaded | |||
- (optionnal) `description`: A plain-text description of the media, for accessibility purposes. | |||
Response: HTTP 201 Created with the object into the body, no `Location` header provided as it doesn't have an `id` | |||
The object given in the reponse should then be inserted into an Object's `attachment` field. | |||
## ChatMessages | |||
`ChatMessage`s are the messages sent in 1-on-1 chats. They are similar to | |||
`Note`s, but the addresing is done by having a single AP actor in the `to` | |||
field. Addressing multiple actors is not allowed. These messages are always | |||
private, there is no public version of them. They are created with a `Create` | |||
activity. | |||
They are part of the `litepub` namespace as `http://litepub.social/ns#ChatMessage`. | |||
Example: | |||
```json | |||
@@ -7,97 +7,105 @@ Feel free to contact us to be added to this list! | |||
- Homepage: <https://www.pleroma.com/#desktopApp> | |||
- Source Code: <https://github.com/roma-apps/roma-desktop> | |||
- Platforms: Windows, Mac, Linux | |||
- Features: Streaming Ready | |||
- Features: MastoAPI, Streaming Ready | |||
### Social | |||
- Source Code: <https://gitlab.gnome.org/World/Social> | |||
- Contact: [@brainblasted@social.libre.fi](https://social.libre.fi/users/brainblasted) | |||
- Platforms: Linux (GNOME) | |||
- Note(2019-01-28): Not at a pre-alpha stage yet | |||
- Features: MastoAPI | |||
### Whalebird | |||
- Homepage: <https://whalebird.org/> | |||
- Source Code: <https://github.com/h3poteto/whalebird-desktop> | |||
- Contact: [@h3poteto@pleroma.io](https://pleroma.io/users/h3poteto) | |||
- Platforms: Windows, Mac, Linux | |||
- Features: Streaming Ready | |||
- Features: MastoAPI, Streaming Ready | |||
## Handheld | |||
### AndStatus | |||
- Homepage: <http://andstatus.org/> | |||
- Source Code: <https://github.com/andstatus/andstatus/> | |||
- Platforms: Android | |||
- Features: MastoAPI, ActivityPub (Client-to-Server) | |||
### Amaroq | |||
- Homepage: <https://itunes.apple.com/us/app/amaroq-for-mastodon/id1214116200> | |||
- Source Code: <https://github.com/ReticentJohn/Amaroq> | |||
- Contact: [@eurasierboy@mastodon.social](https://mastodon.social/users/eurasierboy) | |||
- Platforms: iOS | |||
- Features: No Streaming | |||
- Features: MastoAPI, No Streaming | |||
### Fedilab | |||
- Homepage: <https://fedilab.app/> | |||
- Source Code: <https://framagit.org/tom79/fedilab/> | |||
- Contact: [@fedilab@framapiaf.org](https://framapiaf.org/users/fedilab) | |||
- Platforms: Android | |||
- Features: Streaming Ready, Moderation, Text Formatting | |||
- Features: MastoAPI, Streaming Ready, Moderation, Text Formatting | |||
### Kyclos | |||
- Source Code: <https://git.pleroma.social/pleroma/harbour-kyclos> | |||
- Platforms: SailfishOS | |||
- Features: No Streaming | |||
- Features: MastoAPI, No Streaming | |||
### Husky | |||
- Source code: <https://git.mentality.rip/FWGS/Husky> | |||
- Contact: [@Husky@enigmatic.observer](https://enigmatic.observer/users/Husky) | |||
- Platforms: Android | |||
- Features: No Streaming, Emoji Reactions, Text Formatting, FE Stickers | |||
- Features: MastoAPI, No Streaming, Emoji Reactions, Text Formatting, FE Stickers | |||
### Fedi | |||
- Homepage: <https://www.fediapp.com/> | |||
- Source Code: Proprietary, but gratis | |||
- Platforms: iOS, Android | |||
- Features: Pleroma-specific features like Reactions | |||
- Features: MastoAPI, Pleroma-specific features like Reactions | |||
### Tusky | |||
- Homepage: <https://tuskyapp.github.io/> | |||
- Source Code: <https://github.com/tuskyapp/Tusky> | |||
- Contact: [@ConnyDuck@mastodon.social](https://mastodon.social/users/ConnyDuck) | |||
- Platforms: Android | |||
- Features: No Streaming | |||
- Features: MastoAPI, No Streaming | |||
### Twidere | |||
- Homepage: <https://twidere.mariotaku.org/> | |||
- Source Code: <https://github.com/TwidereProject/Twidere-Android/> | |||
- Contact: <me@mariotaku.org> | |||
- Platform: Android | |||
- Features: No Streaming | |||
- Features: MastoAPI, No Streaming | |||
### Indigenous | |||
- Homepage: <https://indigenous.realize.be/> | |||
- Source Code: <https://github.com/swentel/indigenous-android/> | |||
- Contact: [@swentel@realize.be](https://realize.be) | |||
- Platforms: Android | |||
- Features: No Streaming | |||
- Features: MastoAPI, No Streaming | |||
## Alternative Web Interfaces | |||
### Brutaldon | |||
- Homepage: <https://jfm.carcosa.net/projects/software/brutaldon/> | |||
- Source Code: <https://git.carcosa.net/jmcbray/brutaldon> | |||
- Contact: [@gcupc@glitch.social](https://glitch.social/users/gcupc) | |||
- Features: No Streaming | |||
- Features: MastoAPI, No Streaming | |||
### Halcyon | |||
- Source Code: <https://notabug.org/halcyon-suite/halcyon> | |||
- Contact: [@halcyon@social.csswg.org](https://social.csswg.org/users/halcyon) | |||
- Features: Streaming Ready | |||
- Features: MastoAPI, Streaming Ready | |||
### Pinafore | |||
- Homepage: <https://pinafore.social/> | |||
- Source Code: <https://github.com/nolanlawson/pinafore> | |||
- Contact: [@pinafore@mastodon.technology](https://mastodon.technology/users/pinafore) | |||
- Note: Pleroma support is a secondary goal | |||
- Features: No Streaming | |||
- Features: MastoAPI, No Streaming | |||
### Sengi | |||
- Homepage: <https://nicolasconstant.github.io/sengi/> | |||
- Source Code: <https://github.com/NicolasConstant/sengi> | |||
- Contact: [@sengi_app@mastodon.social](https://mastodon.social/users/sengi_app) | |||
- Features: MastoAPI | |||
### DashFE | |||
- Source Code: <https://notabug.org/daisuke/DashboardFE> | |||
@@ -107,3 +115,4 @@ Feel free to contact us to be added to this list! | |||
- Source Code: <https://git.freesoftwareextremist.com/bloat/> | |||
- Contact: [@r@freesoftwareextremist.com](https://freesoftwareextremist.com/users/r) | |||
- Features: Does not requires JavaScript | |||
- Features: MastoAPI |
@@ -43,7 +43,7 @@ Other than things bundled in the OTP release Pleroma depends on: | |||
### Installing optional packages | |||
Per [`docs/installation/optional/media_graphics_packages.md`](docs/installation/optional/media_graphics_packages.md): | |||
Per [`docs/installation/optional/media_graphics_packages.md`](optional/media_graphics_packages.md): | |||
* ImageMagick | |||
* ffmpeg | |||
* exiftool | |||
@@ -31,8 +31,6 @@ ProtectHome=true | |||
ProtectSystem=full | |||
; Sets up a new /dev mount for the process and only adds API pseudo devices like /dev/null, /dev/zero or /dev/random but not physical devices. Disabled by default because it may not work on devices like the Raspberry Pi. | |||
PrivateDevices=false | |||
; Ensures that the service process and all its children can never gain new privileges through execve(). | |||
NoNewPrivileges=true | |||
; Drops the sysadmin capability from the daemon. | |||
CapabilityBoundingSet=~CAP_SYS_ADMIN | |||
@@ -31,7 +31,12 @@ defmodule Phoenix.Transports.WebSocket.Raw do | |||
case conn do | |||
%{halted: false} = conn -> | |||
case Transport.connect(endpoint, handler, transport, __MODULE__, nil, conn.params) do | |||
case handler.connect(%{ | |||
endpoint: endpoint, | |||
transport: transport, | |||
options: [serializer: nil], | |||
params: conn.params | |||
}) do | |||
{:ok, socket} -> | |||
{:ok, conn, {__MODULE__, {socket, opts}}} | |||
@@ -100,7 +100,7 @@ defmodule Pleroma.Application do | |||
] ++ | |||
task_children(@env) ++ | |||
dont_run_in_test(@env) ++ | |||
chat_child(@env, chat_enabled?()) ++ | |||
chat_child(chat_enabled?()) ++ | |||
[ | |||
Pleroma.Web.Endpoint, | |||
Pleroma.Gopher.Server | |||
@@ -151,7 +151,10 @@ defmodule Pleroma.Application do | |||
Pleroma.Web.Endpoint.MetricsExporter.setup() | |||
Pleroma.Web.Endpoint.PipelineInstrumenter.setup() | |||
Pleroma.Web.Endpoint.Instrumenter.setup() | |||
# Note: disabled until prometheus-phx is integrated into prometheus-phoenix: | |||
# Pleroma.Web.Endpoint.Instrumenter.setup() | |||
PrometheusPhx.setup() | |||
end | |||
defp cachex_children do | |||
@@ -202,11 +205,14 @@ defmodule Pleroma.Application do | |||
] | |||
end | |||
defp chat_child(_env, true) do | |||
[Pleroma.Web.ChatChannel.ChatChannelState] | |||
defp chat_child(true) do | |||
[ | |||
Pleroma.Web.ChatChannel.ChatChannelState, | |||
{Phoenix.PubSub, [name: Pleroma.PubSub, adapter: Phoenix.PubSub.PG2]} | |||
] | |||
end | |||
defp chat_child(_, _), do: [] | |||
defp chat_child(_), do: [] | |||
defp task_children(:test) do | |||
[ | |||
@@ -172,7 +172,7 @@ defmodule Pleroma.Web do | |||
def channel do | |||
quote do | |||
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse | |||
use Phoenix.Channel | |||
import Phoenix.Channel | |||
import Pleroma.Web.Gettext | |||
end | |||
end | |||
@@ -827,7 +827,14 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do | |||
query = | |||
from([activity] in query, | |||
where: fragment("not (? = ANY(?))", activity.actor, ^mutes), | |||
where: fragment("not (?->'to' \\?| ?)", activity.data, ^mutes) | |||
where: | |||
fragment( | |||
"not (?->'to' \\?| ?) or ? = ?", | |||
activity.data, | |||
^mutes, | |||
activity.actor, | |||
^user.ap_id | |||
) | |||
) | |||
unless opts[:skip_preload] do | |||
@@ -414,7 +414,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do | |||
object = | |||
object | |||
|> Map.merge(Map.take(params, ["to", "cc"])) | |||
|> Map.put("attributedTo", user.ap_id()) | |||
|> Map.put("attributedTo", user.ap_id) | |||
|> Transmogrifier.fix_object() | |||
ActivityPub.create(%{ | |||
@@ -458,7 +458,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do | |||
%{assigns: %{user: %User{nickname: nickname} = user}} = conn, | |||
%{"nickname" => nickname} = params | |||
) do | |||
actor = user.ap_id() | |||
actor = user.ap_id | |||
params = | |||
params | |||
@@ -525,19 +525,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do | |||
{new_user, for_user} | |||
end | |||
@doc """ | |||
Endpoint based on <https://www.w3.org/wiki/SocialCG/ActivityPub/MediaUpload> | |||
Parameters: | |||
- (required) `file`: data of the media | |||
- (optionnal) `description`: description of the media, intended for accessibility | |||
Response: | |||
- HTTP Code: 201 Created | |||
- HTTP Body: ActivityPub object to be inserted into another's `attachment` field | |||
Note: Will not point to a URL with a `Location` header because no standalone Activity has been created. | |||
""" | |||
def upload_media(%{assigns: %{user: %User{} = user}} = conn, %{"file" => file} = data) do | |||
with {:ok, object} <- | |||
ActivityPub.upload( | |||
@@ -242,9 +242,7 @@ defmodule Pleroma.Web.ActivityPub.Publisher do | |||
end) | |||
end | |||
@doc """ | |||
Publishes an activity to all relevant peers. | |||
""" | |||
# Publishes an activity to all relevant peers. | |||
def publish(%User{} = actor, %Activity{} = activity) do | |||
public = is_public?(activity) | |||
@@ -306,6 +306,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do | |||
streamables = | |||
[[actor, recipient], [recipient, actor]] | |||
|> Enum.uniq() | |||
|> Enum.map(fn [user, other_user] -> | |||
if user.local do | |||
{:ok, chat} = Chat.bump_or_create(user.id, other_user.ap_id) | |||
@@ -40,6 +40,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do | |||
|> fix_in_reply_to(options) | |||
|> fix_emoji | |||
|> fix_tag | |||
|> set_sensitive | |||
|> fix_content_map | |||
|> fix_addressing | |||
|> fix_summary | |||
@@ -313,19 +314,21 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do | |||
tags = | |||
tag | |||
|> Enum.filter(fn data -> data["type"] == "Hashtag" and data["name"] end) | |||
|> Enum.map(fn data -> String.slice(data["name"], 1..-1) end) | |||
|> Enum.map(fn %{"name" => name} -> | |||
name | |||
|> String.slice(1..-1) | |||
|> String.downcase() | |||
end) | |||
Map.put(object, "tag", tag ++ tags) | |||
end | |||
def fix_tag(%{"tag" => %{"type" => "Hashtag", "name" => hashtag} = tag} = object) do | |||
combined = [tag, String.slice(hashtag, 1..-1)] | |||
Map.put(object, "tag", combined) | |||
def fix_tag(%{"tag" => %{} = tag} = object) do | |||
object | |||
|> Map.put("tag", [tag]) | |||
|> fix_tag | |||
end | |||
def fix_tag(%{"tag" => %{} = tag} = object), do: Map.put(object, "tag", [tag]) | |||
def fix_tag(object), do: object | |||
# content map usually only has one language so this will do for now. | |||
@@ -927,7 +930,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do | |||
Map.put(object, "conversation", object["context"]) | |||
end | |||
def set_sensitive(%{"sensitive" => true} = object) do | |||
def set_sensitive(%{"sensitive" => _} = object) do | |||
object | |||
end | |||
@@ -52,7 +52,7 @@ defmodule Pleroma.Web.AdminAPI.ReportView do | |||
end | |||
def render("index_notes.json", %{notes: notes}) when is_list(notes) do | |||
Enum.map(notes, &render(__MODULE__, "show_note.json", &1)) | |||
Enum.map(notes, &render(__MODULE__, "show_note.json", Map.from_struct(&1))) | |||
end | |||
def render("index_notes.json", _), do: [] | |||
@@ -274,7 +274,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do | |||
def format_input(text, format, options \\ []) | |||
@doc """ | |||
Formatting text to plain text. | |||
Formatting text to plain text, BBCode, HTML, or Markdown | |||
""" | |||
def format_input(text, "text/plain", options) do | |||
text | |||
@@ -285,9 +285,6 @@ defmodule Pleroma.Web.CommonAPI.Utils do | |||
end).() | |||
end | |||
@doc """ | |||
Formatting text as BBCode. | |||
""" | |||
def format_input(text, "text/bbcode", options) do | |||
text | |||
|> String.replace(~r/\r/, "") | |||
@@ -297,18 +294,12 @@ defmodule Pleroma.Web.CommonAPI.Utils do | |||
|> Formatter.linkify(options) | |||
end | |||
@doc """ | |||
Formatting text to html. | |||
""" | |||
def format_input(text, "text/html", options) do | |||
text | |||
|> Formatter.html_escape("text/html") | |||
|> Formatter.linkify(options) | |||
end | |||
@doc """ | |||
Formatting text to markdown. | |||
""" | |||
def format_input(text, "text/markdown", options) do | |||
text | |||
|> Formatter.mentions_escape(options) | |||
@@ -9,6 +9,8 @@ defmodule Pleroma.Web.Endpoint do | |||
socket("/socket", Pleroma.Web.UserSocket) | |||
plug(Plug.Telemetry, event_prefix: [:phoenix, :endpoint]) | |||
plug(Pleroma.Web.Plugs.SetLocalePlug) | |||
plug(CORSPlug) | |||
plug(Pleroma.Web.Plugs.HTTPSecurityPlug) | |||
@@ -24,7 +24,7 @@ defmodule Pleroma.Web.MastodonAPI.AuthController do | |||
redirect(conn, to: local_mastodon_root_path(conn)) | |||
end | |||
@doc "Local Mastodon FE login init action" | |||
# Local Mastodon FE login init action | |||
def login(conn, %{"code" => auth_token}) do | |||
with {:ok, app} <- get_or_make_app(), | |||
{:ok, auth} <- Authorization.get_by_token(app, auth_token), | |||
@@ -35,7 +35,7 @@ defmodule Pleroma.Web.MastodonAPI.AuthController do | |||
end | |||
end | |||
@doc "Local Mastodon FE callback action" | |||
# Local Mastodon FE callback action | |||
def login(conn, _) do | |||
with {:ok, app} <- get_or_make_app() do | |||
path = | |||
@@ -127,9 +127,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do | |||
@doc """ | |||
POST /api/v1/statuses | |||
Creates a scheduled status when `scheduled_at` param is present and it's far enough | |||
""" | |||
# Creates a scheduled status when `scheduled_at` param is present and it's far enough | |||
def create( | |||
%{ | |||
assigns: %{user: user}, | |||
@@ -160,11 +159,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do | |||
end | |||
end | |||
@doc """ | |||
POST /api/v1/statuses | |||
Creates a regular status | |||
""" | |||
# Creates a regular status | |||
def create(%{assigns: %{user: user}, body_params: %{status: _} = params} = conn, _) do | |||
params = Map.put(params, :in_reply_to_status_id, params[:in_reply_to_id]) | |||
@@ -30,7 +30,7 @@ defmodule Pleroma.Web.MediaProxy.Invalidation.Http do | |||
{:ok, %{status: status} = env} when 400 <= status and status < 500 -> | |||
{:error, env} | |||
{:error, error} = error -> | |||
{:error, _} = error -> | |||
error | |||
_ -> | |||
@@ -228,7 +228,7 @@ | |||
<body> | |||
<div class="container"> | |||
<h1><%= Pleroma.Config.get([:instance, :name]) %></h1> | |||
<%= render @view_module, @view_template, assigns %> | |||
<%= @inner_content %> | |||
</div> | |||
</body> | |||
</html> |
@@ -181,7 +181,7 @@ | |||
</div> | |||
</div> | |||
<% end %> | |||
<%= render @view_module, @view_template, assigns %> | |||
<%= @inner_content %> | |||
</td> | |||
</tr> | |||
@@ -10,7 +10,7 @@ video, audio { | |||
} | |||
</style> | |||
<%= render @view_module, @view_template, assigns %> | |||
<%= @inner_content %> | |||
</body> | |||
</html> |
@@ -9,7 +9,7 @@ | |||
</head> | |||
<body> | |||
<div class="container"> | |||
<%= render @view_module, @view_template, assigns %> | |||
<%= @inner_content %> | |||
</div> | |||
</body> | |||
</html> |
@@ -114,10 +114,10 @@ defmodule Pleroma.Mixfile do | |||
# Type `mix help deps` for examples and options. | |||
defp deps do | |||
[ | |||
{:phoenix, "~> 1.4.17"}, | |||
{:phoenix, "~> 1.5.5"}, | |||
{:tzdata, "~> 1.0.3"}, | |||
{:plug_cowboy, "~> 2.3"}, | |||
{:phoenix_pubsub, "~> 1.1"}, | |||
{:phoenix_pubsub, "~> 2.0"}, | |||
{:phoenix_ecto, "~> 4.0"}, | |||
{:ecto_enum, "~> 1.4"}, | |||
{:ecto_sql, "~> 3.4.4"}, | |||
@@ -165,9 +165,16 @@ defmodule Pleroma.Mixfile do | |||
{:telemetry, "~> 0.3"}, | |||
{:poolboy, "~> 1.5"}, | |||
{:prometheus, "~> 4.6"}, | |||
{:prometheus_ex, "~> 3.0"}, | |||
{:prometheus_ex, | |||
git: "https://git.pleroma.social/pleroma/elixir-libraries/prometheus.ex.git", | |||
ref: "a4e9beb3c1c479d14b352fd9d6dd7b1f6d7deee5", | |||
override: true}, | |||
{:prometheus_plugs, "~> 1.1"}, | |||
{:prometheus_phoenix, "~> 1.3"}, | |||
# Note: once `prometheus_phx` is integrated into `prometheus_phoenix`, remove the former: | |||
{:prometheus_phx, | |||
git: "https://git.pleroma.social/pleroma/elixir-libraries/prometheus-phx.git", | |||
branch: "no-logging"}, | |||
{:prometheus_ecto, "~> 1.4"}, | |||
{:recon, "~> 2.5"}, | |||
{:quack, "~> 0.1.1"}, | |||
@@ -18,8 +18,9 @@ | |||
"connection": {:hex, :connection, "1.0.4", "a1cae72211f0eef17705aaededacac3eb30e6625b04a6117c1b2db6ace7d5976", [:mix], [], "hexpm", "4a0850c9be22a43af9920a71ab17c051f5f7d45c209e40269a1938832510e4d9"}, | |||
"cors_plug": {:hex, :cors_plug, "2.0.2", "2b46083af45e4bc79632bd951550509395935d3e7973275b2b743bd63cc942ce", [:mix], [{:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f0d0e13f71c51fd4ef8b2c7e051388e4dfb267522a83a22392c856de7e46465f"}, | |||
"cowboy": {:hex, :cowboy, "2.8.0", "f3dc62e35797ecd9ac1b50db74611193c29815401e53bac9a5c0577bd7bc667d", [:rebar3], [{:cowlib, "~> 2.9.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.7.1", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "4643e4fba74ac96d4d152c75803de6fad0b3fa5df354c71afdd6cbeeb15fac8a"}, | |||
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.3.0", "69fdb5cf92df6373e15675eb4018cf629f5d8e35e74841bb637d6596cb797bbc", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "42868c229d9a2900a1501c5d0355bfd46e24c862c322b0b4f5a6f14fe0216753"}, | |||
"cowlib": {:hex, :cowlib, "2.9.1", "61a6c7c50cf07fdd24b2f45b89500bb93b6686579b069a89f88cb211e1125c78", [:rebar3], [], "hexpm", "e4175dc240a70d996156160891e1c62238ede1729e45740bdd38064dad476170"}, | |||
"credo": {:hex, :credo, "1.4.0", "92339d4cbadd1e88b5ee43d427b639b68a11071b6f73854e33638e30a0ea11f5", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "1fd3b70dce216574ce3c18bdf510b57e7c4c85c2ec9cad4bff854abaf7e58658"}, | |||
"credo": {:hex, :credo, "1.4.1", "16392f1edd2cdb1de9fe4004f5ab0ae612c92e230433968eab00aafd976282fc", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "155f8a2989ad77504de5d8291fa0d41320fdcaa6a1030472e9967f285f8c7692"}, | |||
"crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, | |||
"crypt": {:git, "https://github.com/msantos/crypt.git", "f63a705f92c26955977ee62a313012e309a4d77a", [ref: "f63a705f92c26955977ee62a313012e309a4d77a"]}, | |||
"custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, | |||
@@ -85,14 +86,14 @@ | |||
"p1_utils": {:hex, :p1_utils, "1.0.18", "3fe224de5b2e190d730a3c5da9d6e8540c96484cf4b4692921d1e28f0c32b01c", [:rebar3], [], "hexpm", "1fc8773a71a15553b179c986b22fbeead19b28fe486c332d4929700ffeb71f88"}, | |||
"parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, | |||
"pbkdf2_elixir": {:hex, :pbkdf2_elixir, "1.2.1", "9cbe354b58121075bd20eb83076900a3832324b7dd171a6895fab57b6bb2752c", [:mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}], "hexpm", "d3b40a4a4630f0b442f19eca891fcfeeee4c40871936fed2f68e1c4faa30481f"}, | |||
"phoenix": {:hex, :phoenix, "1.4.17", "1b1bd4cff7cfc87c94deaa7d60dd8c22e04368ab95499483c50640ef3bd838d8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3a8e5d7a3d76d452bb5fb86e8b7bd115f737e4f8efe202a463d4aeb4a5809611"}, | |||
"phoenix_ecto": {:hex, :phoenix_ecto, "4.1.0", "a044d0756d0464c5a541b4a0bf4bcaf89bffcaf92468862408290682c73ae50d", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "c5e666a341ff104d0399d8f0e4ff094559b2fde13a5985d4cb5023b2c2ac558b"}, | |||
"phoenix": {:hex, :phoenix, "1.5.6", "8298cdb4e0f943242ba8410780a6a69cbbe972fef199b341a36898dd751bdd66", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.13", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.1.2 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "0dc4d39af1306b6aa5122729b0a95ca779e42c708c6fe7abbb3d336d5379e956"}, | |||
"phoenix_ecto": {:hex, :phoenix_ecto, "4.2.1", "13f124cf0a3ce0f1948cf24654c7b9f2347169ff75c1123f44674afee6af3b03", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 2.15", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "478a1bae899cac0a6e02be1deec7e2944b7754c04e7d4107fc5a517f877743c0"}, | |||
"phoenix_html": {:hex, :phoenix_html, "2.14.2", "b8a3899a72050f3f48a36430da507dd99caf0ac2d06c77529b1646964f3d563e", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "58061c8dfd25da5df1ea0ca47c972f161beb6c875cd293917045b92ffe1bf617"}, | |||
"phoenix_pubsub": {:hex, :phoenix_pubsub, "1.1.2", "496c303bdf1b2e98a9d26e89af5bba3ab487ba3a3735f74bf1f4064d2a845a3e", [:mix], [], "hexpm", "1f13f9f0f3e769a667a6b6828d29dec37497a082d195cc52dbef401a9b69bf38"}, | |||
"phoenix_swoosh": {:hex, :phoenix_swoosh, "0.3.0", "2acfa0db038a7649e0a4614eee970e6ed9a39d191ccd79a03583b51d0da98165", [:mix], [{:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.0", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "b8bbae4b59a676de6b8bd8675eda37bc8b4424812ae429d6fdcb2b039e00003b"}, | |||
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.0.0", "a1ae76717bb168cdeb10ec9d92d1480fec99e3080f011402c0a2d68d47395ffb", [:mix], [], "hexpm", "c52d948c4f261577b9c6fa804be91884b381a7f8f18450c5045975435350f771"}, | |||
"phoenix_swoosh": {:hex, :phoenix_swoosh, "0.3.2", "43d3518349a22b8b1910ea28b4dd5119926d5017b3187db3fbd1a1e05769a851", [:mix], [{:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.0", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "3e2ac4e883db7af0702d75ba00c19901760e8342b91f8f66e13941de552e777f"}, | |||
"plug": {:hex, :plug, "1.10.4", "41eba7d1a2d671faaf531fa867645bd5a3dce0957d8e2a3f398ccff7d2ef017f", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ad1e233fe73d2eec56616568d260777b67f53148a999dc2d048f4eb9778fe4a0"}, | |||
"plug_cowboy": {:hex, :plug_cowboy, "2.3.0", "149a50e05cb73c12aad6506a371cd75750c0b19a32f81866e1a323dda9e0e99d", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "bc595a1870cef13f9c1e03df56d96804db7f702175e4ccacdb8fc75c02a7b97e"}, | |||
"plug_crypto": {:hex, :plug_crypto, "1.1.2", "bdd187572cc26dbd95b87136290425f2b580a116d3fb1f564216918c9730d227", [:mix], [], "hexpm", "6b8b608f895b6ffcfad49c37c7883e8df98ae19c6a28113b02aa1e9c5b22d6b5"}, | |||
"plug_cowboy": {:hex, :plug_cowboy, "2.4.0", "e936ef151751f386804c51f87f7300f5aaae6893cdad726559c3930c6c032948", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e25ddcfc06b1b76e55af79d078b03cbc86bbcb99ce4e5e0a5e4a8114ee039be6"}, | |||
"plug_crypto": {:hex, :plug_crypto, "1.2.0", "1cb20793aa63a6c619dd18bb33d7a3aa94818e5fd39ad357051a67f26dfa2df6", [:mix], [], "hexpm", "a48b538ae8bf381ffac344520755f3007cc10bd8e90b240af98ea29b69683fc2"}, | |||
"plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "79fd4fcf34d110605c26560cbae8f23c603ec4158c08298bd4360fdea90bb5cf"}, | |||
"poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, | |||
"poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, | |||
@@ -100,8 +101,9 @@ | |||
"pot": {:hex, :pot, "0.11.0", "61bad869a94534739dd4614a25a619bc5c47b9970e9a0ea5bef4628036fc7a16", [:rebar3], [], "hexpm", "57ee6ee6bdeb639661ffafb9acefe3c8f966e45394de6a766813bb9e1be4e54b"}, | |||
"prometheus": {:hex, :prometheus, "4.6.0", "20510f381db1ccab818b4cf2fac5fa6ab5cc91bc364a154399901c001465f46f", [:mix, :rebar3], [], "hexpm", "4905fd2992f8038eccd7aa0cd22f40637ed618c0bed1f75c05aacec15b7545de"}, | |||
"prometheus_ecto": {:hex, :prometheus_ecto, "1.4.3", "3dd4da1812b8e0dbee81ea58bb3b62ed7588f2eae0c9e97e434c46807ff82311", [:mix], [{:ecto, "~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "8d66289f77f913b37eda81fd287340c17e61a447549deb28efc254532b2bed82"}, | |||
"prometheus_ex": {:hex, :prometheus_ex, "3.0.5", "fa58cfd983487fc5ead331e9a3e0aa622c67232b3ec71710ced122c4c453a02f", [:mix], [{:prometheus, "~> 4.0", [hex: :prometheus, repo: "hexpm", optional: false]}], "hexpm", "9fd13404a48437e044b288b41f76e64acd9735fb8b0e3809f494811dfa66d0fb"}, | |||
"prometheus_ex": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/prometheus.ex.git", "a4e9beb3c1c479d14b352fd9d6dd7b1f6d7deee5", [ref: "a4e9beb3c1c479d14b352fd9d6dd7b1f6d7deee5"]}, | |||
"prometheus_phoenix": {:hex, :prometheus_phoenix, "1.3.0", "c4b527e0b3a9ef1af26bdcfbfad3998f37795b9185d475ca610fe4388fdd3bb5", [:mix], [{:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.3 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "c4d1404ac4e9d3d963da601db2a7d8ea31194f0017057fabf0cfb9bf5a6c8c75"}, | |||
"prometheus_phx": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/prometheus-phx.git", "9cd8f248c9381ffedc799905050abce194a97514", [branch: "no-logging"]}, | |||
"prometheus_plugs": {:hex, :prometheus_plugs, "1.1.5", "25933d48f8af3a5941dd7b621c889749894d8a1082a6ff7c67cc99dec26377c5", [:mix], [{:accept, "~> 0.1", [hex: :accept, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}, {:prometheus_process_collector, "~> 1.1", [hex: :prometheus_process_collector, repo: "hexpm", optional: true]}], "hexpm", "0273a6483ccb936d79ca19b0ab629aef0dba958697c94782bb728b920dfc6a79"}, | |||
"quack": {:hex, :quack, "0.1.1", "cca7b4da1a233757fdb44b3334fce80c94785b3ad5a602053b7a002b5a8967bf", [:mix], [{:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: false]}, {:tesla, "~> 1.2.0", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm", "d736bfa7444112eb840027bb887832a0e403a4a3437f48028c3b29a2dbbd2543"}, | |||
"ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm", "451d8527787df716d99dc36162fca05934915db0b6141bbdac2ea8d3c7afc7d7"}, | |||
@@ -110,13 +112,13 @@ | |||
"sleeplocks": {:hex, :sleeplocks, "1.1.1", "3d462a0639a6ef36cc75d6038b7393ae537ab394641beb59830a1b8271faeed3", [:rebar3], [], "hexpm", "84ee37aeff4d0d92b290fff986d6a95ac5eedf9b383fadfd1d88e9b84a1c02e1"}, | |||
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.5", "6eaf7ad16cb568bb01753dbbd7a95ff8b91c7979482b95f38443fe2c8852a79b", [:make, :mix, :rebar3], [], "hexpm", "13104d7897e38ed7f044c4de953a6c28597d1c952075eb2e328bc6d6f2bfc496"}, | |||
"sweet_xml": {:hex, :sweet_xml, "0.6.6", "fc3e91ec5dd7c787b6195757fbcf0abc670cee1e4172687b45183032221b66b8", [:mix], [], "hexpm", "2e1ec458f892ffa81f9f8386e3f35a1af6db7a7a37748a64478f13163a1f3573"}, | |||
"swoosh": {:hex, :swoosh, "1.0.0", "c547cfc83f30e12d5d1fdcb623d7de2c2e29a5becfc68bf8f42ba4d23d2c2756", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "b3b08e463f876cb6167f7168e9ad99a069a724e124bcee61847e0e1ed13f4a0d"}, | |||
"swoosh": {:hex, :swoosh, "1.0.6", "6765e334c67dacabe721f0d701c7e5a6f06e4595c90df6f91e73ebd54d555833", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "7c50ef78e4acfd1cbd4907dc1fa87b5540675a6be9dc979d04890f49d7ec1830"}, | |||
"syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"}, | |||
"telemetry": {:hex, :telemetry, "0.4.2", "2808c992455e08d6177322f14d3bdb6b625fbcfd233a73505870d8738a2f4599", [:rebar3], [], "hexpm", "2d1419bd9dda6a206d7b5852179511722e2b18812310d304620c7bd92a13fcef"}, | |||
"tesla": {:git, "https://github.com/teamon/tesla/", "9f7261ca49f9f901ceb73b60219ad6f8a9f6aa30", [ref: "9f7261ca49f9f901ceb73b60219ad6f8a9f6aa30"]}, | |||
"timex": {:hex, :timex, "3.6.2", "845cdeb6119e2fef10751c0b247b6c59d86d78554c83f78db612e3290f819bc2", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5 or ~> 1.0.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "26030b46199d02a590be61c2394b37ea25a3664c02fafbeca0b24c972025d47a"}, | |||
"trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bd4fde4c15f3e993a999e019d64347489b91b7a9096af68b2bdadd192afa693f"}, | |||
"tzdata": {:hex, :tzdata, "1.0.3", "73470ad29dde46e350c60a66e6b360d3b99d2d18b74c4c349dbebbc27a09a3eb", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "a6e1ee7003c4d04ecbd21dd3ec690d4c6662db5d3bbdd7262d53cdf5e7c746c1"}, | |||
"tzdata": {:hex, :tzdata, "1.0.4", "a3baa4709ea8dba552dca165af6ae97c624a2d6ac14bd265165eaa8e8af94af6", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "b02637db3df1fd66dd2d3c4f194a81633d0e4b44308d36c1b2fdfd1e4e6f169b"}, | |||
"ueberauth": {:hex, :ueberauth, "0.6.3", "d42ace28b870e8072cf30e32e385579c57b9cc96ec74fa1f30f30da9c14f3cc0", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "afc293d8a1140d6591b53e3eaf415ca92842cb1d32fad3c450c6f045f7f91b60"}, | |||
"unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm", "1d1848c40487cdb0b30e8ed975e34e025860c02e419cb615d255849f3427439d"}, | |||
"unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"}, | |||
@@ -3,8 +3,8 @@ msgstr "" | |||
"Project-Id-Version: PACKAGE VERSION\n" | |||
"Report-Msgid-Bugs-To: \n" | |||
"POT-Creation-Date: 2020-09-20 13:18+0000\n" | |||
"PO-Revision-Date: 2020-09-20 14:48+0000\n" | |||
"Last-Translator: Kana <gudzpoz@live.com>\n" | |||
"PO-Revision-Date: 2020-10-22 18:25+0000\n" | |||
"Last-Translator: shironeko <shironeko@tesaguri.club>\n" | |||
"Language-Team: Chinese (Simplified) <https://translate.pleroma.social/" | |||
"projects/pleroma/pleroma/zh_Hans/>\n" | |||
"Language: zh_Hans\n" | |||
@@ -49,7 +49,7 @@ msgstr "是被保留的" | |||
## From Ecto.Changeset.validate_confirmation/3 | |||
msgid "does not match confirmation" | |||
msgstr "" | |||
msgstr "与验证不符" | |||
## From Ecto.Changeset.no_assoc_constraint/3 | |||
msgid "is still associated with this entry" | |||
@@ -138,12 +138,12 @@ msgstr "不能获取收藏" | |||
#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:438 | |||
#, elixir-format | |||
msgid "Can't like object" | |||
msgstr "" | |||
msgstr "不能喜欢对象" | |||
#: lib/pleroma/web/common_api/utils.ex:563 | |||
#, elixir-format | |||
msgid "Cannot post an empty status without attachments" | |||
msgstr "" | |||
msgstr "无法发送空白且不包含附件的状态" | |||
#: lib/pleroma/web/common_api/utils.ex:511 | |||
#, elixir-format | |||
@@ -153,100 +153,100 @@ msgstr "" | |||
#: lib/pleroma/config/config_db.ex:191 | |||
#, elixir-format | |||
msgid "Config with params %{params} not found" | |||
msgstr "" | |||
msgstr "无法找到包含参数 %{params} 的配置" | |||
#: lib/pleroma/web/common_api/common_api.ex:181 | |||
#: lib/pleroma/web/common_api/common_api.ex:185 | |||
#, elixir-format | |||
msgid "Could not delete" | |||
msgstr "" | |||
msgstr "无法删除" | |||
#: lib/pleroma/web/common_api/common_api.ex:231 | |||
#, elixir-format | |||
msgid "Could not favorite" | |||
msgstr "" | |||
msgstr "无法收藏" | |||
#: lib/pleroma/web/common_api/common_api.ex:453 | |||
#, elixir-format | |||
msgid "Could not pin" | |||
msgstr "" | |||
msgstr "无法置顶" | |||
#: lib/pleroma/web/common_api/common_api.ex:278 | |||
#, elixir-format | |||
msgid "Could not unfavorite" | |||
msgstr "" | |||
msgstr "无法取消收藏" | |||
#: lib/pleroma/web/common_api/common_api.ex:463 | |||
#, elixir-format | |||
msgid "Could not unpin" | |||
msgstr "" | |||
msgstr "无法取消置顶" | |||
#: lib/pleroma/web/common_api/common_api.ex:216 | |||
#, elixir-format | |||
msgid "Could not unrepeat" | |||
msgstr "" | |||
msgstr "无法取消转发" | |||
#: lib/pleroma/web/common_api/common_api.ex:512 | |||
#: lib/pleroma/web/common_api/common_api.ex:521 | |||
#, elixir-format | |||
msgid "Could not update state" | |||
msgstr "" | |||
msgstr "无法更新状态" | |||
#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:207 | |||
#, elixir-format | |||
msgid "Error." | |||
msgstr "" | |||
msgstr "错误。" | |||
#: lib/pleroma/web/twitter_api/twitter_api.ex:106 | |||
#, elixir-format | |||
msgid "Invalid CAPTCHA" | |||
msgstr "" | |||
msgstr "无效的验证码" | |||
#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:116 | |||
#: lib/pleroma/web/oauth/oauth_controller.ex:568 | |||
#, elixir-format | |||
msgid "Invalid credentials" | |||
msgstr "" | |||
msgstr "无效的凭据" | |||
#: lib/pleroma/plugs/ensure_authenticated_plug.ex:38 | |||
#, elixir-format | |||
msgid "Invalid credentials." | |||
msgstr "" | |||
msgstr "无效的凭据。" | |||
#: lib/pleroma/web/common_api/common_api.ex:355 | |||
#, elixir-format | |||
msgid "Invalid indices" | |||
msgstr "" | |||
msgstr "无效的索引" | |||
#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:29 | |||
#, elixir-format | |||
msgid "Invalid parameters" | |||
msgstr "" | |||
msgstr "无效的参数" | |||
#: lib/pleroma/web/common_api/utils.ex:414 | |||
#, elixir-format | |||
msgid "Invalid password." | |||
msgstr "" | |||
msgstr "无效的密码。" | |||
#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:220 | |||
#, elixir-format | |||
msgid "Invalid request" | |||
msgstr "" | |||
msgstr "无效的请求" | |||
#: lib/pleroma/web/twitter_api/twitter_api.ex:109 | |||
#, elixir-format | |||
msgid "Kocaptcha service unavailable" | |||
msgstr "" | |||
msgstr "Kocaptcha 服务不可用" | |||
#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:112 | |||
#, elixir-format | |||
msgid "Missing parameters" | |||
msgstr "" | |||
msgstr "缺少参数" | |||
#: lib/pleroma/web/common_api/utils.ex:547 | |||
#, elixir-format | |||
msgid "No such conversation" | |||
msgstr "" | |||
msgstr "没有该对话" | |||
#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:388 | |||
#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:414 lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:456 | |||
@@ -0,0 +1,68 @@ | |||
{ | |||
"@context": [ | |||
"https://www.w3.org/ns/activitystreams", | |||
"https://w3id.org/security/v1", | |||
{ | |||
"Emoji": "toot:Emoji", | |||
"Hashtag": "as:Hashtag", | |||
"atomUri": "ostatus:atomUri", | |||
"conversation": "ostatus:conversation", | |||
"inReplyToAtomUri": "ostatus:inReplyToAtomUri", | |||
"manuallyApprovesFollowers": "as:manuallyApprovesFollowers", | |||
"movedTo": "as:movedTo", | |||
"ostatus": "http://ostatus.org#", | |||
"toot": "http://joinmastodon.org/ns#" | |||
} | |||
], | |||
"actor": "http://mastodon.example.org/users/admin", | |||
"cc": [ | |||
"http://mastodon.example.org/users/admin/followers", | |||
"http://localtesting.pleroma.lol/users/lain" | |||
], | |||
"id": "http://mastodon.example.org/users/admin/statuses/99512778738411822/activity", | |||
"nickname": "lain", | |||
"object": { | |||
"atomUri": "http://mastodon.example.org/users/admin/statuses/99512778738411822", | |||
"attachment": [], | |||
"attributedTo": "http://mastodon.example.org/users/admin", | |||
"cc": [ | |||
"http://mastodon.example.org/users/admin/followers", | |||
"http://localtesting.pleroma.lol/users/lain" | |||
], | |||
"content": "<p><span class=\"h-card\"><a href=\"http://localtesting.pleroma.lol/users/lain\" class=\"u-url mention\">@<span>lain</span></a></span> #moo</p>", | |||
"conversation": "tag:mastodon.example.org,2018-02-12:objectId=20:objectType=Conversation", | |||
"id": "http://mastodon.example.org/users/admin/statuses/99512778738411822", | |||
"inReplyTo": null, | |||
"inReplyToAtomUri": null, | |||
"published": "2018-02-12T14:08:20Z", | |||
"summary": "cw", | |||
"tag": [ | |||
{ | |||
"href": "http://localtesting.pleroma.lol/users/lain", | |||
"name": "@lain@localtesting.pleroma.lol", | |||
"type": "Mention" | |||
}, | |||
{ | |||
"href": "http://mastodon.example.org/tags/nsfw", | |||
"name": "#NSFW", | |||
"type": "Hashtag" | |||
} | |||
], | |||
"to": [ | |||
"https://www.w3.org/ns/activitystreams#Public" | |||
], | |||
"type": "Note", | |||
"url": "http://mastodon.example.org/@admin/99512778738411822" | |||
}, | |||
"published": "2018-02-12T14:08:20Z", | |||
"signature": { | |||
"created": "2018-02-12T14:08:20Z", | |||
"creator": "http://mastodon.example.org/users/admin#main-key", | |||
"signatureValue": "rnNfcopkc6+Ju73P806popcfwrK9wGYHaJVG1/ZvrlEbWVDzaHjkXqj9Q3/xju5l8CSn9tvSgCCtPFqZsFQwn/pFIFUcw7ZWB2xi4bDm3NZ3S4XQ8JRaaX7og5hFxAhWkGhJhAkfxVnOg2hG+w2d/7d7vRVSC1vo5ip4erUaA/PkWusZvPIpxnRWoXaxJsFmVx0gJgjpJkYDyjaXUlp+jmaoseeZ4EPQUWqHLKJ59PRG0mg8j2xAjYH9nQaN14qMRmTGPxY8gfv/CUFcatA+8VJU9KEsJkDAwLVvglydNTLGrxpAJU78a2eaht0foV43XUIZGe3DKiJPgE+UOKGCJw==", | |||
"type": "RsaSignature2017" | |||
}, | |||
"to": [ | |||
"https://www.w3.org/ns/activitystreams#Public" | |||
], | |||
"type": "Create" | |||
} |
@@ -400,7 +400,7 @@ defmodule Pleroma.NotificationTest do | |||
user = insert(:user, is_locked: true) | |||
follower = insert(:user) | |||
{:ok, _, _, _follow_activity} = CommonAPI.follow(follower, user) | |||
assert [notification] = Notification.for_user(user) | |||
assert [_notification] = Notification.for_user(user) | |||
{:ok, _follower} = CommonAPI.reject_follow_request(follower, user) | |||
assert [] = Notification.for_user(user) | |||
end | |||
@@ -505,22 +505,22 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do | |||
# public | |||
{:ok, _} = CommonAPI.post(user2, Map.put(reply_data, :visibility, "public")) | |||
assert %{data: data, object: object} = Activity.get_by_ap_id_with_object(ap_id) | |||
assert %{data: _data, object: object} = Activity.get_by_ap_id_with_object(ap_id) | |||
assert object.data["repliesCount"] == 1 | |||
# unlisted | |||
{:ok, _} = CommonAPI.post(user2, Map.put(reply_data, :visibility, "unlisted")) | |||
assert %{data: data, object: object} = Activity.get_by_ap_id_with_object(ap_id) | |||
assert %{data: _data, object: object} = Activity.get_by_ap_id_with_object(ap_id) | |||
assert object.data["repliesCount"] == 2 | |||
# private | |||
{:ok, _} = CommonAPI.post(user2, Map.put(reply_data, :visibility, "private")) | |||
assert %{data: data, object: object} = Activity.get_by_ap_id_with_object(ap_id) | |||
assert %{data: _data, object: object} = Activity.get_by_ap_id_with_object(ap_id) | |||
assert object.data["repliesCount"] == 2 | |||
# direct | |||
{:ok, _} = CommonAPI.post(user2, Map.put(reply_data, :visibility, "direct")) | |||
assert %{data: data, object: object} = Activity.get_by_ap_id_with_object(ap_id) | |||
assert %{data: _data, object: object} = Activity.get_by_ap_id_with_object(ap_id) | |||
assert object.data["repliesCount"] == 2 | |||
end | |||
end | |||
@@ -752,6 +752,22 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do | |||
refute repeat_activity in activities | |||
end | |||
test "returns your own posts regardless of mute" do | |||
user = insert(:user) | |||
muted = insert(:user) | |||
{:ok, muted_post} = CommonAPI.post(muted, %{status: "Im stupid"}) | |||
{:ok, reply} = | |||
CommonAPI.post(user, %{status: "I'm muting you", in_reply_to_status_id: muted_post.id}) | |||
{:ok, _} = User.mute(user, muted) | |||
[activity] = ActivityPub.fetch_activities([], %{muting_user: user, skip_preload: true}) | |||
assert activity.id == reply.id | |||
end | |||
test "doesn't return muted activities" do | |||
activity_one = insert(:note_activity) | |||
activity_two = insert(:note_activity) | |||
@@ -21,7 +21,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublicTest do | |||
"type" => "Create" | |||
} | |||
assert {:ok, message} = RejectNonPublic.filter(message) | |||
assert {:ok, _message} = RejectNonPublic.filter(message) | |||
end | |||
test "it's allowed when cc address contain public address" do | |||
@@ -34,7 +34,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublicTest do | |||
"type" => "Create" | |||
} | |||
assert {:ok, message} = RejectNonPublic.filter(message) | |||
assert {:ok, _message} = RejectNonPublic.filter(message) | |||
end | |||
end | |||
@@ -50,7 +50,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublicTest do | |||
} | |||
Pleroma.Config.put([:mrf_rejectnonpublic, :allow_followersonly], true) | |||
assert {:ok, message} = RejectNonPublic.filter(message) | |||
assert {:ok, _message} = RejectNonPublic.filter(message) | |||
end | |||
test "it's rejected when addrer of message in the follower addresses of user and it disabled in config" do | |||
@@ -80,7 +80,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublicTest do | |||
} | |||
Pleroma.Config.put([:mrf_rejectnonpublic, :allow_direct], true) | |||
assert {:ok, message} = RejectNonPublic.filter(message) | |||
assert {:ok, _message} = RejectNonPublic.filter(message) | |||
end | |||
test "it's reject when direct messages aren't allow" do | |||
@@ -29,7 +29,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicyTest do | |||
actor = insert(:user, tags: ["mrf_tag:disable-remote-subscription"]) | |||
follower = insert(:user, tags: ["mrf_tag:disable-remote-subscription"], local: true) | |||
message = %{"object" => actor.ap_id, "type" => "Follow", "actor" => follower.ap_id} | |||
assert {:ok, message} = TagPolicy.filter(message) | |||
assert {:ok, _message} = TagPolicy.filter(message) | |||
end | |||
end | |||
@@ -144,7 +144,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.AnnounceHandlingTest do | |||
_user = insert(:user, local: false, ap_id: data["actor"]) | |||
assert {:error, e} = Transmogrifier.handle_incoming(data) | |||
assert {:error, _e} = Transmogrifier.handle_incoming(data) | |||
end | |||
test "it does not clobber the addressing on announce activities" do | |||
@@ -101,7 +101,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do | |||
{:ok, returned_activity} = Transmogrifier.handle_incoming(data) | |||
returned_object = Object.normalize(returned_activity, false) | |||
assert activity = | |||
assert %Activity{} = | |||
Activity.get_create_by_object_ap_id( | |||
"https://mstdn.io/users/mayuutann/statuses/99568293732299394" | |||
) | |||
@@ -206,6 +206,16 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do | |||
assert user.note_count == 1 | |||
end | |||
test "it works for incoming notices without the sensitive property but an nsfw hashtag" do | |||
data = File.read!("test/fixtures/mastodon-post-activity-nsfw.json") |> Poison.decode!() | |||
{:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) | |||
object_data = Object.normalize(data["object"], false).data | |||
assert object_data["sensitive"] == true | |||
end | |||
test "it works for incoming notices with hashtags" do | |||
data = File.read!("test/fixtures/mastodon-post-activity-hashtag.json") |> Poison.decode!() | |||
@@ -95,6 +95,20 @@ defmodule Pleroma.Web.CommonAPITest do | |||
describe "posting chat messages" do | |||
setup do: clear_config([:instance, :chat_limit]) | |||
test "it posts a self-chat" do | |||
author = insert(:user) | |||
recipient = author | |||
{:ok, activity} = | |||
CommonAPI.post_chat_message( | |||
author, | |||
recipient, | |||
"remember to buy milk when milk truk arive" | |||
) | |||
assert activity.data["type"] == "Create" | |||
end | |||
test "it posts a chat message without content but with an attachment" do | |||
author = insert(:user) | |||
recipient = insert(:user) | |||
@@ -622,7 +636,7 @@ defmodule Pleroma.Web.CommonAPITest do | |||
assert {:error, "The status is over the character limit"} = | |||
CommonAPI.post(user, %{status: "foobar"}) | |||
assert {:ok, activity} = CommonAPI.post(user, %{status: "12345"}) | |||
assert {:ok, _activity} = CommonAPI.post(user, %{status: "12345"}) | |||
end | |||
test "it can handle activities that expire" do | |||
@@ -52,7 +52,7 @@ defmodule Pleroma.Web.FedSockets.FedRegistryTest do | |||
end | |||
test "will be ignored" do | |||
assert {:ok, %SocketInfo{origin: origin, pid: pid_one}} = | |||
assert {:ok, %SocketInfo{origin: origin, pid: _pid_one}} = | |||
FedRegistry.get_fed_socket(@good_domain_origin) | |||
assert origin == "good.domain:80" | |||
@@ -63,7 +63,7 @@ defmodule Pleroma.Web.FedSockets.FedRegistryTest do | |||
test "the newer process will be closed" do | |||
pid_two = build_test_socket(@good_domain) | |||
assert {:ok, %SocketInfo{origin: origin, pid: pid_one}} = | |||
assert {:ok, %SocketInfo{origin: origin, pid: _pid_one}} = | |||
FedRegistry.get_fed_socket(@good_domain_origin) | |||
assert origin == "good.domain:80" | |||
@@ -32,7 +32,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do | |||
test "works by nickname" do | |||
user = insert(:user) | |||
assert %{"id" => user_id} = | |||
assert %{"id" => _user_id} = | |||
build_conn() | |||
|> get("/api/v1/accounts/#{user.nickname}") | |||
|> json_response_and_validate_schema(200) | |||
@@ -43,7 +43,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do | |||
user = insert(:user, nickname: "user@example.com", local: false) | |||
assert %{"id" => user_id} = | |||
assert %{"id" => _user_id} = | |||
build_conn() | |||
|> get("/api/v1/accounts/#{user.nickname}") | |||
|> json_response_and_validate_schema(200) | |||
@@ -1429,10 +1429,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do | |||
test "returns lists to which the account belongs" do | |||
%{user: user, conn: conn} = oauth_access(["read:lists"]) | |||
other_user = insert(:user) | |||
assert {:ok, %Pleroma.List{id: list_id} = list} = Pleroma.List.create("Test List", user) | |||
assert {:ok, %Pleroma.List{id: _list_id} = list} = Pleroma.List.create("Test List", user) | |||
{:ok, %{following: _following}} = Pleroma.List.follow(list, other_user) | |||
assert [%{"id" => list_id, "title" => "Test List"}] = | |||
assert [%{"id" => _list_id, "title" => "Test List"}] = | |||
conn | |||
|> get("/api/v1/accounts/#{other_user.id}/lists") | |||
|> json_response_and_validate_schema(200) | |||
@@ -937,7 +937,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do | |||
|> get("/api/v1/statuses/#{reblog_activity1.id}") | |||
assert %{ | |||
"reblog" => %{"id" => id, "reblogged" => false, "reblogs_count" => 2}, | |||
"reblog" => %{"id" => _id, "reblogged" => false, "reblogs_count" => 2}, | |||
"reblogged" => false, | |||
"favourited" => false, | |||
"bookmarked" => false | |||
@@ -77,7 +77,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do | |||
} | |||
) | |||
assert response = html_response(conn, 302) | |||
assert html_response(conn, 302) | |||
redirect_query = URI.parse(redirected_to(conn)).query | |||
assert %{"state" => state_param} = URI.decode_query(redirect_query) | |||
@@ -119,7 +119,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do | |||
} | |||
) | |||
assert response = html_response(conn, 302) | |||
assert html_response(conn, 302) | |||
assert redirected_to(conn) =~ ~r/#{redirect_uri}\?code=.+/ | |||
end | |||
@@ -182,7 +182,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do | |||
} | |||
) | |||
assert response = html_response(conn, 302) | |||
assert html_response(conn, 302) | |||
assert redirected_to(conn) == app.redirect_uris | |||
assert get_flash(conn, :error) == "Failed to authenticate: (error description)." | |||
end | |||
@@ -238,7 +238,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do | |||
} | |||
) | |||
assert response = html_response(conn, 302) | |||
assert html_response(conn, 302) | |||
assert redirected_to(conn) =~ ~r/#{redirect_uri}\?code=.+/ | |||
end | |||
@@ -268,7 +268,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do | |||
} | |||
) | |||
assert response = html_response(conn, 401) | |||
assert html_response(conn, 401) | |||
end | |||
test "with invalid params, POST /oauth/register?op=register renders registration_details page", | |||
@@ -336,7 +336,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do | |||
} | |||
) | |||
assert response = html_response(conn, 302) | |||
assert html_response(conn, 302) | |||
assert redirected_to(conn) =~ ~r/#{redirect_uri}\?code=.+/ | |||
end | |||
@@ -367,7 +367,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do | |||
} | |||
) | |||
assert response = html_response(conn, 401) | |||
assert html_response(conn, 401) | |||
end | |||
test "with invalid params, POST /oauth/register?op=connect renders registration_details page", | |||
@@ -569,7 +569,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do | |||
test "for pack name with special chars", %{conn: conn} do | |||
assert %{ | |||
"files" => files, | |||
"files" => _files, | |||
"files_count" => 1, | |||
"pack" => %{ | |||
"can-download" => true, | |||
@@ -34,7 +34,7 @@ defmodule Pleroma.Web.PleromaAPI.MascotControllerTest do | |||
|> put_req_header("content-type", "multipart/form-data") | |||
|> put("/api/v1/pleroma/mascot", %{"file" => file}) | |||
assert %{"id" => _, "type" => image} = json_response_and_validate_schema(conn, 200) | |||
assert %{"id" => _, "type" => _image} = json_response_and_validate_schema(conn, 200) | |||
end | |||
test "mascot retrieving" do | |||
@@ -22,7 +22,7 @@ defmodule Pleroma.Web.ChannelCase do | |||
using do | |||
quote do | |||
# Import conveniences for testing with channels | |||
use Phoenix.ChannelTest | |||
import Phoenix.ChannelTest | |||
use Pleroma.Tests.Helpers | |||
# The default endpoint for testing | |||
@@ -22,7 +22,8 @@ defmodule Pleroma.Web.ConnCase do | |||
using do | |||
quote do | |||
# Import conveniences for testing with connections | |||
use Phoenix.ConnTest | |||
import Plug.Conn | |||
import Phoenix.ConnTest | |||
use Pleroma.Tests.Helpers | |||
import Pleroma.Web.Router.Helpers | |||