diff options
Diffstat (limited to 'server/controllers/api/users.ts')
-rw-r--r-- | server/controllers/api/users.ts | 34 |
1 files changed, 7 insertions, 27 deletions
diff --git a/server/controllers/api/users.ts b/server/controllers/api/users.ts index 891056912..c80f27a23 100644 --- a/server/controllers/api/users.ts +++ b/server/controllers/api/users.ts | |||
@@ -1,14 +1,10 @@ | |||
1 | import * as express from 'express' | 1 | import * as express from 'express' |
2 | import 'multer' | 2 | import 'multer' |
3 | import { extname, join } from 'path' | ||
4 | import * as uuidv4 from 'uuid/v4' | ||
5 | import * as RateLimit from 'express-rate-limit' | 3 | import * as RateLimit from 'express-rate-limit' |
6 | import { UserCreate, UserRight, UserRole, UserUpdate, UserUpdateMe, UserVideoRate as FormattedUserVideoRate } from '../../../shared' | 4 | import { UserCreate, UserRight, UserRole, UserUpdate, UserUpdateMe, UserVideoRate as FormattedUserVideoRate } from '../../../shared' |
7 | import { processImage } from '../../helpers/image-utils' | ||
8 | import { logger } from '../../helpers/logger' | 5 | import { logger } from '../../helpers/logger' |
9 | import { getFormattedObjects } from '../../helpers/utils' | 6 | import { getFormattedObjects } from '../../helpers/utils' |
10 | import { AVATARS_SIZE, CONFIG, IMAGE_MIMETYPE_EXT, RATES_LIMIT, sequelizeTypescript } from '../../initializers' | 7 | import { CONFIG, IMAGE_MIMETYPE_EXT, RATES_LIMIT, sequelizeTypescript } from '../../initializers' |
11 | import { updateActorAvatarInstance } from '../../lib/activitypub' | ||
12 | import { sendUpdateActor } from '../../lib/activitypub/send' | 8 | import { sendUpdateActor } from '../../lib/activitypub/send' |
13 | import { Emailer } from '../../lib/emailer' | 9 | import { Emailer } from '../../lib/emailer' |
14 | import { Redis } from '../../lib/redis' | 10 | import { Redis } from '../../lib/redis' |
@@ -33,12 +29,7 @@ import { | |||
33 | usersUpdateValidator, | 29 | usersUpdateValidator, |
34 | usersVideoRatingValidator | 30 | usersVideoRatingValidator |
35 | } from '../../middlewares' | 31 | } from '../../middlewares' |
36 | import { | 32 | import { usersAskResetPasswordValidator, usersResetPasswordValidator, videosSortValidator } from '../../middlewares/validators' |
37 | usersAskResetPasswordValidator, | ||
38 | usersResetPasswordValidator, | ||
39 | usersUpdateMyAvatarValidator, | ||
40 | videosSortValidator | ||
41 | } from '../../middlewares/validators' | ||
42 | import { AccountVideoRateModel } from '../../models/account/account-video-rate' | 33 | import { AccountVideoRateModel } from '../../models/account/account-video-rate' |
43 | import { UserModel } from '../../models/account/user' | 34 | import { UserModel } from '../../models/account/user' |
44 | import { OAuthTokenModel } from '../../models/oauth/oauth-token' | 35 | import { OAuthTokenModel } from '../../models/oauth/oauth-token' |
@@ -46,6 +37,8 @@ import { VideoModel } from '../../models/video/video' | |||
46 | import { VideoSortField } from '../../../client/src/app/shared/video/sort-field.type' | 37 | import { VideoSortField } from '../../../client/src/app/shared/video/sort-field.type' |
47 | import { createReqFiles } from '../../helpers/express-utils' | 38 | import { createReqFiles } from '../../helpers/express-utils' |
48 | import { UserVideoQuota } from '../../../shared/models/users/user-video-quota.model' | 39 | import { UserVideoQuota } from '../../../shared/models/users/user-video-quota.model' |
40 | import { updateAvatarValidator } from '../../middlewares/validators/avatar' | ||
41 | import { updateActorAvatarFile } from '../../lib/avatar' | ||
49 | 42 | ||
50 | const reqAvatarFile = createReqFiles([ 'avatarfile' ], IMAGE_MIMETYPE_EXT, { avatarfile: CONFIG.STORAGE.AVATARS_DIR }) | 43 | const reqAvatarFile = createReqFiles([ 'avatarfile' ], IMAGE_MIMETYPE_EXT, { avatarfile: CONFIG.STORAGE.AVATARS_DIR }) |
51 | const loginRateLimiter = new RateLimit({ | 44 | const loginRateLimiter = new RateLimit({ |
@@ -121,7 +114,7 @@ usersRouter.put('/me', | |||
121 | usersRouter.post('/me/avatar/pick', | 114 | usersRouter.post('/me/avatar/pick', |
122 | authenticate, | 115 | authenticate, |
123 | reqAvatarFile, | 116 | reqAvatarFile, |
124 | usersUpdateMyAvatarValidator, | 117 | updateAvatarValidator, |
125 | asyncMiddleware(updateMyAvatar) | 118 | asyncMiddleware(updateMyAvatar) |
126 | ) | 119 | ) |
127 | 120 | ||
@@ -304,22 +297,9 @@ async function updateMe (req: express.Request, res: express.Response, next: expr | |||
304 | 297 | ||
305 | async function updateMyAvatar (req: express.Request, res: express.Response, next: express.NextFunction) { | 298 | async function updateMyAvatar (req: express.Request, res: express.Response, next: express.NextFunction) { |
306 | const avatarPhysicalFile = req.files[ 'avatarfile' ][ 0 ] | 299 | const avatarPhysicalFile = req.files[ 'avatarfile' ][ 0 ] |
307 | const user = res.locals.oauth.token.user | 300 | const account = res.locals.oauth.token.user.Account |
308 | const actor = user.Account.Actor | ||
309 | |||
310 | const extension = extname(avatarPhysicalFile.filename) | ||
311 | const avatarName = uuidv4() + extension | ||
312 | const destination = join(CONFIG.STORAGE.AVATARS_DIR, avatarName) | ||
313 | await processImage(avatarPhysicalFile, destination, AVATARS_SIZE) | ||
314 | |||
315 | const avatar = await sequelizeTypescript.transaction(async t => { | ||
316 | const updatedActor = await updateActorAvatarInstance(actor, avatarName, t) | ||
317 | await updatedActor.save({ transaction: t }) | ||
318 | 301 | ||
319 | await sendUpdateActor(user.Account, t) | 302 | const avatar = await updateActorAvatarFile(avatarPhysicalFile, account.Actor, account) |
320 | |||
321 | return updatedActor.Avatar | ||
322 | }) | ||
323 | 303 | ||
324 | return res | 304 | return res |
325 | .json({ | 305 | .json({ |