diff options
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | docs/installation/nixos_en.md | 15 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/mrf/simple_policy.ex | 9 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/mrf/tag_policy.ex | 10 | ||||
| -rw-r--r-- | test/pleroma/web/activity_pub/mrf/simple_policy_test.exs | 22 | ||||
| -rw-r--r-- | test/pleroma/web/activity_pub/mrf/tag_policy_test.exs | 36 | 
6 files changed, 82 insertions, 12 deletions
@@ -30,7 +30,7 @@ If your platform is not supported, or you just want to be able to edit the sourc  - [OpenBSD (fi)](https://docs-develop.pleroma.social/backend/installation/openbsd_fi/)  ### OS/Distro packages -Currently Pleroma is packaged for [YunoHost](https://yunohost.org). If you want to package Pleroma for any OS/Distros, we can guide you through the process on our [community channels](#community-channels). If you want to change default options in your Pleroma package, please **discuss it with us first**. +Currently Pleroma is packaged for [YunoHost](https://yunohost.org) and [NixOS](https://nixos.org). If you want to package Pleroma for any OS/Distros, we can guide you through the process on our [community channels](#community-channels). If you want to change default options in your Pleroma package, please **discuss it with us first**.  ### Docker  While we don’t provide docker files, other people have written very good ones. Take a look at <https://github.com/angristan/docker-pleroma> or <https://glitch.sh/sn0w/pleroma-docker>. diff --git a/docs/installation/nixos_en.md b/docs/installation/nixos_en.md new file mode 100644 index 000000000..f3c4988b1 --- /dev/null +++ b/docs/installation/nixos_en.md @@ -0,0 +1,15 @@ +# Installing on NixOS + +NixOS contains a source build package of pleroma and a NixOS module to install it. +For installation add this to your configuration.nix and add a config.exs next to it: +```nix +  services.pleroma = { +    enable = true; +    configs = [ (lib.fileContents ./config.exs) ]; +    secretConfigFile = "/var/lib/pleroma/secret.exs"; +  }; +``` + +## Questions +The nix community uses matrix for communication: [#nix:nixos.org](https://matrix.to/#/#nix:nixos.org) + diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index c0c7f3806..829ddeaea 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -40,9 +40,9 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do    defp check_media_removal(           %{host: actor_host} = _actor_info, -         %{"type" => "Create", "object" => %{"attachment" => child_attachment}} = object +         %{"type" => type, "object" => %{"attachment" => child_attachment}} = object         ) -       when length(child_attachment) > 0 do +       when length(child_attachment) > 0 and type in ["Create", "Update"] do      media_removal =        instance_list(:media_removal)        |> MRF.subdomains_regex() @@ -63,10 +63,11 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do    defp check_media_nsfw(           %{host: actor_host} = _actor_info,           %{ -           "type" => "Create", +           "type" => type,             "object" => %{} = _child_object           } = object -       ) do +       ) +       when type in ["Create", "Update"] do      media_nsfw =        instance_list(:media_nsfw)        |> MRF.subdomains_regex() diff --git a/lib/pleroma/web/activity_pub/mrf/tag_policy.ex b/lib/pleroma/web/activity_pub/mrf/tag_policy.ex index 10072b693..73760ca8f 100644 --- a/lib/pleroma/web/activity_pub/mrf/tag_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/tag_policy.ex @@ -27,22 +27,22 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicy do    defp process_tag(           "mrf_tag:media-force-nsfw",           %{ -           "type" => "Create", +           "type" => type,             "object" => %{"attachment" => child_attachment}           } = message         ) -       when length(child_attachment) > 0 do +       when length(child_attachment) > 0 and type in ["Create", "Update"] do      {:ok, Kernel.put_in(message, ["object", "sensitive"], true)}    end    defp process_tag(           "mrf_tag:media-strip",           %{ -           "type" => "Create", +           "type" => type,             "object" => %{"attachment" => child_attachment} = object           } = message         ) -       when length(child_attachment) > 0 do +       when length(child_attachment) > 0 and type in ["Create", "Update"] do      object = Map.delete(object, "attachment")      message = Map.put(message, "object", object) @@ -152,7 +152,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicy do      do: filter_message(target_actor, message)    @impl true -  def filter(%{"actor" => actor, "type" => "Create"} = message), +  def filter(%{"actor" => actor, "type" => type} = message) when type in ["Create", "Update"],      do: filter_message(actor, message)    @impl true diff --git a/test/pleroma/web/activity_pub/mrf/simple_policy_test.exs b/test/pleroma/web/activity_pub/mrf/simple_policy_test.exs index 674b506c3..57fc00af5 100644 --- a/test/pleroma/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/pleroma/web/activity_pub/mrf/simple_policy_test.exs @@ -57,6 +57,16 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do        assert SimplePolicy.filter(local_message) == {:ok, local_message}      end + +    test "works with Updates" do +      clear_config([:mrf_simple, :media_removal], [{"remote.instance", "Some reason"}]) +      media_message = build_media_message(type: "Update") + +      assert SimplePolicy.filter(media_message) == +               {:ok, +                media_message +                |> Map.put("object", Map.delete(media_message["object"], "attachment"))} +    end    end    describe "when :media_nsfw" do @@ -90,12 +100,20 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do        assert SimplePolicy.filter(local_message) == {:ok, local_message}      end + +    test "works with Updates" do +      clear_config([:mrf_simple, :media_nsfw], [{"remote.instance", "Whetever"}]) +      media_message = build_media_message(type: "Update") + +      assert SimplePolicy.filter(media_message) == +               {:ok, put_in(media_message, ["object", "sensitive"], true)} +    end    end -  defp build_media_message do +  defp build_media_message(opts \\ []) do      %{        "actor" => "https://remote.instance/users/bob", -      "type" => "Create", +      "type" => opts[:type] || "Create",        "object" => %{          "attachment" => [%{}],          "tag" => ["foo"], diff --git a/test/pleroma/web/activity_pub/mrf/tag_policy_test.exs b/test/pleroma/web/activity_pub/mrf/tag_policy_test.exs index 46be316ee..a0db8df54 100644 --- a/test/pleroma/web/activity_pub/mrf/tag_policy_test.exs +++ b/test/pleroma/web/activity_pub/mrf/tag_policy_test.exs @@ -99,6 +99,24 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicyTest do        assert TagPolicy.filter(message) == {:ok, except_message}      end + +    test "removes attachments in Updates" do +      actor = insert(:user, tags: ["mrf_tag:media-strip"]) + +      message = %{ +        "actor" => actor.ap_id, +        "type" => "Update", +        "object" => %{"attachment" => ["file1"]} +      } + +      except_message = %{ +        "actor" => actor.ap_id, +        "type" => "Update", +        "object" => %{} +      } + +      assert TagPolicy.filter(message) == {:ok, except_message} +    end    end    describe "mrf_tag:media-force-nsfw" do @@ -119,5 +137,23 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicyTest do        assert TagPolicy.filter(message) == {:ok, except_message}      end + +    test "Mark as sensitive on presence of attachments in Updates" do +      actor = insert(:user, tags: ["mrf_tag:media-force-nsfw"]) + +      message = %{ +        "actor" => actor.ap_id, +        "type" => "Update", +        "object" => %{"tag" => ["test"], "attachment" => ["file1"]} +      } + +      except_message = %{ +        "actor" => actor.ap_id, +        "type" => "Update", +        "object" => %{"tag" => ["test"], "attachment" => ["file1"], "sensitive" => true} +      } + +      assert TagPolicy.filter(message) == {:ok, except_message} +    end    end  end  | 
