HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: /var/www/api.javaapp.co.uk/node_modules/node-input-validator/lib/rules/mime.js
/* eslint-disable no-console */
const mime = require('mime-types');
const fileType = require('file-type');
const readChunk = require('read-chunk');

module.exports = async function validateMime({ value, args }) {
  const file = value;

  let success = true;

  let mtype;

  if (file.mime) {
    mtype = file.mime;
  } else if (file.type) {
    mtype = file.type;
  } else if (file.mimetype) {
    mtype = file.mimetype;
  } else if (file instanceof Buffer) {
    try {
      mtype = (await fileType.fromBuffer(file)).mime;
    } catch (e) {
      /* istanbul ignore next */
      console.error(e);
    }
  } else if (file.buffer && file.buffer instanceof Buffer) {
    try {
      mtype = (await fileType.fromBuffer(file.buffer)).mime;
    } catch (e) {
      /* istanbul ignore next */
      console.error(e);
    }
  } else if (typeof file === 'string') {
    try {
      const buffer = await readChunk(file, 0, 4100);
      mtype = (await fileType.fromBuffer(buffer)).mime;
    } catch (e) {
      /* istanbul ignore next */
      console.error(e);
    }
  } else if (file.path && typeof file.path === 'string') {
    try {
      const buffer = await readChunk(file.path, 0, 4100);
      mtype = (await fileType.fromBuffer(buffer)).mime;
    } catch (e) {
      /* istanbul ignore next */
      console.error(e);
    }
  } else {
    throw new Error('MIME rule only accepts Buffer,file path or type/mime property in file object.');
  }

  for (let i = 0; i < args.length; ++i) {
    if (mime.lookup(args[i]) !== mtype) {
      success = false;
    } else {
      success = true;
      break;
    }
  }
  // } else {
  //     if (mime.lookup(args) !== mtype) {
  //         success = false;
  //     }
  // }

  if (!success) {
    return false;
  }

  return true;
};