unoffical wafrn mirror wafrn.net
atproto social-network activitypub
at testPDSNotExplode 161 lines 5.4 kB view raw
1import { Job } from 'bullmq' 2import { logger } from '../logger.js' 3import { 4 Blocks, 5 Emoji, 6 EmojiReaction, 7 FederatedHost, 8 Follows, 9 Post, 10 User, 11 UserLikesPostRelations 12} from '../../models/index.js' 13import { getRemoteActor } from '../activitypub/getRemoteActor.js' 14import { signAndAccept } from '../activitypub/signAndAccept.js' 15import { removeUser } from '../activitypub/removeUser.js' 16import getBlockedIds from '../cacheGetters/getBlockedIds.js' 17import getUserBlockedServers from '../cacheGetters/getUserBlockedServers.js' 18import { deletePostCommon } from '../deletePost.js' 19import { AcceptActivity } from '../activitypub/processors/accept.js' 20import { AnnounceActivity } from '../activitypub/processors/announce.js' 21import { CreateActivity } from '../activitypub/processors/create.js' 22import { FollowActivity } from '../activitypub/processors/follow.js' 23import { UpdateActivity } from '../activitypub/processors/update.js' 24import { UndoActivity } from '../activitypub/processors/undo.js' 25import { LikeActivity } from '../activitypub/processors/like.js' 26import { DeleteActivity } from '../activitypub/processors/delete.js' 27import { EmojiReactActivity } from '../activitypub/processors/emojiReact.js' 28import { RemoveActivity } from '../activitypub/processors/remove.js' 29import { AddActivity } from '../activitypub/processors/add.js' 30import { BlockActivity } from '../activitypub/processors/block.js' 31import { MoveActivity } from '../activitypub/processors/move.js' 32import { RejectActivity } from '../activitypub/processors/reject.js' 33import { wait } from '../wait.js' 34import { flagActivity } from '../activitypub/processors/flag.js' 35 36async function inboxWorker(job: Job) { 37 try { 38 const user = await User.findByPk(job.data.petitionBy) 39 if (!user) { 40 return 41 } 42 43 const body = job.data.petition 44 const req = { body: body } 45 // little hack that should be fixed later 46 if (req.body.type === 'Delete' && req.body.id.endsWith('#delete')) { 47 const userToRemove = await User.findOne({ 48 where: { 49 remoteId: req.body.id.split('#')[0].toLowerCase() 50 } 51 }) 52 if (userToRemove) { 53 await removeUser(userToRemove.id) 54 return 55 } 56 } 57 const remoteUser = await getRemoteActor(req.body.actor, user) 58 const host = await FederatedHost.findOne({ 59 where: { 60 displayName: new URL(req.body.actor).host 61 } 62 }) 63 if (remoteUser) { 64 // we check if the user has blocked the user or the server. This will mostly work for follows and dms. Will investigate further down the line 65 const userBlocks: string[] = await getBlockedIds(user.id, false, true) 66 const blocksExisting = userBlocks.includes(remoteUser.id) ? 1 : 0 67 const blockedServersData = await getUserBlockedServers(user.id) 68 const blocksServers = blockedServersData.find((elem: any) => elem.id === host?.id) ? 1 : 0 69 if ( 70 (!remoteUser?.banned && !host?.blocked && blocksExisting + blocksServers === 0) || 71 req.body.type === 'Undo' || 72 req.body.type === 'Deletee' 73 ) { 74 switch (req.body.type) { 75 case 'Accept': { 76 await AcceptActivity(body, remoteUser, user) 77 break 78 } 79 case 'Reject': { 80 await RejectActivity(body, remoteUser, user) 81 break 82 } 83 case 'Announce': { 84 await AnnounceActivity(body, remoteUser, user) 85 break 86 } 87 case 'Page': 88 case 'Create': { 89 await CreateActivity(body, remoteUser, user) 90 break 91 } 92 case 'Follow': { 93 await FollowActivity(body, remoteUser, user) 94 break 95 } 96 case 'Update': { 97 await wait(5000) 98 await UpdateActivity(body, remoteUser, user) 99 break 100 } 101 case 'Undo': { 102 await UndoActivity(body, remoteUser, user) 103 break 104 } 105 case 'Like': { 106 await LikeActivity(body, remoteUser, user) 107 break 108 } 109 case 'Delete': { 110 await DeleteActivity(body, remoteUser, user) 111 break 112 } 113 case 'EmojiReact': { 114 await EmojiReactActivity(body, remoteUser, user) 115 break 116 } 117 case 'Remove': { 118 await RemoveActivity(body, remoteUser, user) 119 break 120 } 121 case 'Add': { 122 await AddActivity(body, remoteUser, user) 123 break 124 } 125 case 'Block': { 126 await BlockActivity(body, remoteUser, user) 127 break 128 } 129 130 case 'Move': { 131 await MoveActivity(body, remoteUser, user) 132 break 133 } 134 case 'Flag': { 135 await flagActivity(body, remoteUser, user) 136 break 137 } 138 139 // activities that we ignore: 140 case 'CacheFile': 141 case 'Playlist': 142 case 'Listen': 143 case 'View': { 144 // await signAndAccept(req, remoteUser, user) 145 break 146 } 147 148 default: { 149 logger.info(`NOT IMPLEMENTED: ${req.body.type}`) 150 logger.info(req.body) 151 } 152 } 153 } 154 } 155 } catch (err) { 156 logger.debug(err) 157 const error = new Error('error') 158 } 159} 160 161export { inboxWorker }