From 5b9c965d5aa747f29b081289f930ee215fdc23c8 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 8 Apr 2019 14:04:57 +0200 Subject: Add ability to forbid followers --- server/lib/activitypub/process/process-follow.ts | 10 ++++++++-- server/lib/activitypub/send/send-accept.ts | 2 +- server/lib/activitypub/send/send-follow.ts | 2 +- server/lib/activitypub/send/send-reject.ts | 18 +++++++----------- server/lib/activitypub/send/send-undo.ts | 2 +- server/lib/activitypub/url.ts | 12 +++++++----- 6 files changed, 25 insertions(+), 21 deletions(-) (limited to 'server/lib') diff --git a/server/lib/activitypub/process/process-follow.ts b/server/lib/activitypub/process/process-follow.ts index 0cd537187..cecf09b47 100644 --- a/server/lib/activitypub/process/process-follow.ts +++ b/server/lib/activitypub/process/process-follow.ts @@ -1,12 +1,13 @@ import { ActivityFollow } from '../../../../shared/models/activitypub' import { retryTransactionWrapper } from '../../../helpers/database-utils' import { logger } from '../../../helpers/logger' -import { sequelizeTypescript } from '../../../initializers' +import { sequelizeTypescript, CONFIG } from '../../../initializers' import { ActorModel } from '../../../models/activitypub/actor' import { ActorFollowModel } from '../../../models/activitypub/actor-follow' -import { sendAccept } from '../send' +import { sendAccept, sendReject } from '../send' import { Notifier } from '../../notifier' import { getAPId } from '../../../helpers/activitypub' +import { getServerActor } from '../../../helpers/utils' async function processFollowActivity (activity: ActivityFollow, byActor: ActorModel) { const activityObject = getAPId(activity.object) @@ -29,6 +30,11 @@ async function processFollow (actor: ActorModel, targetActorURL: string) { if (!targetActor) throw new Error('Unknown actor') if (targetActor.isOwned() === false) throw new Error('This is not a local actor.') + const serverActor = await getServerActor() + if (targetActor.id === serverActor.id && CONFIG.FOLLOWERS.INSTANCE.ENABLED === false) { + return sendReject(actor, targetActor) + } + const [ actorFollow, created ] = await ActorFollowModel.findOrCreate({ where: { actorId: actor.id, diff --git a/server/lib/activitypub/send/send-accept.ts b/server/lib/activitypub/send/send-accept.ts index b6abde13d..388a9ed23 100644 --- a/server/lib/activitypub/send/send-accept.ts +++ b/server/lib/activitypub/send/send-accept.ts @@ -17,7 +17,7 @@ async function sendAccept (actorFollow: ActorFollowModel) { logger.info('Creating job to accept follower %s.', follower.url) - const followUrl = getActorFollowActivityPubUrl(actorFollow) + const followUrl = getActorFollowActivityPubUrl(follower, me) const followData = buildFollowActivity(followUrl, follower, me) const url = getActorFollowAcceptActivityPubUrl(actorFollow) diff --git a/server/lib/activitypub/send/send-follow.ts b/server/lib/activitypub/send/send-follow.ts index 170b46b48..2c3d02014 100644 --- a/server/lib/activitypub/send/send-follow.ts +++ b/server/lib/activitypub/send/send-follow.ts @@ -14,7 +14,7 @@ function sendFollow (actorFollow: ActorFollowModel) { logger.info('Creating job to send follow request to %s.', following.url) - const url = getActorFollowActivityPubUrl(actorFollow) + const url = getActorFollowActivityPubUrl(me, following) const data = buildFollowActivity(url, me, following) return unicastTo(data, me, following.inboxUrl) diff --git a/server/lib/activitypub/send/send-reject.ts b/server/lib/activitypub/send/send-reject.ts index db8c2d86d..bac7ff556 100644 --- a/server/lib/activitypub/send/send-reject.ts +++ b/server/lib/activitypub/send/send-reject.ts @@ -1,15 +1,11 @@ import { ActivityFollow, ActivityReject } from '../../../../shared/models/activitypub' import { ActorModel } from '../../../models/activitypub/actor' -import { ActorFollowModel } from '../../../models/activitypub/actor-follow' -import { getActorFollowAcceptActivityPubUrl, getActorFollowActivityPubUrl } from '../url' +import { getActorFollowActivityPubUrl, getActorFollowRejectActivityPubUrl } from '../url' import { unicastTo } from './utils' import { buildFollowActivity } from './send-follow' import { logger } from '../../../helpers/logger' -async function sendReject (actorFollow: ActorFollowModel) { - const follower = actorFollow.ActorFollower - const me = actorFollow.ActorFollowing - +async function sendReject (follower: ActorModel, following: ActorModel) { if (!follower.serverId) { // This should never happen logger.warn('Do not sending reject to local follower.') return @@ -17,13 +13,13 @@ async function sendReject (actorFollow: ActorFollowModel) { logger.info('Creating job to reject follower %s.', follower.url) - const followUrl = getActorFollowActivityPubUrl(actorFollow) - const followData = buildFollowActivity(followUrl, follower, me) + const followUrl = getActorFollowActivityPubUrl(follower, following) + const followData = buildFollowActivity(followUrl, follower, following) - const url = getActorFollowAcceptActivityPubUrl(actorFollow) - const data = buildRejectActivity(url, me, followData) + const url = getActorFollowRejectActivityPubUrl(follower, following) + const data = buildRejectActivity(url, following, followData) - return unicastTo(data, me, follower.inboxUrl) + return unicastTo(data, following, follower.inboxUrl) } // --------------------------------------------------------------------------- diff --git a/server/lib/activitypub/send/send-undo.ts b/server/lib/activitypub/send/send-undo.ts index ecbf605d6..8727a121e 100644 --- a/server/lib/activitypub/send/send-undo.ts +++ b/server/lib/activitypub/send/send-undo.ts @@ -31,7 +31,7 @@ async function sendUndoFollow (actorFollow: ActorFollowModel, t: Transaction) { logger.info('Creating job to send an unfollow request to %s.', following.url) - const followUrl = getActorFollowActivityPubUrl(actorFollow) + const followUrl = getActorFollowActivityPubUrl(me, following) const undoUrl = getUndoActivityPubUrl(followUrl) const followActivity = buildFollowActivity(followUrl, me, following) diff --git a/server/lib/activitypub/url.ts b/server/lib/activitypub/url.ts index 7c2ee5bc6..401b83fc2 100644 --- a/server/lib/activitypub/url.ts +++ b/server/lib/activitypub/url.ts @@ -74,11 +74,8 @@ function getVideoDislikesActivityPubUrl (video: VideoModel) { return video.url + '/dislikes' } -function getActorFollowActivityPubUrl (actorFollow: ActorFollowModel) { - const me = actorFollow.ActorFollower - const following = actorFollow.ActorFollowing - - return me.url + '/follows/' + following.id +function getActorFollowActivityPubUrl (follower: ActorModel, following: ActorModel) { + return follower.url + '/follows/' + following.id } function getActorFollowAcceptActivityPubUrl (actorFollow: ActorFollowModel) { @@ -88,6 +85,10 @@ function getActorFollowAcceptActivityPubUrl (actorFollow: ActorFollowModel) { return follower.url + '/accepts/follows/' + me.id } +function getActorFollowRejectActivityPubUrl (follower: ActorModel, following: ActorModel) { + return follower.url + '/rejects/follows/' + following.id +} + function getVideoAnnounceActivityPubUrl (byActor: ActorModel, video: VideoModel) { return video.url + '/announces/' + byActor.id } @@ -120,6 +121,7 @@ export { getVideoViewActivityPubUrl, getVideoLikeActivityPubUrl, getVideoDislikeActivityPubUrl, + getActorFollowRejectActivityPubUrl, getVideoCommentActivityPubUrl, getDeleteActivityPubUrl, getVideoSharesActivityPubUrl, -- cgit v1.2.3