diff --git a/keyserver/src/uploads/uploads.js b/keyserver/src/uploads/uploads.js --- a/keyserver/src/uploads/uploads.js +++ b/keyserver/src/uploads/uploads.js @@ -57,6 +57,17 @@ const inputLoop = !!(files.length === 1 && body.loop); + const inputEncryptionKey = + files.length === 1 && body.encryptionKey ? body.encryptionKey : null; + if (inputEncryptionKey && typeof inputEncryptionKey !== 'string') { + throw new ServerError('invalid_parameters'); + } + const inputMimeType = + files.length === 1 && body.mimeType ? body.mimeType : null; + if (inputMimeType && typeof inputMimeType !== 'string') { + throw new ServerError('invalid_parameters'); + } + const validationResults = await Promise.all( files.map(({ buffer, size, originalname }) => validateAndConvert( diff --git a/lib/actions/upload-actions.js b/lib/actions/upload-actions.js --- a/lib/actions/upload-actions.js +++ b/lib/actions/upload-actions.js @@ -13,7 +13,11 @@ abortHandler: (abort: () => void) => void, uploadBlob: UploadBlob, }>; -export type MultimediaUploadExtras = Shape<{ ...Dimensions, loop: boolean }>; +export type MultimediaUploadExtras = Shape<{ + ...Dimensions, + loop: boolean, + encryptionKey?: string, +}>; const uploadMultimedia = ( @@ -38,6 +42,14 @@ if (extras.loop) { stringExtras.loop = '1'; } + if (extras.encryptionKey) { + stringExtras.encryptionKey = extras.encryptionKey; + } + + // also pass MIME type if available + if (multimedia.type && typeof multimedia.type === 'string') { + stringExtras.mimeType = multimedia.type; + } const response = await callServerEndpoint( 'upload_multimedia',