OpenVeo Core server

API Docs for: 7.0.0
Show:

File: app/server/controllers/DefaultController.js

'use strict';

/**
 * @module core-controllers
 */

var util = require('util');
var openVeoApi = require('@openveo/api');
var storage = process.require('app/server/storage.js');
var Controller = openVeoApi.controllers.Controller;

var env = (process.env.NODE_ENV == 'production') ? 'prod' : 'dev';

/**
 * Defines a controller to handle request relative to AngularJS single page application.
 *
 * @class DefaultController
 * @extends Controller
 * @constructor
 */
function DefaultController() {
  DefaultController.super_.call(this);
}

module.exports = DefaultController;
util.inherits(DefaultController, Controller);

/**
 * Handles back office default action to display main HTML.
 *
 * If no other action were performed display the main back
 * office template.
 * Configuration files of the openveo plugin and openveo sub plugins
 * are used to retrieve the list of files to load within the template.
 * JavaScript libraries, JavaScript files and CSS files.
 *
 * @method defaultAction
 * @param {Request} request ExpressJS HTTP Request
 * @param {Response} response ExpressJS HTTP Response
 * @param {Function} next Function to defer execution to the next registered middleware
 */
DefaultController.prototype.defaultAction = function(request, response) {

  // Retrieve openveo sub plugins
  var plugins = process.api.getPlugins();
  var angularJsModules = [];
  var authConf = storage.getConfiguration().auth;
  var configuredAuth = (authConf && Object.keys(authConf)) || [];
  configuredAuth.push(openVeoApi.passport.STRATEGIES.LOCAL);

  response.locals.librariesScripts = [];
  response.locals.scripts = [];
  response.locals.css = [];
  response.locals.version = [];

  // Got sub plugins
  if (plugins) {
    plugins.forEach(function(plugin) {

      // Plugin has a name and has a back office page configured.
      // It must have an angularjs module associated to it
      if (plugin.name && plugin.menu && plugin.name !== 'core') {

        // Convert plugin name to camel case

        var nameChunks = plugin.name.split('-');
        var pluginName = '';

        for (var i = 0; i < nameChunks.length; i++)
          pluginName += (i === 0) ? nameChunks[i] : nameChunks[i].charAt(0).toUpperCase() + nameChunks[i].slice(1);

        angularJsModules.push('"' + pluginName + '"');
      }

      // Plugin has JavaScript libraries files to load
      if (plugin['scriptLibFiles'] && util.isArray(plugin['scriptLibFiles']['base']))
        response.locals.librariesScripts = response.locals.librariesScripts.concat(plugin['scriptLibFiles']['base']);
      if (plugin['scriptLibFiles'] && util.isArray(plugin['scriptLibFiles'][env]))
        response.locals.librariesScripts = response.locals.librariesScripts.concat(plugin['scriptLibFiles'][env]);

      // Plugin has JavaScript files to load
      // Load files before main plugin JavaScript files
      if (plugin['scriptFiles'] && util.isArray(plugin['scriptFiles']['base']))
        response.locals.scripts = plugin['scriptFiles']['base'].concat(response.locals.scripts);
      if (plugin['scriptFiles'] && util.isArray(plugin['scriptFiles'][env]))
        response.locals.scripts = plugin['scriptFiles'][env].concat(response.locals.scripts);

      // Plugin has CSS files to load
      if (plugin['cssFiles'] && util.isArray(plugin['cssFiles']))
        response.locals.css = response.locals.css.concat(plugin['cssFiles']);

      // Plugin version
      if (plugin['version'] && plugin['version'])
        response.locals.version.push(plugin['version']);
    });
  }

  response.locals.user = request.isAuthenticated() ? JSON.stringify(request.user) : JSON.stringify(null);
  response.locals.authenticationMechanisms = JSON.stringify(configuredAuth);
  response.locals.authenticationStrategies = JSON.stringify(openVeoApi.passport.STRATEGIES);
  response.locals.version = JSON.stringify(response.locals.version);
  response.locals.socketServerPort = storage.getServerConfiguration().browserSocketPort;
  response.locals.angularJsModules = angularJsModules.join(',');
  response.locals.anonymousId = storage.getConfiguration().anonymousId;
  response.locals.superAdminId = storage.getConfiguration().superAdminId;
  response.render('root', response.locals);

};