var debug = require('debug')('ylt:contentTypeChecker'); var Q = require('q'); var isJpg = require('is-jpg'); var isPng = require('is-png'); var isSvg = require('is-svg'); var isGif = require('is-gif'); var isWoff = require('is-woff'); var isWoff2 = require('is-woff2'); var isOtf = require('is-otf'); var isTtf = require('is-ttf'); var isEot = require('is-eot'); var ContentTypeChecker = function() { function checkContentType(entry) { var deferred = Q.defer(); debug('Entering contentTypeChecker'); // Ignore very small files as they are generally tracking pixels if (entry.weightCheck && entry.weightCheck.body && entry.weightCheck.bodySize > 100) { var foundType; try { foundType = findContentType(entry.weightCheck.body); if (!entry.contentType || entry.contentType === '') { if (foundType === null) { debug('ContentType is empty for file %s', entry.url); } else { debug('ContentType is empty for file %s. It should be %s.', entry.url, foundType.mimes[0]); entry.oldContentType = null; rewriteContentType(entry, foundType); } } else { if (foundType !== null && foundType.mimes.indexOf(entry.contentType) === -1) { debug('ContentType %s is wrong for %s. It should be %s.', entry.contentType, entry.url, foundType.mimes[0]); entry.oldContentType = entry.contentType; rewriteContentType(entry, foundType); } } } catch(err) { debug('Error while analyzing the contentType of %s', entry.url); debug(err); } } deferred.resolve(entry); return deferred.promise; } function findContentType(body) { var buffer = new Buffer(body, 'binary'); if (isJpg(buffer)) { return contentTypes.jpeg; } if (isPng(buffer)) { return contentTypes.png; } // https://github.com/sindresorhus/is-svg/issues/7 if (/