Skip to content
Snippets Groups Projects
Commit 5d4d51e6 authored by lain's avatar lain
Browse files

Add fixes for SPC users.

parent 608cc65d
Branches
No related tags found
No related merge requests found
# Pleroma: A lightweight social networking server
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
alias Pleroma.Repo
alias Pleroma.User
# alias Pleroma.Web.ActivityPub.Transmogrifier
import Ecto.Query
defmodule Pleroma.SpcFixes do
def upgrade_users do
query =
from(u in User,
where: fragment("? like ?", u.ap_id, "https://shitposter.club/user/%")
)
{:ok, file} = File.read("lib/pleroma/spc_fixes/users_conversion.txt")
mapping =
file
|> String.trim()
|> String.split("\n")
|> Enum.map(fn line ->
line
|> String.split("\t")
end)
|> Enum.reduce(%{}, fn [_id, old_ap_id, new_ap_id], acc ->
Map.put(acc, old_ap_id, String.trim(new_ap_id))
end)
# First, refetch all the old users.
_old_users =
query
|> Repo.all()
|> Enum.each(fn user ->
with ap_id when is_binary(ap_id) <- mapping[user.ap_id] do
# This fetches and updates the user.
User.get_or_fetch_by_ap_id(ap_id)
end
end)
# Now, fix follow relationships.
query =
from(u in User,
where: fragment("? like ?", u.ap_id, "https://shitposter.club/users/%")
)
query
|> Repo.all()
|> Enum.each(fn user ->
old_follower_address = User.ap_followers(user)
query =
from(u in User,
where: ^old_follower_address in u.following,
update: [
push: [following: ^user.follower_address]
]
)
Repo.update_all(query, [])
end)
end
end
This diff is collapsed.
{"url":"https://shitposter.club/users/zep","type":"Person","tag":[],"summary":"The Zeptar Show on anonradio.net","publicKey":{"publicKeyPem":"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsdkm3pQxYTW7rVVUQBJ0\nc+J7pUI623gohi2fwM05ZenYVysRIw0Mm6GYvDsCO6DHywi97pG4EBABEQNyagLS\njIDTrLR1GU0K4dnPgaZ7fIkXvMN+d2NNe0LoIw0wX23sw+L+D+U5l0AJ+3LqDC9s\nwucLz4uYokcrl8yxGFYHWjpRYqy/WVuk8986Hm1Mov4j8AWWV5VLl1yYcbQthSuw\nDXL5yMqwiLPn+Vhc4Pb216IhwIl+k9/tfdsnyAlCiasvUQ8Cigde0AJC0sqnUQhy\nJ4gSftvyW5ejYYebNWg09Afjq3I8k0gj1fGks0pY9IJr2a2H+eqCA//YI8z1XHvE\nlwIDAQAB\n-----END PUBLIC KEY-----\n\n","owner":"https://shitposter.club/users/zep","id":"https://shitposter.club/users/zep#main-key"},"preferredUsername":"zep","outbox":"https://shitposter.club/users/zep/outbox","name":"DJ Zep","manuallyApprovesFollowers":false,"inbox":"https://shitposter.club/users/zep/inbox","image":{"url":"https://shitposter.club/media/13946026-15ba-40e1-9cad-ba3a7aeb47e1/13946026-15ba-40e1-9cad-ba3a7aeb47e1.jpeg","type":"Image"},"id":"https://shitposter.club/users/zep","icon":{"url":"https://shitposter.club/media/83650c2f-7f31-98f5-acee-69a486c94173/83650c2f-7f31-98f5-acee-69a486c94173.jpeg","type":"Image"},"following":"https://shitposter.club/users/zep/following","followers":"https://shitposter.club/users/zep/followers","endpoints":{"sharedInbox":"https://shitposter.club/inbox"},"@context":["https://www.w3.org/ns/activitystreams","https://shitposter.club/schemas/litepub-0.1.jsonld"]}
\ No newline at end of file
# Pleroma: A lightweight social networking server
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.SpcFixesTest do
use Pleroma.Web.ConnCase
alias Pleroma.SpcFixes
alias Pleroma.Web.CommonAPI
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.User
import Pleroma.Factory
test "resets the ap_id and follower_address of old spc users" do
Tesla.Mock.mock(fn
%{url: "https://shitposter.club/users/zep"} ->
%Tesla.Env{status: 200, body: File.read!("test/fixtures/zep.json")}
%{url: nil} ->
nil
end)
user =
insert(:user, %{
local: false,
ap_id: "https://shitposter.club/user/4962",
follower_address: User.ap_followers(%User{nickname: "zep@shitposter.club"}),
info: %{topic: "ignore"},
nickname: "zep@shitposter.club"
})
other_user = insert(:user)
{:ok, other_user} = User.follow(other_user, user)
{:ok, activity} = CommonAPI.post(user, %{"status" => "blabla"})
assert User.following?(other_user, user)
assert [activity] == ActivityPub.fetch_activities(other_user.following)
SpcFixes.upgrade_users()
user = Pleroma.Repo.get(User, user.id)
other_user = Pleroma.Repo.get(User, other_user.id)
assert user.ap_id == "https://shitposter.club/users/zep"
assert user.follower_address == "https://shitposter.club/users/zep/followers"
# Activites and following are correctly stitched.
assert User.following?(other_user, user)
assert [activity] == ActivityPub.fetch_activities(other_user.following) |> IO.inspect()
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment