From 75ba887d10eacb9cd1392e62f68617c7643c9add Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 29 Jan 2020 15:17:42 +0100 Subject: [PATCH] Don't log error on actor delete signature error --- server/controllers/activitypub/client.ts | 12 ++++++------ server/controllers/activitypub/inbox.ts | 2 +- server/middlewares/activitypub.ts | 11 +++++++++-- server/middlewares/validators/videos/video-rates.ts | 4 ++-- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/server/controllers/activitypub/client.ts b/server/controllers/activitypub/client.ts index 62412cd62..95c2a26a6 100644 --- a/server/controllers/activitypub/client.ts +++ b/server/controllers/activitypub/client.ts @@ -14,7 +14,7 @@ import { videosCustomGetValidator, videosShareValidator } from '../../middlewares' -import { getAccountVideoRateValidator, videoCommentGetValidator } from '../../middlewares/validators' +import { getAccountVideoRateValidatorFactory, videoCommentGetValidator } from '../../middlewares/validators' import { AccountModel } from '../../models/account/account' import { ActorFollowModel } from '../../models/activitypub/actor-follow' import { VideoModel } from '../../models/video/video' @@ -63,13 +63,13 @@ activityPubClientRouter.get('/accounts?/:name/playlists', ) activityPubClientRouter.get('/accounts?/:name/likes/:videoId', executeIfActivityPub, - asyncMiddleware(getAccountVideoRateValidator('like')), - getAccountVideoRate('like') + asyncMiddleware(getAccountVideoRateValidatorFactory('like')), + getAccountVideoRateFactory('like') ) activityPubClientRouter.get('/accounts?/:name/dislikes/:videoId', executeIfActivityPub, - asyncMiddleware(getAccountVideoRateValidator('dislike')), - getAccountVideoRate('dislike') + asyncMiddleware(getAccountVideoRateValidatorFactory('dislike')), + getAccountVideoRateFactory('dislike') ) activityPubClientRouter.get('/videos/watch/:id', @@ -192,7 +192,7 @@ async function accountPlaylistsController (req: express.Request, res: express.Re return activityPubResponse(activityPubContextify(activityPubResult), res) } -function getAccountVideoRate (rateType: VideoRateType) { +function getAccountVideoRateFactory (rateType: VideoRateType) { return (req: express.Request, res: express.Response) => { const accountVideoRate = res.locals.accountVideoRate diff --git a/server/controllers/activitypub/inbox.ts b/server/controllers/activitypub/inbox.ts index ca42106b8..4fb180003 100644 --- a/server/controllers/activitypub/inbox.ts +++ b/server/controllers/activitypub/inbox.ts @@ -50,7 +50,7 @@ const inboxQueue = queue((task, cb) => { function inboxController (req: express.Request, res: express.Response) { const rootActivity: RootActivity = req.body - let activities: Activity[] = [] + let activities: Activity[] if ([ 'Collection', 'CollectionPage' ].indexOf(rootActivity.type) !== -1) { activities = (rootActivity as ActivityPubCollection).items diff --git a/server/middlewares/activitypub.ts b/server/middlewares/activitypub.ts index c906e785c..f3feae41e 100644 --- a/server/middlewares/activitypub.ts +++ b/server/middlewares/activitypub.ts @@ -1,10 +1,11 @@ import { NextFunction, Request, Response } from 'express' -import { ActivityPubSignature } from '../../shared' +import { ActivityDelete, ActivityPubSignature } from '../../shared' import { logger } from '../helpers/logger' import { isHTTPSignatureVerified, isJsonLDSignatureVerified, parseHTTPSignature } from '../helpers/peertube-crypto' import { ACCEPT_HEADERS, ACTIVITY_PUB, HTTP_SIGNATURE } from '../initializers/constants' import { getOrCreateActorAndServerAndModel } from '../lib/activitypub' import { loadActorUrlOrGetFromWebfinger } from '../helpers/webfinger' +import { isActorDeleteActivityValid } from '@server/helpers/custom-validators/activitypub/actor' async function checkSignature (req: Request, res: Response, next: NextFunction) { try { @@ -23,7 +24,13 @@ async function checkSignature (req: Request, res: Response, next: NextFunction) return next() } catch (err) { - logger.warn('Error in ActivityPub signature checker.', err) + const activity: ActivityDelete = req.body + if (isActorDeleteActivityValid(activity) && activity.object === activity.actor) { + logger.debug('Handling signature error on actor delete activity', { err }) + return res.sendStatus(204) + } + + logger.warn('Error in ActivityPub signature checker.', { err }) return res.sendStatus(403) } } diff --git a/server/middlewares/validators/videos/video-rates.ts b/server/middlewares/validators/videos/video-rates.ts index 4021cfecc..5d5fae8aa 100644 --- a/server/middlewares/validators/videos/video-rates.ts +++ b/server/middlewares/validators/videos/video-rates.ts @@ -24,7 +24,7 @@ const videoUpdateRateValidator = [ } ] -const getAccountVideoRateValidator = function (rateType: VideoRateType) { +const getAccountVideoRateValidatorFactory = function (rateType: VideoRateType) { return [ param('name').custom(isAccountNameValid).withMessage('Should have a valid account name'), param('videoId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid videoId'), @@ -64,6 +64,6 @@ const videoRatingValidator = [ export { videoUpdateRateValidator, - getAccountVideoRateValidator, + getAccountVideoRateValidatorFactory, videoRatingValidator } -- 2.25.1