]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Allow webp image uploads
authorChocobozzz <me@florianbigard.com>
Tue, 26 Jan 2021 09:23:21 +0000 (10:23 +0100)
committerChocobozzz <me@florianbigard.com>
Tue, 26 Jan 2021 09:29:57 +0000 (10:29 +0100)
server/controllers/api/users/me.ts
server/controllers/api/video-channel.ts
server/initializers/constants.ts
server/lib/avatar.ts

index c4e8d8130456b81c2d9e51bd52488cedff210c1d..5a3e9e51a3a63c5179370d42333c1888646e6307 100644 (file)
@@ -11,7 +11,7 @@ import { CONFIG } from '../../../initializers/config'
 import { MIMETYPES } from '../../../initializers/constants'
 import { sequelizeTypescript } from '../../../initializers/database'
 import { sendUpdateActor } from '../../../lib/activitypub/send'
-import { deleteActorAvatarFile, updateActorAvatarFile } from '../../../lib/avatar'
+import { deleteLocalActorAvatarFile, updateLocalActorAvatarFile } from '../../../lib/avatar'
 import { getOriginalVideoFileTotalDailyFromUser, getOriginalVideoFileTotalFromUser, sendVerifyUserEmail } from '../../../lib/user'
 import {
   asyncMiddleware,
@@ -238,7 +238,7 @@ async function updateMyAvatar (req: express.Request, res: express.Response) {
 
   const userAccount = await AccountModel.load(user.Account.id)
 
-  const avatar = await updateActorAvatarFile(userAccount, avatarPhysicalFile)
+  const avatar = await updateLocalActorAvatarFile(userAccount, avatarPhysicalFile)
 
   return res.json({ avatar: avatar.toFormattedJSON() })
 }
@@ -247,7 +247,7 @@ async function deleteMyAvatar (req: express.Request, res: express.Response) {
   const user = res.locals.oauth.token.user
 
   const userAccount = await AccountModel.load(user.Account.id)
-  await deleteActorAvatarFile(userAccount)
+  await deleteLocalActorAvatarFile(userAccount)
 
   return res.sendStatus(HttpStatusCode.NO_CONTENT_204)
 }
index 7ac01b0efe6bb139686c833971018aa3d1ce35c4..14bd64730fa05c8a197dbb8759f6cb627c34a805 100644 (file)
@@ -13,7 +13,7 @@ import { MIMETYPES } from '../../initializers/constants'
 import { sequelizeTypescript } from '../../initializers/database'
 import { setAsyncActorKeys } from '../../lib/activitypub/actor'
 import { sendUpdateActor } from '../../lib/activitypub/send'
-import { deleteActorAvatarFile, updateActorAvatarFile } from '../../lib/avatar'
+import { deleteLocalActorAvatarFile, updateLocalActorAvatarFile } from '../../lib/avatar'
 import { JobQueue } from '../../lib/job-queue'
 import { createLocalVideoChannel, federateAllVideosOfChannel } from '../../lib/video-channel'
 import {
@@ -140,7 +140,7 @@ async function updateVideoChannelAvatar (req: express.Request, res: express.Resp
   const videoChannel = res.locals.videoChannel
   const oldVideoChannelAuditKeys = new VideoChannelAuditView(videoChannel.toFormattedJSON())
 
-  const avatar = await updateActorAvatarFile(videoChannel, avatarPhysicalFile)
+  const avatar = await updateLocalActorAvatarFile(videoChannel, avatarPhysicalFile)
 
   auditLogger.update(getAuditIdFromRes(res), new VideoChannelAuditView(videoChannel.toFormattedJSON()), oldVideoChannelAuditKeys)
 
@@ -154,7 +154,7 @@ async function updateVideoChannelAvatar (req: express.Request, res: express.Resp
 async function deleteVideoChannelAvatar (req: express.Request, res: express.Response) {
   const videoChannel = res.locals.videoChannel
 
-  await deleteActorAvatarFile(videoChannel)
+  await deleteLocalActorAvatarFile(videoChannel)
 
   return res.sendStatus(HttpStatusCode.NO_CONTENT_204)
 }
index 453ca02ed7ff2496129012f6528dfec8abc108e2..c06eb6fb06c0ca05f4a63961fb59c70ccce43989 100644 (file)
@@ -264,7 +264,7 @@ const CONSTRAINTS_FIELDS = {
     DESCRIPTION: { min: 3, max: 10000 }, // Length
     SUPPORT: { min: 3, max: 1000 }, // Length
     IMAGE: {
-      EXTNAME: [ '.jpg', '.jpeg' ],
+      EXTNAME: [ '.png', '.jpg', '.jpeg', '.webp' ],
       FILE_SIZE: {
         max: 2 * 1024 * 1024 // 2MB
       }
@@ -298,7 +298,7 @@ const CONSTRAINTS_FIELDS = {
     PRIVATE_KEY: { min: 10, max: 5000 }, // Length
     URL: { min: 3, max: 2000 }, // Length
     AVATAR: {
-      EXTNAME: [ '.png', '.jpeg', '.jpg', '.gif' ],
+      EXTNAME: [ '.png', '.jpeg', '.jpg', '.gif', '.webp' ],
       FILE_SIZE: {
         max: 2 * 1024 * 1024 // 2MB
       }
index 9d59a496648eacbc18fdb9d18fc5b75b97974e0d..e79cd15466cf9cf685963474504938299496a003 100644 (file)
@@ -13,11 +13,12 @@ import { queue } from 'async'
 import { downloadImage } from '../helpers/requests'
 import { MAccountDefault, MChannelDefault } from '../types/models'
 
-async function updateActorAvatarFile (
+async function updateLocalActorAvatarFile (
   accountOrChannel: MAccountDefault | MChannelDefault,
   avatarPhysicalFile: Express.Multer.File
 ) {
   const extension = extname(avatarPhysicalFile.filename)
+
   const avatarName = uuidv4() + extension
   const destination = join(CONFIG.STORAGE.AVATARS_DIR, avatarName)
   await processImage(avatarPhysicalFile.path, destination, AVATARS_SIZE)
@@ -40,7 +41,7 @@ async function updateActorAvatarFile (
   })
 }
 
-async function deleteActorAvatarFile (
+async function deleteLocalActorAvatarFile (
   accountOrChannel: MAccountDefault | MChannelDefault
 ) {
   return retryTransactionWrapper(() => {
@@ -78,7 +79,7 @@ const avatarPathUnsafeCache = new LRUCache<string, string>({ max: LRU_CACHE.AVAT
 
 export {
   avatarPathUnsafeCache,
-  updateActorAvatarFile,
-  deleteActorAvatarFile,
+  updateLocalActorAvatarFile,
+  deleteLocalActorAvatarFile,
   pushAvatarProcessInQueue
 }