From 14893eb71cb2d4ca47e07589c81958863603aba4 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 8 Apr 2019 15:18:04 +0200 Subject: Add ability to manually approves instance followers in REST API --- server/controllers/api/config.ts | 3 ++- server/controllers/api/server/follows.ts | 38 +++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 6 deletions(-) (limited to 'server/controllers/api') diff --git a/server/controllers/api/config.ts b/server/controllers/api/config.ts index f9bb0b947..5c4f455ee 100644 --- a/server/controllers/api/config.ts +++ b/server/controllers/api/config.ts @@ -282,7 +282,8 @@ function customConfig (): CustomConfig { }, followers: { instance: { - enabled: CONFIG.FOLLOWERS.INSTANCE.ENABLED + enabled: CONFIG.FOLLOWERS.INSTANCE.ENABLED, + manualApproval: CONFIG.FOLLOWERS.INSTANCE.MANUAL_APPROVAL } } } diff --git a/server/controllers/api/server/follows.ts b/server/controllers/api/server/follows.ts index 87cf091cb..207a09a4c 100644 --- a/server/controllers/api/server/follows.ts +++ b/server/controllers/api/server/follows.ts @@ -3,7 +3,7 @@ import { UserRight } from '../../../../shared/models/users' import { logger } from '../../../helpers/logger' import { getFormattedObjects, getServerActor } from '../../../helpers/utils' import { sequelizeTypescript, SERVER_ACTOR_NAME } from '../../../initializers' -import { sendReject, sendUndoFollow } from '../../../lib/activitypub/send' +import { sendAccept, sendReject, sendUndoFollow } from '../../../lib/activitypub/send' import { asyncMiddleware, authenticate, @@ -14,10 +14,11 @@ import { setDefaultSort } from '../../../middlewares' import { + acceptOrRejectFollowerValidator, followersSortValidator, followingSortValidator, followValidator, - removeFollowerValidator, + getFollowerValidator, removeFollowingValidator } from '../../../middlewares/validators' import { ActorFollowModel } from '../../../models/activitypub/actor-follow' @@ -59,8 +60,24 @@ serverFollowsRouter.get('/followers', serverFollowsRouter.delete('/followers/:nameWithHost', authenticate, ensureUserHasRight(UserRight.MANAGE_SERVER_FOLLOW), - asyncMiddleware(removeFollowerValidator), - asyncMiddleware(removeFollower) + asyncMiddleware(getFollowerValidator), + asyncMiddleware(removeOrRejectFollower) +) + +serverFollowsRouter.post('/followers/:nameWithHost/reject', + authenticate, + ensureUserHasRight(UserRight.MANAGE_SERVER_FOLLOW), + asyncMiddleware(getFollowerValidator), + acceptOrRejectFollowerValidator, + asyncMiddleware(removeOrRejectFollower) +) + +serverFollowsRouter.post('/followers/:nameWithHost/accept', + authenticate, + ensureUserHasRight(UserRight.MANAGE_SERVER_FOLLOW), + asyncMiddleware(getFollowerValidator), + acceptOrRejectFollowerValidator, + asyncMiddleware(acceptFollower) ) // --------------------------------------------------------------------------- @@ -136,7 +153,7 @@ async function removeFollowing (req: express.Request, res: express.Response) { return res.status(204).end() } -async function removeFollower (req: express.Request, res: express.Response) { +async function removeOrRejectFollower (req: express.Request, res: express.Response) { const follow = res.locals.follow await sendReject(follow.ActorFollower, follow.ActorFollowing) @@ -145,3 +162,14 @@ async function removeFollower (req: express.Request, res: express.Response) { return res.status(204).end() } + +async function acceptFollower (req: express.Request, res: express.Response) { + const follow = res.locals.follow + + await sendAccept(follow) + + follow.state = 'accepted' + await follow.save() + + return res.status(204).end() +} -- cgit v1.2.3