diff options
| -rw-r--r-- | .gitlab-ci.yml | 38 | ||||
| -rw-r--r-- | .gitlab/merge_request_templates/Release.md | 1 | ||||
| -rw-r--r-- | CHANGELOG.md | 1 | ||||
| -rw-r--r-- | lib/pleroma/notification.ex | 7 | ||||
| -rw-r--r-- | lib/pleroma/web/common_api/common_api.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/web_finger/web_finger.ex | 24 | ||||
| -rw-r--r-- | test/notification_test.exs | 13 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/notification_view_test.exs | 2 | ||||
| -rw-r--r-- | test/web/web_finger/web_finger_test.exs | 5 | 
9 files changed, 68 insertions, 25 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9e5d659f2..dc953a929 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -282,6 +282,8 @@ docker:      IMAGE_TAG_SLUG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG      IMAGE_TAG_LATEST: $CI_REGISTRY_IMAGE:latest      IMAGE_TAG_LATEST_STABLE: $CI_REGISTRY_IMAGE:latest-stable +    DOCKER_BUILDX_URL: https://github.com/docker/buildx/releases/download/v0.4.1/buildx-v0.4.1.linux-amd64 +    DOCKER_BUILDX_HASH: 71a7d01439aa8c165a25b59c44d3f016fddbd98b    before_script: &before-docker      - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY      - docker pull $IMAGE_TAG_SLUG || true @@ -289,10 +291,14 @@ docker:      - export CI_VCS_REF=$CI_COMMIT_SHORT_SHA    allow_failure: true    script: -    - docker build --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST . -    - docker push $IMAGE_TAG -    - docker push $IMAGE_TAG_SLUG -    - docker push $IMAGE_TAG_LATEST +    - mkdir -p /root/.docker/cli-plugins +    - wget "${DOCKER_BUILDX_URL}" -O ~/.docker/cli-plugins/docker-buildx +    - echo "${DOCKER_BUILDX_HASH}  /root/.docker/cli-plugins/docker-buildx" | sha1sum -c +    - chmod +x ~/.docker/cli-plugins/docker-buildx +    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes +    - docker buildx create --name mbuilder --driver docker-container --use +    - docker buildx inspect --bootstrap +    - docker buildx build --platform linux/amd64,linux/arm/v7,linux/arm64/v8 --push --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST .    tags:      - dind    only: @@ -307,10 +313,14 @@ docker-stable:    before_script: *before-docker    allow_failure: true    script: -    - docker build --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST_STABLE . -    - docker push $IMAGE_TAG -    - docker push $IMAGE_TAG_SLUG -    - docker push $IMAGE_TAG_LATEST_STABLE +    - mkdir -p /root/.docker/cli-plugins +    - wget "${DOCKER_BUILDX_URL}" -O ~/.docker/cli-plugins/docker-buildx +    - echo "${DOCKER_BUILDX_HASH}  /root/.docker/cli-plugins/docker-buildx" | sha1sum -c +    - chmod +x ~/.docker/cli-plugins/docker-buildx +    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes +    - docker buildx create --name mbuilder --driver docker-container --use +    - docker buildx inspect --bootstrap +    - docker buildx build --platform linux/amd64,linux/arm/v7,linux/arm64/v8 --push --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST_STABLE .    tags:      - dind    only: @@ -325,9 +335,15 @@ docker-release:    before_script: *before-docker    allow_failure: true    script: -    - docker build --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t       $IMAGE_TAG_SLUG . -    - docker push $IMAGE_TAG -    - docker push $IMAGE_TAG_SLUG +  script: +    - mkdir -p /root/.docker/cli-plugins +    - wget "${DOCKER_BUILDX_URL}" -O ~/.docker/cli-plugins/docker-buildx +    - echo "${DOCKER_BUILDX_HASH}  /root/.docker/cli-plugins/docker-buildx" | sha1sum -c +    - chmod +x ~/.docker/cli-plugins/docker-buildx +    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes +    - docker buildx create --name mbuilder --driver docker-container --use +    - docker buildx inspect --bootstrap +    - docker buildx build --platform linux/amd64,linux/arm/v7,linux/arm64/v8 --push --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG .    tags:      - dind    only: diff --git a/.gitlab/merge_request_templates/Release.md b/.gitlab/merge_request_templates/Release.md index 237f74e00..b2c772696 100644 --- a/.gitlab/merge_request_templates/Release.md +++ b/.gitlab/merge_request_templates/Release.md @@ -3,3 +3,4 @@  * [ ]  Compile a changelog  * [ ]  Create an MR with an announcement to pleroma.social  * [ ]  Tag the release +* [ ] Merge `stable` into `develop` (in case the fixes are already in develop, use `git merge -s ours --no-commit` and manually merge the changelogs) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f6afe7a6..36db4a6ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).  - Mastodon API: Add `pleroma.unread_count` to the Marker entity.  - Mastodon API: Added `pleroma.metadata.post_formats` to /api/v1/instance  - Mastodon API (legacy): Allow query parameters for `/api/v1/domain_blocks`, e.g. `/api/v1/domain_blocks?domain=badposters.zone` +- Mastodon API: Make notifications about statuses from muted users and threads read automatically  - Pleroma API: `/api/pleroma/captcha` responses now include `seconds_valid` with an integer value.  </details> diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 0b171563b..c1825f810 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -15,6 +15,7 @@ defmodule Pleroma.Notification do    alias Pleroma.Repo    alias Pleroma.ThreadMute    alias Pleroma.User +  alias Pleroma.Web.CommonAPI    alias Pleroma.Web.CommonAPI.Utils    alias Pleroma.Web.Push    alias Pleroma.Web.Streamer @@ -441,6 +442,7 @@ defmodule Pleroma.Notification do          |> Multi.insert(:notification, %Notification{            user_id: user.id,            activity: activity, +          seen: mark_as_read?(activity, user),            type: type_from_activity(activity)          })          |> Marker.multi_set_last_read_id(user, "notifications") @@ -634,6 +636,11 @@ defmodule Pleroma.Notification do    def skip?(_, _, _), do: false +  def mark_as_read?(activity, target_user) do +    user = Activity.user_actor(activity) +    User.mutes_user?(target_user, user) || CommonAPI.thread_muted?(target_user, activity) +  end +    def for_user_and_activity(user, activity) do      from(n in __MODULE__,        where: n.user_id == ^user.id, diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index a8141b28f..5ad2b91c2 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -465,7 +465,7 @@ defmodule Pleroma.Web.CommonAPI do    end    def thread_muted?(%User{id: user_id}, %{data: %{"context" => context}}) -      when is_binary("context") do +      when is_binary(context) do      ThreadMute.exists?(user_id, context)    end diff --git a/lib/pleroma/web/web_finger/web_finger.ex b/lib/pleroma/web/web_finger/web_finger.ex index 71ccf251a..c4051e63e 100644 --- a/lib/pleroma/web/web_finger/web_finger.ex +++ b/lib/pleroma/web/web_finger/web_finger.ex @@ -149,6 +149,18 @@ defmodule Pleroma.Web.WebFinger do      end    end +  defp get_address_from_domain(domain, encoded_account) when is_binary(domain) do +    case find_lrdd_template(domain) do +      {:ok, template} -> +        String.replace(template, "{uri}", encoded_account) + +      _ -> +        "https://#{domain}/.well-known/webfinger?resource=#{encoded_account}" +    end +  end + +  defp get_address_from_domain(_, _), do: nil +    @spec finger(String.t()) :: {:ok, map()} | {:error, any()}    def finger(account) do      account = String.trim_leading(account, "@") @@ -163,16 +175,8 @@ defmodule Pleroma.Web.WebFinger do      encoded_account = URI.encode("acct:#{account}") -    address = -      case find_lrdd_template(domain) do -        {:ok, template} -> -          String.replace(template, "{uri}", encoded_account) - -        _ -> -          "https://#{domain}/.well-known/webfinger?resource=#{encoded_account}" -      end - -    with response <- +    with address when is_binary(address) <- get_address_from_domain(domain, encoded_account), +         response <-             HTTP.get(               address,               [{"accept", "application/xrd+xml,application/jrd+json"}] diff --git a/test/notification_test.exs b/test/notification_test.exs index 8243cfd34..a09b08675 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -217,7 +217,10 @@ defmodule Pleroma.NotificationTest do        muter = Repo.get(User, muter.id)        {:ok, activity} = CommonAPI.post(muted, %{status: "Hi @#{muter.nickname}"}) -      assert Notification.create_notification(activity, muter) +      notification = Notification.create_notification(activity, muter) + +      assert notification.id +      assert notification.seen      end      test "notification created if user is muted without notifications" do @@ -243,7 +246,10 @@ defmodule Pleroma.NotificationTest do            in_reply_to_status_id: activity.id          }) -      assert Notification.create_notification(activity, muter) +      notification = Notification.create_notification(activity, muter) + +      assert notification.id +      assert notification.seen      end      test "it disables notifications from strangers" do @@ -317,6 +323,7 @@ defmodule Pleroma.NotificationTest do        {:ok, [notification]} = Notification.create_notifications(status)        assert notification +      refute notification.seen      end      test "it creates notifications when someone likes user's status with a filtered word" do @@ -330,6 +337,7 @@ defmodule Pleroma.NotificationTest do        {:ok, [notification]} = Notification.create_notifications(activity_two)        assert notification +      refute notification.seen      end    end @@ -1012,6 +1020,7 @@ defmodule Pleroma.NotificationTest do        [notification] = Notification.for_user(user)        assert notification.activity.object +      assert notification.seen      end      test "it doesn't return notifications for muted user with notifications", %{user: user} do diff --git a/test/web/mastodon_api/views/notification_view_test.exs b/test/web/mastodon_api/views/notification_view_test.exs index 8e0e58538..2f6a808f1 100644 --- a/test/web/mastodon_api/views/notification_view_test.exs +++ b/test/web/mastodon_api/views/notification_view_test.exs @@ -219,7 +219,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do      expected = %{        id: to_string(notification.id), -      pleroma: %{is_seen: false, is_muted: true}, +      pleroma: %{is_seen: true, is_muted: true},        type: "favourite",        account: AccountView.render("show.json", %{user: another_user, for: user}),        status: StatusView.render("show.json", %{activity: create_activity, for: user}), diff --git a/test/web/web_finger/web_finger_test.exs b/test/web/web_finger/web_finger_test.exs index f4884e0a2..96fc0bbaa 100644 --- a/test/web/web_finger/web_finger_test.exs +++ b/test/web/web_finger/web_finger_test.exs @@ -40,6 +40,11 @@ defmodule Pleroma.Web.WebFingerTest do    end    describe "fingering" do +    test "returns error for nonsensical input" do +      assert {:error, _} = WebFinger.finger("bliblablu") +      assert {:error, _} = WebFinger.finger("pleroma.social") +    end +      test "returns error when fails parse xml or json" do        user = "invalid_content@social.heldscal.la"        assert {:error, %Jason.DecodeError{}} = WebFinger.finger(user)  | 
