X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fusers%2Fme.ts;h=ce9e78463366d9f7e5543678b94a0d3486984bf9;hb=74dc3bca2b14f5fd3fe80c394dfc34177a46db77;hp=f712b0f0b085bfb347ad814ea4558f509981cd02;hpb=14e2014acc1362cfbb770c051a7254b156cd8efb;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/users/me.ts b/server/controllers/api/users/me.ts index f712b0f0b..ce9e78463 100644 --- a/server/controllers/api/users/me.ts +++ b/server/controllers/api/users/me.ts @@ -2,43 +2,32 @@ import * as express from 'express' import 'multer' import { UserUpdateMe, UserVideoRate as FormattedUserVideoRate } from '../../../../shared' import { getFormattedObjects } from '../../../helpers/utils' -import { CONFIG, MIMETYPES, sequelizeTypescript } from '../../../initializers' +import { MIMETYPES } from '../../../initializers/constants' import { sendUpdateActor } from '../../../lib/activitypub/send' import { asyncMiddleware, asyncRetryTransactionMiddleware, authenticate, - commonVideosFiltersValidator, paginationValidator, setDefaultPagination, setDefaultSort, - userSubscriptionAddValidator, - userSubscriptionGetValidator, usersUpdateMeValidator, usersVideoRatingValidator } from '../../../middlewares' -import { - areSubscriptionsExistValidator, - deleteMeValidator, - userSubscriptionsSortValidator, - videoImportsSortValidator, - videosSortValidator -} from '../../../middlewares/validators' +import { deleteMeValidator, videoImportsSortValidator, videosSortValidator } from '../../../middlewares/validators' import { AccountVideoRateModel } from '../../../models/account/account-video-rate' import { UserModel } from '../../../models/account/user' import { VideoModel } from '../../../models/video/video' import { VideoSortField } from '../../../../client/src/app/shared/video/sort-field.type' -import { buildNSFWFilter, createReqFiles } from '../../../helpers/express-utils' +import { createReqFiles } from '../../../helpers/express-utils' import { UserVideoQuota } from '../../../../shared/models/users/user-video-quota.model' import { updateAvatarValidator } from '../../../middlewares/validators/avatar' import { updateActorAvatarFile } from '../../../lib/avatar' import { auditLoggerFactory, getAuditIdFromRes, UserAuditView } from '../../../helpers/audit-logger' import { VideoImportModel } from '../../../models/video/video-import' -import { VideoFilter } from '../../../../shared/models/videos/video-query.type' -import { ActorFollowModel } from '../../../models/activitypub/actor-follow' -import { JobQueue } from '../../../lib/job-queue' -import { logger } from '../../../helpers/logger' import { AccountModel } from '../../../models/account/account' +import { CONFIG } from '../../../initializers/config' +import { sequelizeTypescript } from '../../../initializers/database' const auditLogger = auditLoggerFactory('users-me') @@ -98,51 +87,6 @@ meRouter.post('/me/avatar/pick', asyncRetryTransactionMiddleware(updateMyAvatar) ) -// ##### Subscriptions part ##### - -meRouter.get('/me/subscriptions/videos', - authenticate, - paginationValidator, - videosSortValidator, - setDefaultSort, - setDefaultPagination, - commonVideosFiltersValidator, - asyncMiddleware(getUserSubscriptionVideos) -) - -meRouter.get('/me/subscriptions/exist', - authenticate, - areSubscriptionsExistValidator, - asyncMiddleware(areSubscriptionsExist) -) - -meRouter.get('/me/subscriptions', - authenticate, - paginationValidator, - userSubscriptionsSortValidator, - setDefaultSort, - setDefaultPagination, - asyncMiddleware(getUserSubscriptions) -) - -meRouter.post('/me/subscriptions', - authenticate, - userSubscriptionAddValidator, - asyncMiddleware(addUserSubscription) -) - -meRouter.get('/me/subscriptions/:uri', - authenticate, - userSubscriptionGetValidator, - getUserSubscription -) - -meRouter.delete('/me/subscriptions/:uri', - authenticate, - userSubscriptionGetValidator, - asyncRetryTransactionMiddleware(deleteUserSubscription) -) - // --------------------------------------------------------------------------- export { @@ -151,102 +95,8 @@ export { // --------------------------------------------------------------------------- -async function areSubscriptionsExist (req: express.Request, res: express.Response) { - const uris = req.query.uris as string[] - const user = res.locals.oauth.token.User as UserModel - - const handles = uris.map(u => { - let [ name, host ] = u.split('@') - if (host === CONFIG.WEBSERVER.HOST) host = null - - return { name, host, uri: u } - }) - - const results = await ActorFollowModel.listSubscribedIn(user.Account.Actor.id, handles) - - const existObject: { [id: string ]: boolean } = {} - for (const handle of handles) { - const obj = results.find(r => { - const server = r.ActorFollowing.Server - - return r.ActorFollowing.preferredUsername === handle.name && - ( - (!server && !handle.host) || - (server.host === handle.host) - ) - }) - - existObject[handle.uri] = obj !== undefined - } - - return res.json(existObject) -} - -async function addUserSubscription (req: express.Request, res: express.Response) { - const user = res.locals.oauth.token.User as UserModel - const [ name, host ] = req.body.uri.split('@') - - const payload = { - name, - host, - 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() -} - -function getUserSubscription (req: express.Request, res: express.Response) { - const subscription: ActorFollowModel = res.locals.subscription - - return res.json(subscription.ActorFollowing.VideoChannel.toFormattedJSON()) -} - -async function deleteUserSubscription (req: express.Request, res: express.Response) { - const subscription: ActorFollowModel = res.locals.subscription - - await sequelizeTypescript.transaction(async t => { - return subscription.destroy({ transaction: t }) - }) - - return res.type('json').status(204).end() -} - -async function getUserSubscriptions (req: express.Request, res: express.Response) { - const user = res.locals.oauth.token.User as UserModel - const actorId = user.Account.Actor.id - - const resultList = await ActorFollowModel.listSubscriptionsForApi(actorId, req.query.start, req.query.count, req.query.sort) - - return res.json(getFormattedObjects(resultList.data, resultList.total)) -} - -async function getUserSubscriptionVideos (req: express.Request, res: express.Response, next: express.NextFunction) { - const user = res.locals.oauth.token.User as UserModel - const resultList = await VideoModel.listForApi({ - start: req.query.start, - count: req.query.count, - sort: req.query.sort, - includeLocalVideos: false, - categoryOneOf: req.query.categoryOneOf, - licenceOneOf: req.query.licenceOneOf, - languageOneOf: req.query.languageOneOf, - tagsOneOf: req.query.tagsOneOf, - tagsAllOf: req.query.tagsAllOf, - nsfw: buildNSFWFilter(res, req.query.nsfw), - filter: req.query.filter as VideoFilter, - withFiles: false, - followerActorId: user.Account.Actor.id, - user - }) - - return res.json(getFormattedObjects(resultList.data, resultList.total)) -} - -async function getUserVideos (req: express.Request, res: express.Response, next: express.NextFunction) { - const user = res.locals.oauth.token.User as UserModel +async function getUserVideos (req: express.Request, res: express.Response) { + const user = res.locals.oauth.token.User const resultList = await VideoModel.listUserVideosForApi( user.Account.id, req.query.start as number, @@ -263,8 +113,8 @@ async function getUserVideos (req: express.Request, res: express.Response, next: return res.json(getFormattedObjects(resultList.data, resultList.total, { additionalAttributes })) } -async function getUserVideoImports (req: express.Request, res: express.Response, next: express.NextFunction) { - const user = res.locals.oauth.token.User as UserModel +async function getUserVideoImports (req: express.Request, res: express.Response) { + const user = res.locals.oauth.token.User const resultList = await VideoImportModel.listUserVideoImportsForApi( user.id, req.query.start as number, @@ -275,14 +125,14 @@ async function getUserVideoImports (req: express.Request, res: express.Response, return res.json(getFormattedObjects(resultList.data, resultList.total)) } -async function getUserInformation (req: express.Request, res: express.Response, next: express.NextFunction) { +async function getUserInformation (req: express.Request, res: express.Response) { // We did not load channels in res.locals.user const user = await UserModel.loadByUsernameAndPopulateChannels(res.locals.oauth.token.user.username) return res.json(user.toFormattedJSON()) } -async function getUserVideoQuotaUsed (req: express.Request, res: express.Response, next: express.NextFunction) { +async function getUserVideoQuotaUsed (req: express.Request, res: express.Response) { // We did not load channels in res.locals.user const user = await UserModel.loadByUsernameAndPopulateChannels(res.locals.oauth.token.user.username) const videoQuotaUsed = await UserModel.getOriginalVideoFileTotalFromUser(user) @@ -295,7 +145,7 @@ async function getUserVideoQuotaUsed (req: express.Request, res: express.Respons return res.json(data) } -async function getUserVideoRating (req: express.Request, res: express.Response, next: express.NextFunction) { +async function getUserVideoRating (req: express.Request, res: express.Response) { const videoId = res.locals.video.id const accountId = +res.locals.oauth.token.User.Account.id @@ -310,7 +160,7 @@ async function getUserVideoRating (req: express.Request, res: express.Response, } async function deleteMe (req: express.Request, res: express.Response) { - const user: UserModel = res.locals.oauth.token.User + const user = res.locals.oauth.token.User await user.destroy() @@ -319,10 +169,10 @@ async function deleteMe (req: express.Request, res: express.Response) { return res.sendStatus(204) } -async function updateMe (req: express.Request, res: express.Response, next: express.NextFunction) { +async function updateMe (req: express.Request, res: express.Response) { const body: UserUpdateMe = req.body - const user: UserModel = res.locals.oauth.token.user + const user = res.locals.oauth.token.user const oldUserAuditView = new UserAuditView(user.toFormattedJSON()) if (body.password !== undefined) user.password = body.password @@ -330,6 +180,7 @@ async function updateMe (req: express.Request, res: express.Response, next: expr if (body.nsfwPolicy !== undefined) user.nsfwPolicy = body.nsfwPolicy if (body.webTorrentEnabled !== undefined) user.webTorrentEnabled = body.webTorrentEnabled if (body.autoPlayVideo !== undefined) user.autoPlayVideo = body.autoPlayVideo + if (body.videosHistoryEnabled !== undefined) user.videosHistoryEnabled = body.videosHistoryEnabled await sequelizeTypescript.transaction(async t => { const userAccount = await AccountModel.load(user.Account.id) @@ -350,7 +201,7 @@ async function updateMe (req: express.Request, res: express.Response, next: expr async function updateMyAvatar (req: express.Request, res: express.Response) { const avatarPhysicalFile = req.files[ 'avatarfile' ][ 0 ] - const user: UserModel = res.locals.oauth.token.user + const user = res.locals.oauth.token.user const oldUserAuditView = new UserAuditView(user.toFormattedJSON()) const userAccount = await AccountModel.load(user.Account.id)