Source: controllers/Users.js

'use strict';

/**
 * API controller for methods mapping.
 * @module controllers/users
 * @license MIT
 * @author Kai KRETSCHMANN <kai@kretschmann.consulting>
 */

const utils = require('../utils/writer.js');
const eventEmitter = require('../utils/eventer').em;
const PackagesService = require('../service/PackagesService');

const log4js = require('log4js');
const logger = log4js.getLogger();
logger.level = process.env.LOGLEVEL || /* istanbul ignore next */ 'warn'; // LCOV_EXCL_LINE
const EVENTNAME = 'apihit';

/**
 * Validate package, store information and return alternatives.
 * @method checkToken
 * @public
 */
module.exports.checkToken = function checkToken (req, res, _next) {
  eventEmitter.emit(EVENTNAME, req);

  logger.debug(req.auth);
  logger.debug(`from=${req.auth.iat}`);
  logger.debug(`to=${req.auth.exp}`);

  const tsfrom = new Date(req.auth.iat * 1000);
  const tsto = new Date(req.auth.exp * 1000);
  const sfrom = tsfrom.toISOString();
  const sto = tsto.toISOString();
  logger.debug(`sfrom=${sfrom}`);
  logger.debug(`sto=${sto}`);

  const payload = {
    name: req.auth.sub,
    tsfrom: sfrom,
    tsto: sto
  };
  logger.debug(payload);
  utils.writeJson(res, payload, 200);
};

/**
 * Validate package, store information and return alternatives.
 * @method validatePackage
 * @public
 */
module.exports.validatePackage = function validatePackage (req, res, _next, packageName, packageVersion, packageArch, packageFamily, packageSubFamily, packageHash) {
  const username = req.auth.sub;

  eventEmitter.emit(EVENTNAME, req);

  logger.debug(`subfamily=${packageSubFamily}`);

  PackagesService.validatePackage(packageName, packageVersion, packageArch, packageFamily, packageSubFamily, packageHash, username)
    .then(function (payload) {
      utils.writeJson(res, payload, 200);
    })
    .catch(function (payload) {
      utils.writeJson(res, payload, 400);
    });
};

/**
 * List package data for arguments matching.
 * @method listPackage
 * @public
 */
module.exports.listPackage = function listPackage (req, res, _next, packageName, packageVersion, packageArch, packageFamily) {
  eventEmitter.emit(EVENTNAME, req);

  PackagesService.listPackage(packageName, packageVersion, packageArch, packageFamily)
    .then(function (payload) {
      utils.writeJson(res, payload, 200);
    })
    .catch(function (payload) {
      utils.writeJson(res, payload, 400);
    });
};

/**
 * List package data for arguments matching.
 * @method listPackageSingle
 * @public
 */
module.exports.listPackageSingle = function listPackage (req, res, _next, id) {
  eventEmitter.emit(EVENTNAME, req);

  PackagesService.listPackageSingle(id)
    .then(function (payload) {
      utils.writeJson(res, payload, 200);
    })
    .catch(function (payload) {
      utils.writeText(res, payload.msg, payload.code);
    });
};

/**
 * List all packages and variations.
 * @method listPackages
 * @public
 */
module.exports.listPackages = function listPackage (req, res, _next, skip, count, sort, direction, age) {
  logger.debug(`listPackages called with ${skip}, ${count}, ${sort}, ${direction}, ${age}`);

  eventEmitter.emit(EVENTNAME, req);

  if (age == null) {
    age = 9999; // might be enough for any
  }

  PackagesService.listPackages(skip, count, sort, direction, age)
    .then(function (payload) {
      utils.writeJson(res, payload, 200);
    })
    .catch(function (payload) {
      utils.writeJson(res, payload, 400);
    });
};

/**
 * List all packages and variations.
 * @method listPagePackages
 * @public
 */
module.exports.listPagePackages = function listPagePackage (req, res, _next, page, size, sorters, filter) {
  logger.debug(`listPagePackages called with ${page}, ${size}, ${sorters}, ${filter}`);

  eventEmitter.emit(EVENTNAME, req);

  PackagesService.listPagePackages(page, size, sorters, filter)
    .then(function (payload) {
      utils.writeJson(res, payload, 200);
    })
    .catch(function (payload) {
      utils.writeJson(res, payload, 400);
    });
};

/**
 * List all packages and variations.
 * @method listPackagesFull
 * @public
 */
module.exports.listPackagesFull = function listPackage (req, res, _next, count) {
  if (!count) {
    count = 100;
  }

  eventEmitter.emit(EVENTNAME, req);

  PackagesService.listPackagesFull(count)
    .then(function (payload) {
      utils.writeJson(res, payload, 200);
    })
    .catch(function (payload) {
      utils.writeJson(res, payload, 400);
    });
};

/**
 * Return total number of package variations.
 * @method countPackage
 * @public
 */
module.exports.countPackage = function countPackage (req, res, _next) {
  eventEmitter.emit(EVENTNAME, req);

  PackagesService.countPackage()
    .then(function (payload) {
      utils.writeJson(res, payload, 200);
    })
    .catch(function (payload) {
      utils.writeJson(res, payload, 400);
    });
};

/**
 * Return health status.
 * @method healthCheck
 * @public
 */
module.exports.healthCheck = function healthCheck (req, res, _next) {
  eventEmitter.emit(EVENTNAME, req);

  PackagesService.healthCheck()
    .then(function (_payload) {
      utils.writeText(res, 'OK', 200);
    })
    .catch(function (payload) {
      utils.writeJson(res, payload, 400);
    });
};

/**
 * Test function for normal rights
 * @method testDefault
 * @public
 */
module.exports.testDefault = function testDefault (req, res, _next) {
  eventEmitter.emit(EVENTNAME, req);
  logger.info(req.openapi.schema.security);

  const payload = {
    message: 'you called default'
  };
  utils.writeJson(res, payload, 200);
};

/**
 * Test function for admin right
 * @method testAdmin
 * @public
 */
module.exports.testAdmin = function testAdmin (req, res, _next) {
  eventEmitter.emit(EVENTNAME, req);
  logger.info(req.openapi.schema.security);

  const payload = {
    message: 'you called admin'
  };
  utils.writeJson(res, payload, 200);
};

/**
 * Return total number of package variations.
 * @method summaryByWhat
 * @public
 */
module.exports.summaryByWhat = function summaryByWhat (req, res, _next, bywhat) {
  eventEmitter.emit(EVENTNAME, req);

  switch (bywhat) {
    case 'arch':
      PackagesService.summaryArch()
        .then(function (payload) {
          utils.writeJson(res, payload, 200);
        })
        .catch(function (payload) {
          utils.writeJson(res, payload, 400);
        });
      break;
    case 'family':
      PackagesService.summaryFamily()
        .then(function (payload) {
          utils.writeJson(res, payload, 200);
        })
        .catch(function (payload) {
          utils.writeJson(res, payload, 400);
        });
      break;
  } // switch
};