Don't log error on actor delete signature error
authorChocobozzz <me@florianbigard.com>
Wed, 29 Jan 2020 14:17:42 +0000 (15:17 +0100)
committerChocobozzz <me@florianbigard.com>
Wed, 29 Jan 2020 14:17:42 +0000 (15:17 +0100)
server/controllers/activitypub/client.ts
server/controllers/activitypub/inbox.ts
server/middlewares/activitypub.ts
server/middlewares/validators/videos/video-rates.ts

index 62412cd6237676ed6d1d0631242f7fbf4902fd5a..95c2a26a68ef61ee8f79810a3858fd5fa7fa5b73 100644 (file)
@@ -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
 
index ca42106b8b27ba19d194b73d3330540cfc3ffeb6..4fb180003a890e280c6ae16740d02817108b776a 100644 (file)
@@ -50,7 +50,7 @@ const inboxQueue = queue<QueueParam, Error>((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
index c906e785c57f7dde1463683684afe0abf33c04de..f3feae41e2edb2fe12ce28a0d587ec4360ee0178 100644 (file)
@@ -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)
   }
 }
index 4021cfecc8f6cddc580fdc0814d6decc690cba90..5d5fae8aabccb8bab724106b22301d3499e465de 100644 (file)
@@ -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
 }