punchcard-cms/punchcard

View on GitHub
lib/content/middleware/index.js

Summary

Maintainability
A
1 hr
Test Coverage
'use strict';

const config = require('config');

const utils = require('./utils');
const rutils = require('../../routes/utils');
const workflows = require('../../workflows/utils');


/**
 * Checking a content url's various parameters
 *
 * @param {object} req - HTTP Request
 * @param {object} res - HTTP Response
 * @param {object} next - Express callback
 *
 * @returns {function} express next function
 */
const url = (req, res, next) => {
  const request = req;
  const err = {
    message: '',
    safe: `/${config.content.base}`,
    status: 404,
  };
  let action;

  // if there are no url parameters or type parameter, we're done checking this url
  if (!request.hasOwnProperty('params') || !request.params.hasOwnProperty('type')) {
    return new Promise((resolve) => {
      resolve(next);
    });
  }

  // get the action route parameter
  if (request.params.hasOwnProperty('id')) {
    action = request.params.id;
  }
  else {
    action = '';
  }

  return utils.type(request).then(typ => {
    request.content.type = typ;

    return workflows.workflow(request.content.type, request.content.workflows).then(workflow => {
      request.content.workflow = workflow;

      return rutils.actions(action).then(() => {
        return utils.revision(request).then(() => {
          return next();
        });
      });
    });
  }).catch(error => {
    err.message = error;

    return next(err);
  });
};

module.exports = url;