X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fuser.ex;h=1dad30e876f6265d5835e7604ded15aea50ca3a8;hb=90661e20cf91b2b1e95fdee73f2e95aa18c1be65;hp=327eb3ea31c8594961705f6da13e93966bdaafff;hpb=ae3cb652b6d75bc58e0fac3333d5820d8c335f48;p=akkoma diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 327eb3ea3..1dad30e87 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -68,7 +68,8 @@ defmodule Pleroma.User do following_count: length(user.following) - oneself, note_count: user.info["note_count"] || 0, follower_count: user.info["follower_count"] || 0, - locked: user.info["locked"] || false + locked: user.info["locked"] || false, + default_scope: user.info["default_scope"] || "public" } end @@ -398,6 +399,7 @@ defmodule Pleroma.User do Enum.map(reqs, fn req -> req.actor end) |> Enum.uniq() |> Enum.map(fn ap_id -> get_by_ap_id(ap_id) end) + |> Enum.filter(fn u -> !following?(u, user) end) {:ok, users} end @@ -456,13 +458,34 @@ defmodule Pleroma.User do update_and_set_cache(cs) end + def get_notified_from_activity_query(to) do + from( + u in User, + where: u.ap_id in ^to, + where: u.local == true + ) + end + + def get_notified_from_activity(%Activity{recipients: to, data: %{"type" => "Announce"} = data}) do + object = Object.normalize(data["object"]) + actor = User.get_cached_by_ap_id(data["actor"]) + + # ensure that the actor who published the announced object appears only once + to = + if actor.nickname != nil do + to ++ [object.data["actor"]] + else + to + end + |> Enum.uniq() + + query = get_notified_from_activity_query(to) + + Repo.all(query) + end + def get_notified_from_activity(%Activity{recipients: to}) do - query = - from( - u in User, - where: u.ap_id in ^to, - where: u.local == true - ) + query = get_notified_from_activity_query(to) Repo.all(query) end @@ -499,7 +522,8 @@ defmodule Pleroma.User do u.nickname, u.name ) - } + }, + where: not is_nil(u.nickname) ) q = @@ -578,7 +602,19 @@ defmodule Pleroma.User do end def local_user_query() do - from(u in User, where: u.local == true) + from( + u in User, + where: u.local == true, + where: not is_nil(u.nickname) + ) + end + + def moderator_user_query() do + from( + u in User, + where: u.local == true, + where: fragment("?->'is_moderator' @> 'true'", u.info) + ) end def deactivate(%User{} = user) do @@ -638,16 +674,18 @@ defmodule Pleroma.User do end def get_or_create_instance_user do - if user = get_by_ap_id(Pleroma.Web.Endpoint.url()) do + relay_uri = "#{Pleroma.Web.Endpoint.url()}/relay" + + if user = get_by_ap_id(relay_uri) do user else changes = %User{} |> cast(%{}, [:ap_id, :nickname, :local]) - |> put_change(:ap_id, Pleroma.Web.Endpoint.url()) + |> put_change(:ap_id, relay_uri) |> put_change(:nickname, nil) |> put_change(:local, true) - |> put_change(:follower_address, Pleroma.Web.Endpoint.url() <> "/relay/followers") + |> put_change(:follower_address, relay_uri <> "/followers") {:ok, user} = Repo.insert(changes) user