+ await sequelizeTypescript.transaction(async t => {
+ if (follow.state === 'accepted') await sendUndoFollow(follow, t)
+
+ // Disable redundancy on unfollowed instances
+ const server = follow.ActorFollowing.Server
+ server.redundancyAllowed = false
+ await server.save({ transaction: t })
+
+ // Async, could be long
+ removeRedundanciesOfServer(server.id)
+ .catch(err => logger.error('Cannot remove redundancy of %s.', server.host, err))
+
+ await follow.destroy({ transaction: t })
+ })
+
+ return res.status(HttpStatusCode.NO_CONTENT_204).end()
+}
+
+async function removeOrRejectFollower (req: express.Request, res: express.Response) {
+ const follow = res.locals.follow
+
+ await sendReject(follow.url, follow.ActorFollower, follow.ActorFollowing)
+
+ await follow.destroy()
+
+ return res.status(HttpStatusCode.NO_CONTENT_204).end()
+}
+
+async function acceptFollower (req: express.Request, res: express.Response) {
+ const follow = res.locals.follow
+
+ sendAccept(follow)
+
+ follow.state = 'accepted'
+ await follow.save()
+
+ await autoFollowBackIfNeeded(follow)