Add ability to manually approves instance followers in REST API

This commit is contained in:
Chocobozzz
2019-04-08 15:18:04 +02:00
parent 5b9c965d5a
commit 14893eb71c
16 changed files with 261 additions and 30 deletions

View File

@@ -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
}
}
}

View File

@@ -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()
}