apps/meteor/app/utils/lib/restrictions.ts
export const fileUploadMediaWhiteList = function (customWhiteList: string): string[] | undefined {
const mediaTypeWhiteList = customWhiteList;
if (!mediaTypeWhiteList || mediaTypeWhiteList === '*') {
return;
}
return mediaTypeWhiteList.split(',').map((item) => {
return item.trim();
});
};
const fileUploadMediaBlackList = function (customBlackList: string): string[] | undefined {
const blacklist = customBlackList;
if (!blacklist) {
return;
}
return blacklist.split(',').map((item) => item.trim());
};
const isTypeOnList = function (type?: string, list?: string[]): boolean {
if (!type || !list) {
return false;
}
if (list.includes(type)) {
return true;
}
const wildCardGlob = '/*';
const wildcards = list.filter((item) => {
return item.indexOf(wildCardGlob) > 0;
});
if (wildcards.includes(type.replace(/(\/.*)$/, wildCardGlob))) {
return true;
}
return false;
};
export const fileUploadIsValidContentTypeFromSettings = function (
type: string | undefined,
customWhiteList: string,
customBlackList: string,
): boolean {
const blackList = fileUploadMediaBlackList(customBlackList);
const whiteList = fileUploadMediaWhiteList(customWhiteList);
if (blackList && type && isTypeOnList(type, blackList)) {
return false;
}
if (whiteList) {
return isTypeOnList(type, whiteList);
}
if (!whiteList) {
return true;
}
return false;
};