diff options
author | kaniini <nenolod@gmail.com> | 2019-01-07 17:09:52 +0000 |
---|---|---|
committer | kaniini <nenolod@gmail.com> | 2019-01-07 17:09:52 +0000 |
commit | 74e109373238c3c915bdf23b364aedd0ca0f6970 (patch) | |
tree | 0c34f8d887b3c20b1f92b538b48eeca31732bf5f /lib | |
parent | b640cf0ce09f2c3f81ad8f74a4a536be34605c49 (diff) | |
parent | 7382adf407301945e30ee38aa4efe28a819fcf44 (diff) | |
download | pleroma-74e109373238c3c915bdf23b364aedd0ca0f6970.tar.gz |
Merge branch 'resilient-user-view' into 'develop'
Make TwAPI UserView more resilient to issues.
See merge request pleroma/pleroma!634
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/user.ex | 9 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/views/activity_view.ex | 16 |
2 files changed, 24 insertions, 1 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 0e5e2d943..85d0f9fce 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -367,6 +367,15 @@ defmodule Pleroma.User do Repo.get_by(User, ap_id: ap_id) end + # This is mostly an SPC migration fix. This guesses the user nickname (by taking the last part of the ap_id and the domain) and tries to get that user + def get_by_guessed_nickname(ap_id) do + domain = URI.parse(ap_id).host + name = List.last(String.split(ap_id, "/")) + nickname = "#{name}@#{domain}" + + get_by_nickname(nickname) + end + def update_and_set_cache(changeset) do with {:ok, user} <- Repo.update(changeset) do Cachex.put(:user_cache, "ap_id:#{user.ap_id}", user) diff --git a/lib/pleroma/web/twitter_api/views/activity_view.ex b/lib/pleroma/web/twitter_api/views/activity_view.ex index ad0cc76ed..0bae3d06f 100644 --- a/lib/pleroma/web/twitter_api/views/activity_view.ex +++ b/lib/pleroma/web/twitter_api/views/activity_view.ex @@ -94,11 +94,25 @@ defmodule Pleroma.Web.TwitterAPI.ActivityView do ap_id == "https://www.w3.org/ns/activitystreams#Public" -> nil + user = User.get_cached_by_ap_id(ap_id) -> + user + + user = User.get_by_guessed_nickname(ap_id) -> + user + true -> - User.get_cached_by_ap_id(ap_id) + error_user() end end + defp error_user do + %User{ + info: %User.Info{}, + nickname: "erroruser@example.com", + inserted_at: NaiveDateTime.utc_now() + } + end + def render("index.json", opts) do context_ids = collect_context_ids(opts.activities) users = collect_users(opts.activities) |