Merge branch 'mastoapi-non-html-strings' into 'develop'
authorfeld <feld@feld.me>
Thu, 6 Feb 2020 16:08:23 +0000 (16:08 +0000)
committerfeld <feld@feld.me>
Thu, 6 Feb 2020 16:08:23 +0000 (16:08 +0000)
mastodon API: do not sanitize html in non-html fields

See merge request pleroma/pleroma!2167

1  2 
CHANGELOG.md
lib/pleroma/web/mastodon_api/views/status_view.ex

diff --combined CHANGELOG.md
index 1b6ba53d47ffcf10eb99f39c1b58b74c17727b3a,917e5d4ef26baf0e9427fc38de303013a36a97b3..b470b74ed12b11f37d9c5d3c73203a896d2eeace
@@@ -9,15 -9,11 +9,15 @@@ The format is based on [Keep a Changelo
  - **Breaking**: OStatus protocol support
  - **Breaking**: MDII uploader
  - **Breaking**: Using third party engines for user recommendation
 +<details>
 +  <summary>API Changes</summary>
 +- **Breaking**: AdminAPI: migrate_from_db endpoint
 +</details>
  
  ### Changed
  - **Breaking:** Pleroma won't start if it detects unapplied migrations
 -- **Breaking:** attachments are removed along with statuses. Does not affect duplicate files and attachments without status.
  - **Breaking:** Elixir >=1.8 is now required (was >= 1.7)
 +- **Breaking:** `Pleroma.Plugs.RemoteIp` and `:rate_limiter` enabled by default. Please ensure your reverse proxy forwards the real IP!
  - **Breaking:** attachment links (`config :pleroma, :instance, no_attachment_links` and `config :pleroma, Pleroma.Upload, link_name`) disabled by default
  - **Breaking:** OAuth: defaulted `[:auth, :enforce_oauth_admin_scope_usage]` setting to `true` which demands `admin` OAuth scope to perform admin actions (in addition to `is_admin` flag on User); make sure to use bundled or newer versions of AdminFE & PleromaFE to access admin / moderator features.
  - **Breaking:** Dynamic configuration has been rearchitected. The `:pleroma, :instance, dynamic_configuration` setting has been replaced with `config :pleroma, configurable_from_database`. Please backup your configuration to a file and run the migration task to ensure consistency with the new schema.
@@@ -31,7 -27,6 +31,7 @@@
  - Deprecated `User.Info` embedded schema (fields moved to `User`)
  - Store status data inside Flag activity
  - Deprecated (reorganized as `UserRelationship` entity) User fields with user AP IDs (`blocks`, `mutes`, `muted_reblogs`, `muted_notifications`, `subscribers`).
 +- Rate limiter is now disabled for localhost/socket (unless remoteip plug is enabled)
  - Logger: default log level changed from `warn` to `info`.
  - Config mix task `migrate_to_db` truncates `config` table before migrating the config file.
  <details>
@@@ -42,6 -37,7 +42,7 @@@
  - **Breaking:** Admin API: `PUT /api/pleroma/admin/reports/:id` is now `PATCH /api/pleroma/admin/reports`, see admin_api.md for details
  - **Breaking:** `/api/pleroma/admin/users/invite_token` now uses `POST`, changed accepted params and returns full invite in json instead of only token string.
  - **Breaking** replying to reports is now "report notes", enpoint changed from `POST /api/pleroma/admin/reports/:id/respond` to `POST /api/pleroma/admin/reports/:id/notes`
+ - Mastodon API: stopped sanitizing display names, field names and subject fields since they are supposed to be treated as plaintext
  - Admin API: Return `total` when querying for reports
  - Mastodon API: Return `pleroma.direct_conversation_id` when creating a direct message (`POST /api/v1/statuses`)
  - Admin API: Return link alongside with token on password reset
@@@ -57,7 -53,6 +58,7 @@@
  
  ### Added
  - `:chat_limit` option to limit chat characters.
 +- `cleanup_attachments` option to remove attachments along with statuses. Does not affect duplicate files and attachments without status. Enabling this will increase load to database when deleting statuses on larger instances.
  - Refreshing poll results for remote polls
  - Authentication: Added rate limit for password-authorized actions / login existence checks
  - Static Frontend: Add the ability to render user profiles and notices server-side without requiring JS app.
  - Mastodon API: Change emoji reaction reply format once more
  - Configuration: `feed.logo` option for tag feed.
  - Tag feed: `/tags/:tag.rss` - list public statuses by hashtag.
 +- Mastodon API: Add `reacted` property to `emoji_reactions`
  </details>
  
  ### Fixed
index 5df29d93f8fff6ac2effef14055d7027851c5e41,721e9f5660cb3299116f989f54645d5416b8f27f..6cb158bbfedaec737e1ede58975a053dd4b116fb
@@@ -216,21 -216,6 +216,6 @@@ defmodule Pleroma.Web.MastodonAPI.Statu
  
      summary = object.data["summary"] || ""
  
-     summary_html =
-       summary
-       |> HTML.get_cached_scrubbed_html_for_activity(
-         User.html_filter_policy(opts[:for]),
-         activity,
-         "mastoapi:summary"
-       )
-     summary_plaintext =
-       summary
-       |> HTML.get_cached_stripped_html_for_activity(
-         activity,
-         "mastoapi:summary"
-       )
      card = render("card.json", Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity))
  
      url =
      emoji_reactions =
        with %{data: %{"reactions" => emoji_reactions}} <- object do
          Enum.map(emoji_reactions, fn [emoji, users] ->
 -          %{emoji: emoji, count: length(users)}
 +          %{
 +            emoji: emoji,
 +            count: length(users),
 +            reacted: !!(opts[:for] && opts[:for].ap_id in users)
 +          }
          end)
        else
          _ -> []
        muted: thread_muted? || User.mutes?(opts[:for], user),
        pinned: pinned?(activity, user),
        sensitive: sensitive,
-       spoiler_text: summary_html,
+       spoiler_text: summary,
        visibility: get_visibility(object),
        media_attachments: attachments,
        poll: render(PollView, "show.json", object: object, for: opts[:for]),
          conversation_id: get_context_id(activity),
          in_reply_to_account_acct: reply_to_user && reply_to_user.nickname,
          content: %{"text/plain" => content_plaintext},
-         spoiler_text: %{"text/plain" => summary_plaintext},
+         spoiler_text: %{"text/plain" => summary},
          expires_at: expires_at,
          direct_conversation_id: direct_conversation_id,
          thread_muted: thread_muted?,