diff options
| author | Egor Kislitsyn <egor@kislitsyn.com> | 2020-06-12 18:25:29 +0400 | 
|---|---|---|
| committer | Egor Kislitsyn <egor@kislitsyn.com> | 2020-06-12 18:25:29 +0400 | 
| commit | 697cf920249b4f67bcc49aa923374d5fdc20809b (patch) | |
| tree | ee8630240ae99d32279c6a66aea0a51e2b3f406c /lib | |
| parent | 2419776e192316cefbdbe607306c9b92ec558319 (diff) | |
| parent | e557265a037caa0fd4ab35c811d19ad07a5f53fa (diff) | |
| download | pleroma-697cf920249b4f67bcc49aa923374d5fdc20809b.tar.gz pleroma-697cf920249b4f67bcc49aa923374d5fdc20809b.zip | |
Merge remote-tracking branch 'origin/develop' into merge-ogp-twitter-parsers
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/mix/tasks/pleroma/emoji.ex | 6 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/user.ex | 12 | ||||
| -rw-r--r-- | lib/pleroma/plugs/http_security_plug.ex | 5 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/activity_pub.ex | 15 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/mrf.ex | 7 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex | 43 | ||||
| -rw-r--r-- | lib/pleroma/web/common_api/activity_draft.ex | 9 | ||||
| -rw-r--r-- | lib/pleroma/web/common_api/common_api.ex | 12 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/controllers/search_controller.ex | 15 | 
9 files changed, 105 insertions, 19 deletions
| diff --git a/lib/mix/tasks/pleroma/emoji.ex b/lib/mix/tasks/pleroma/emoji.ex index 29a5fa99c..f4eaeac98 100644 --- a/lib/mix/tasks/pleroma/emoji.ex +++ b/lib/mix/tasks/pleroma/emoji.ex @@ -237,6 +237,12 @@ defmodule Mix.Tasks.Pleroma.Emoji do      end    end +  def run(["reload"]) do +    start_pleroma() +    Pleroma.Emoji.reload() +    IO.puts("Emoji packs have been reloaded.") +  end +    defp fetch_and_decode(from) do      with {:ok, json} <- fetch(from) do        Jason.decode!(json) diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index 3635c02bc..bca7e87bf 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -144,6 +144,18 @@ defmodule Mix.Tasks.Pleroma.User do      end    end +  def run(["reset_mfa", nickname]) do +    start_pleroma() + +    with %User{local: true} = user <- User.get_cached_by_nickname(nickname), +         {:ok, _token} <- Pleroma.MFA.disable(user) do +      shell_info("Multi-Factor Authentication disabled for #{user.nickname}") +    else +      _ -> +        shell_error("No local user #{nickname}") +    end +  end +    def run(["deactivate", nickname]) do      start_pleroma() diff --git a/lib/pleroma/plugs/http_security_plug.ex b/lib/pleroma/plugs/http_security_plug.ex index 6a339b32c..1420a9611 100644 --- a/lib/pleroma/plugs/http_security_plug.ex +++ b/lib/pleroma/plugs/http_security_plug.ex @@ -113,6 +113,10 @@ defmodule Pleroma.Plugs.HTTPSecurityPlug do          add_source(acc, host)        end) +    media_proxy_base_url = +      if Config.get([:media_proxy, :base_url]), +        do: URI.parse(Config.get([:media_proxy, :base_url])).host +      upload_base_url =        if Config.get([Pleroma.Upload, :base_url]),          do: URI.parse(Config.get([Pleroma.Upload, :base_url])).host @@ -122,6 +126,7 @@ defmodule Pleroma.Plugs.HTTPSecurityPlug do          do: URI.parse(Config.get([Pleroma.Uploaders.S3, :public_endpoint])).host      [] +    |> add_source(media_proxy_base_url)      |> add_source(upload_base_url)      |> add_source(s3_endpoint)      |> add_source(media_proxy_whitelist) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index aeec4beae..a5f8ba40a 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -5,6 +5,7 @@  defmodule Pleroma.Web.ActivityPub.ActivityPub do    alias Pleroma.Activity    alias Pleroma.Activity.Ir.Topics +  alias Pleroma.ActivityExpiration    alias Pleroma.Config    alias Pleroma.Constants    alias Pleroma.Conversation @@ -146,12 +147,14 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do           {:containment, :ok} <- {:containment, Containment.contain_child(map)},           {:ok, map, object} <- insert_full_object(map) do        {:ok, activity} = -        Repo.insert(%Activity{ +        %Activity{            data: map,            local: local,            actor: map["actor"],            recipients: recipients -        }) +        } +        |> Repo.insert() +        |> maybe_create_activity_expiration()        # Splice in the child object if we have one.        activity = Maps.put_if_present(activity, :object, object) @@ -189,6 +192,14 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do      stream_out_participations(participations)    end +  defp maybe_create_activity_expiration({:ok, %{data: %{"expires_at" => expires_at}} = activity}) do +    with {:ok, _} <- ActivityExpiration.create(activity, expires_at) do +      {:ok, activity} +    end +  end + +  defp maybe_create_activity_expiration(result), do: result +    defp create_or_bump_conversation(activity, actor) do      with {:ok, conversation} <- Conversation.create_or_bump_for(activity),           %User{} = user <- User.get_cached_by_ap_id(actor) do diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index a0b3af432..5a4a76085 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -8,11 +8,8 @@ defmodule Pleroma.Web.ActivityPub.MRF do    def filter(policies, %{} = object) do      policies      |> Enum.reduce({:ok, object}, fn -      policy, {:ok, object} -> -        policy.filter(object) - -      _, error -> -        error +      policy, {:ok, object} -> policy.filter(object) +      _, error -> error      end)    end diff --git a/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex b/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex new file mode 100644 index 000000000..8e47f1e02 --- /dev/null +++ b/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex @@ -0,0 +1,43 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy do +  @moduledoc "Adds expiration to all local Create activities" +  @behaviour Pleroma.Web.ActivityPub.MRF + +  @impl true +  def filter(activity) do +    activity = +      if note?(activity) and local?(activity) do +        maybe_add_expiration(activity) +      else +        activity +      end + +    {:ok, activity} +  end + +  @impl true +  def describe, do: {:ok, %{}} + +  defp local?(%{"id" => id}) do +    String.starts_with?(id, Pleroma.Web.Endpoint.url()) +  end + +  defp note?(activity) do +    match?(%{"type" => "Create", "object" => %{"type" => "Note"}}, activity) +  end + +  defp maybe_add_expiration(activity) do +    days = Pleroma.Config.get([:mrf_activity_expiration, :days], 365) +    expires_at = NaiveDateTime.utc_now() |> Timex.shift(days: days) + +    with %{"expires_at" => existing_expires_at} <- activity, +         :lt <- NaiveDateTime.compare(existing_expires_at, expires_at) do +      activity +    else +      _ -> Map.put(activity, "expires_at", expires_at) +    end +  end +end diff --git a/lib/pleroma/web/common_api/activity_draft.ex b/lib/pleroma/web/common_api/activity_draft.ex index 3f1a50b96..9bcb9f587 100644 --- a/lib/pleroma/web/common_api/activity_draft.ex +++ b/lib/pleroma/web/common_api/activity_draft.ex @@ -197,6 +197,13 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do    defp changes(draft) do      direct? = draft.visibility == "direct" +    additional = %{"cc" => draft.cc, "directMessage" => direct?} + +    additional = +      case draft.expires_at do +        %NaiveDateTime{} = expires_at -> Map.put(additional, "expires_at", expires_at) +        _ -> additional +      end      changes =        %{ @@ -204,7 +211,7 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do          actor: draft.user,          context: draft.context,          object: draft.object, -        additional: %{"cc" => draft.cc, "directMessage" => direct?} +        additional: additional        }        |> Utils.maybe_add_list_data(draft.user, draft.visibility) diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 5a194910d..04e081a8e 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -423,20 +423,10 @@ defmodule Pleroma.Web.CommonAPI do    def post(user, %{status: _} = data) do      with {:ok, draft} <- Pleroma.Web.CommonAPI.ActivityDraft.create(user, data) do -      draft.changes -      |> ActivityPub.create(draft.preview?) -      |> maybe_create_activity_expiration(draft.expires_at) +      ActivityPub.create(draft.changes, draft.preview?)      end    end -  defp maybe_create_activity_expiration({:ok, activity}, %NaiveDateTime{} = expires_at) do -    with {:ok, _} <- ActivityExpiration.create(activity, expires_at) do -      {:ok, activity} -    end -  end - -  defp maybe_create_activity_expiration(result, _), do: result -    def pin(id, %{ap_id: user_ap_id} = user) do      with %Activity{             actor: ^user_ap_id, diff --git a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex index 8840fc19c..3be0ca095 100644 --- a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex @@ -124,6 +124,7 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do    defp prepare_tags(query, add_joined_tag \\ true) do      tags =        query +      |> preprocess_uri_query()        |> String.split(~r/[^#\w]+/u, trim: true)        |> Enum.uniq_by(&String.downcase/1) @@ -147,6 +148,20 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do      end    end +  # If `query` is a URI, returns last component of its path, otherwise returns `query` +  defp preprocess_uri_query(query) do +    if query =~ ~r/https?:\/\// do +      query +      |> String.trim_trailing("/") +      |> URI.parse() +      |> Map.get(:path) +      |> String.split("/") +      |> Enum.at(-1) +    else +      query +    end +  end +    defp joined_tag(tags) do      tags      |> Enum.map(fn tag -> String.capitalize(tag) end) | 
