unoffical wafrn mirror wafrn.net
atproto social-network activitypub
at angular21 46 lines 1.6 kB view raw
1import { Op } from 'sequelize' 2import { Follows, sequelize, User } from '../../../models/index.js' 3import { activityPubObject } from '../../../interfaces/fediverse/activityPubObject.js' 4import { getAllLocalUserIds } from '../../cacheGetters/getAllLocalUserIds.js' 5import { follow } from '../../follow.js' 6import { logger } from '../../logger.js' 7import { getRemoteActor } from '../getRemoteActor.js' 8 9async function MoveActivity(body: activityPubObject, remoteUser: User, user: User) { 10 // WIP move 11 // TODO get list of users who where following old account 12 // then make them follow the new one, sending petition 13 const apObject: activityPubObject = body 14 logger.debug({ 15 message: 'MOVE ACTIVITY', 16 activity: apObject 17 }) 18 if (!apObject.target) return 19 20 const newUser = await getRemoteActor(apObject.target, user) 21 const oldUser = await User.findByPk(remoteUser.id) // a bit paranoid, innit? 22 if (newUser && oldUser) { 23 logger.debug({ message: `Moving ${oldUser.url} to ${newUser.url}` }) 24 const followsToMove = await Follows.findAll({ 25 where: { 26 [Op.and]: [ 27 { 28 followedId: oldUser.id, 29 accepted: true, 30 followerId: { [Op.in]: await getAllLocalUserIds() } 31 }, 32 sequelize.literal( 33 `"followerId" NOT IN (select "followerId" from "follows" where "followedId"='${newUser.id}')` 34 ) 35 ] 36 } 37 }) 38 if (followsToMove) { 39 for await (const followToMove of followsToMove) { 40 await follow(followToMove.followerId, newUser.id) 41 } 42 } 43 } 44} 45 46export { MoveActivity }