X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fusers%2Fmy-subscriptions.ts;h=66b33c477f0ddd2f57b5ccd3bdc56b04f75db6e5;hb=adc1f09c0dbd997f34028c1c82d1c118dc8ead80;hp=43c4c37d84b1ae08f8bdc6da21928268dd6809e2;hpb=fe98765624cdd6695739bda719fcb726b71c2b2a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/users/my-subscriptions.ts b/server/controllers/api/users/my-subscriptions.ts index 43c4c37d8..66b33c477 100644 --- a/server/controllers/api/users/my-subscriptions.ts +++ b/server/controllers/api/users/my-subscriptions.ts @@ -1,7 +1,11 @@ -import * as express from 'express' import 'multer' +import * as express from 'express' +import { VideoFilter } from '../../../../shared/models/videos/video-query.type' +import { buildNSFWFilter, getCountVideos } from '../../../helpers/express-utils' import { getFormattedObjects } from '../../../helpers/utils' import { WEBSERVER } from '../../../initializers/constants' +import { sequelizeTypescript } from '../../../initializers/database' +import { JobQueue } from '../../../lib/job-queue' import { asyncMiddleware, asyncRetryTransactionMiddleware, @@ -10,17 +14,19 @@ import { paginationValidator, setDefaultPagination, setDefaultSort, + setDefaultVideosSort, userSubscriptionAddValidator, userSubscriptionGetValidator } from '../../../middlewares' -import { areSubscriptionsExistValidator, userSubscriptionsSortValidator, videosSortValidator } from '../../../middlewares/validators' -import { VideoModel } from '../../../models/video/video' -import { buildNSFWFilter, getCountVideos } from '../../../helpers/express-utils' -import { VideoFilter } from '../../../../shared/models/videos/video-query.type' +import { + areSubscriptionsExistValidator, + userSubscriptionListValidator, + userSubscriptionsSortValidator, + videosSortValidator +} from '../../../middlewares/validators' import { ActorFollowModel } from '../../../models/activitypub/actor-follow' -import { JobQueue } from '../../../lib/job-queue' -import { logger } from '../../../helpers/logger' -import { sequelizeTypescript } from '../../../initializers/database' +import { VideoModel } from '../../../models/video/video' +import { sendUndoFollow } from '@server/lib/activitypub/send' const mySubscriptionsRouter = express.Router() @@ -28,7 +34,7 @@ mySubscriptionsRouter.get('/me/subscriptions/videos', authenticate, paginationValidator, videosSortValidator, - setDefaultSort, + setDefaultVideosSort, setDefaultPagination, commonVideosFiltersValidator, asyncMiddleware(getUserSubscriptionVideos) @@ -46,13 +52,14 @@ mySubscriptionsRouter.get('/me/subscriptions', userSubscriptionsSortValidator, setDefaultSort, setDefaultPagination, + userSubscriptionListValidator, asyncMiddleware(getUserSubscriptions) ) mySubscriptionsRouter.post('/me/subscriptions', authenticate, userSubscriptionAddValidator, - asyncMiddleware(addUserSubscription) + addUserSubscription ) mySubscriptionsRouter.get('/me/subscriptions/:uri', @@ -106,18 +113,18 @@ async function areSubscriptionsExist (req: express.Request, res: express.Respons return res.json(existObject) } -async function addUserSubscription (req: express.Request, res: express.Response) { +function addUserSubscription (req: express.Request, res: express.Response) { const user = res.locals.oauth.token.User const [ name, host ] = req.body.uri.split('@') const payload = { name, host, + assertIsChannel: true, followerActorId: user.Account.Actor.id } JobQueue.Instance.createJob({ type: 'activitypub-follow', payload }) - .catch(err => logger.error('Cannot create follow job for subscription %s.', req.body.uri, err)) return res.status(204).end() } @@ -132,6 +139,8 @@ async function deleteUserSubscription (req: express.Request, res: express.Respon const subscription = res.locals.subscription await sequelizeTypescript.transaction(async t => { + if (subscription.state === 'accepted') await sendUndoFollow(subscription, t) + return subscription.destroy({ transaction: t }) }) @@ -142,7 +151,13 @@ async function getUserSubscriptions (req: express.Request, res: express.Response const user = res.locals.oauth.token.User const actorId = user.Account.Actor.id - const resultList = await ActorFollowModel.listSubscriptionsForApi(actorId, req.query.start, req.query.count, req.query.sort) + const resultList = await ActorFollowModel.listSubscriptionsForApi({ + actorId, + start: req.query.start, + count: req.query.count, + sort: req.query.sort, + search: req.query.search + }) return res.json(getFormattedObjects(resultList.data, resultList.total)) }