X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fusers%2Fme.ts;h=595abcf959bd9ca4dcda8309cac27c3967d96161;hb=d3d3deaa7aae49d6d949aebcba015af75d292ccc;hp=a609abaa6a4762afc9643455dd86e611a50db08e;hpb=35f676e5d3e5e242e84ed63da2cc78117079c7cb;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/users/me.ts b/server/controllers/api/users/me.ts index a609abaa6..595abcf95 100644 --- a/server/controllers/api/users/me.ts +++ b/server/controllers/api/users/me.ts @@ -1,17 +1,18 @@ import 'multer' -import * as express from 'express' +import express from 'express' import { auditLoggerFactory, getAuditIdFromRes, UserAuditView } from '@server/helpers/audit-logger' +import { getBiggestActorImage } from '@server/lib/actor-image' import { Hooks } from '@server/lib/plugins/hooks' -import { ActorImageType, UserUpdateMe, UserVideoRate as FormattedUserVideoRate } from '../../../../shared' -import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' -import { UserVideoQuota } from '../../../../shared/models/users/user-video-quota.model' +import { pick } from '@shared/core-utils' +import { ActorImageType, HttpStatusCode, UserUpdateMe, UserVideoQuota, UserVideoRate as FormattedUserVideoRate } from '@shared/models' +import { AttributesOnly } from '@shared/typescript-utils' import { createReqFiles } from '../../../helpers/express-utils' import { getFormattedObjects } from '../../../helpers/utils' import { CONFIG } from '../../../initializers/config' import { MIMETYPES } from '../../../initializers/constants' import { sequelizeTypescript } from '../../../initializers/database' import { sendUpdateActor } from '../../../lib/activitypub/send' -import { deleteLocalActorImageFile, updateLocalActorImageFile } from '../../../lib/actor-image' +import { deleteLocalActorImageFile, updateLocalActorImageFiles } from '../../../lib/local-actor' import { getOriginalVideoFileTotalDailyFromUser, getOriginalVideoFileTotalFromUser, sendVerifyUserEmail } from '../../../lib/user' import { asyncMiddleware, @@ -24,18 +25,17 @@ import { usersUpdateMeValidator, usersVideoRatingValidator } from '../../../middlewares' -import { deleteMeValidator, videoImportsSortValidator, videosSortValidator } from '../../../middlewares/validators' +import { deleteMeValidator, usersVideosValidator, videoImportsSortValidator, videosSortValidator } from '../../../middlewares/validators' import { updateAvatarValidator } from '../../../middlewares/validators/actor-image' import { AccountModel } from '../../../models/account/account' import { AccountVideoRateModel } from '../../../models/account/account-video-rate' import { UserModel } from '../../../models/user/user' import { VideoModel } from '../../../models/video/video' import { VideoImportModel } from '../../../models/video/video-import' -import { AttributesOnly } from '@shared/core-utils' const auditLogger = auditLoggerFactory('users') -const reqAvatarFile = createReqFiles([ 'avatarfile' ], MIMETYPES.IMAGE.MIMETYPE_EXT, { avatarfile: CONFIG.STORAGE.TMP_DIR }) +const reqAvatarFile = createReqFiles([ 'avatarfile' ], MIMETYPES.IMAGE.MIMETYPE_EXT) const meRouter = express.Router() @@ -69,6 +69,7 @@ meRouter.get('/me/videos', videosSortValidator, setDefaultVideosSort, setDefaultPagination, + asyncMiddleware(usersVideosValidator), asyncMiddleware(getUserVideos) ) @@ -113,6 +114,7 @@ async function getUserVideos (req: express.Request, res: express.Response) { count: req.query.count, sort: req.query.sort, search: req.query.search, + channelId: res.locals.videoChannel?.id, isLive: req.query.isLive }, 'filter:api.user.me.videos.list.params') @@ -133,12 +135,11 @@ async function getUserVideos (req: express.Request, res: express.Response) { 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, - req.query.count as number, - req.query.sort - ) + const resultList = await VideoImportModel.listUserVideoImportsForApi({ + userId: user.id, + + ...pick(req.query, [ 'targetUrl', 'start', 'count', 'sort' ]) + }) return res.json(getFormattedObjects(resultList.data, resultList.total)) } @@ -183,7 +184,7 @@ async function deleteMe (req: express.Request, res: express.Response) { await user.destroy() - return res.sendStatus(HttpStatusCode.NO_CONTENT_204) + return res.status(HttpStatusCode.NO_CONTENT_204).end() } async function updateMe (req: express.Request, res: express.Response) { @@ -195,7 +196,7 @@ async function updateMe (req: express.Request, res: express.Response) { const keysToUpdate: (keyof UserUpdateMe & keyof AttributesOnly)[] = [ 'password', 'nsfwPolicy', - 'webTorrentEnabled', + 'p2pEnabled', 'autoPlayVideo', 'autoPlayNextVideo', 'autoPlayNextVideoPlaylist', @@ -203,6 +204,7 @@ async function updateMe (req: express.Request, res: express.Response) { 'videoLanguages', 'theme', 'noInstanceConfigWarningModal', + 'noAccountSetupWarningModal', 'noWelcomeModal' ] @@ -210,6 +212,12 @@ async function updateMe (req: express.Request, res: express.Response) { if (body[key] !== undefined) user.set(key, body[key]) } + if (body.p2pEnabled !== undefined) { + user.set('p2pEnabled', body.p2pEnabled) + } else if (body.webTorrentEnabled !== undefined) { // FIXME: deprecated in 4.1 + user.set('p2pEnabled', body.webTorrentEnabled) + } + if (body.email !== undefined) { if (CONFIG.SIGNUP.REQUIRES_EMAIL_VERIFICATION) { user.pendingEmail = body.email @@ -237,7 +245,7 @@ async function updateMe (req: express.Request, res: express.Response) { await sendVerifyUserEmail(user, true) } - return res.sendStatus(HttpStatusCode.NO_CONTENT_204) + return res.status(HttpStatusCode.NO_CONTENT_204).end() } async function updateMyAvatar (req: express.Request, res: express.Response) { @@ -246,9 +254,17 @@ async function updateMyAvatar (req: express.Request, res: express.Response) { const userAccount = await AccountModel.load(user.Account.id) - const avatar = await updateLocalActorImageFile(userAccount, avatarPhysicalFile, ActorImageType.AVATAR) + const avatars = await updateLocalActorImageFiles( + userAccount, + avatarPhysicalFile, + ActorImageType.AVATAR + ) - return res.json({ avatar: avatar.toFormattedJSON() }) + return res.json({ + // TODO: remove, deprecated in 4.2 + avatar: getBiggestActorImage(avatars).toFormattedJSON(), + avatars: avatars.map(avatar => avatar.toFormattedJSON()) + }) } async function deleteMyAvatar (req: express.Request, res: express.Response) { @@ -257,5 +273,5 @@ async function deleteMyAvatar (req: express.Request, res: express.Response) { const userAccount = await AccountModel.load(user.Account.id) await deleteLocalActorImageFile(userAccount, ActorImageType.AVATAR) - return res.sendStatus(HttpStatusCode.NO_CONTENT_204) + return res.json({ avatars: [] }) }