|
@@ -16,10 +16,14 @@ module.exports = (crowi) => {
|
|
|
const addActivity = generateAddActivityMiddleware();
|
|
const addActivity = generateAddActivityMiddleware();
|
|
|
const activityEvent = crowi.event('activity');
|
|
const activityEvent = crowi.event('activity');
|
|
|
|
|
|
|
|
- interface UpdateMimeTypesPayload {
|
|
|
|
|
|
|
+ interface UpdateInlineMimeTypesPayload {
|
|
|
newInlineMimeTypes: string[];
|
|
newInlineMimeTypes: string[];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ interface UpdateAttachmentMimeTypesPayload {
|
|
|
|
|
+ newAttachmentMimeTypes: string[];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* @swagger
|
|
* @swagger
|
|
|
*
|
|
*
|
|
@@ -55,19 +59,41 @@ module.exports = (crowi) => {
|
|
|
async(req, res) => {
|
|
async(req, res) => {
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- const { newInlineMimeTypes } = req.body as UpdateMimeTypesPayload;
|
|
|
|
|
- const inlineMimeTypes = Array.from(new Set(newInlineMimeTypes));
|
|
|
|
|
- await configManager.updateConfigs({ 'attachments:contentDisposition:inlineMimeTypes': { inlineMimeTypes } });
|
|
|
|
|
|
|
+ const { newInlineMimeTypes } = req.body as UpdateInlineMimeTypesPayload;
|
|
|
|
|
+ const { newAttachmentMimeTypes } = req.body as UpdateAttachmentMimeTypesPayload;
|
|
|
|
|
+
|
|
|
|
|
+ // Ensure no MIME type is in both lists.
|
|
|
|
|
+ const inlineSet = new Set(newInlineMimeTypes);
|
|
|
|
|
+ const attachmentSet = new Set(newAttachmentMimeTypes);
|
|
|
|
|
+ const intersection = [...inlineSet].filter(mimeType => attachmentSet.has(mimeType));
|
|
|
|
|
+
|
|
|
|
|
+ if (intersection.length > 0) {
|
|
|
|
|
+ const msg = `MIME types cannot be in both inline and attachment lists: ${intersection.join(', ')}`;
|
|
|
|
|
+ return res.apiv3Err(new ErrorV3(msg, 'invalid-payload'));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ await configManager.updateConfigs({
|
|
|
|
|
+ 'attachments:contentDisposition:inlineMimeTypes': {
|
|
|
|
|
+ inlineMimeTypes: Array.from(inlineSet),
|
|
|
|
|
+ },
|
|
|
|
|
+ 'attachments:contentDisposition:attachmentMimeTypes': {
|
|
|
|
|
+ attachmentMimeTypes: Array.from(attachmentSet),
|
|
|
|
|
+ },
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
const parameters = {
|
|
const parameters = {
|
|
|
action: SupportedAction.ACTION_ADMIN_ATTACHMENT_DISPOSITION_UPDATE,
|
|
action: SupportedAction.ACTION_ADMIN_ATTACHMENT_DISPOSITION_UPDATE,
|
|
|
- currentDispositionSettings: inlineMimeTypes,
|
|
|
|
|
|
|
+ currentDispositionSettings: {
|
|
|
|
|
+ inlineMimeTypes: Array.from(inlineSet),
|
|
|
|
|
+ attachmentMimeTypes: Array.from(attachmentSet),
|
|
|
|
|
+ },
|
|
|
};
|
|
};
|
|
|
activityEvent.emit('update', res.locals.activity._id, parameters);
|
|
activityEvent.emit('update', res.locals.activity._id, parameters);
|
|
|
|
|
|
|
|
return res.apiv3({
|
|
return res.apiv3({
|
|
|
currentDispositionSettings: {
|
|
currentDispositionSettings: {
|
|
|
- inlineMimeTypes,
|
|
|
|
|
|
|
+ inlineMimeTypes: Array.from(inlineSet),
|
|
|
|
|
+ attachmentMimeTypes: Array.from(attachmentSet),
|
|
|
},
|
|
},
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|