Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
touchto-core / dist / app.js
Size: Mime:
'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});

var _config = require('config');

var _config2 = _interopRequireDefault(_config);

var _debug = require('debug');

var _debug2 = _interopRequireDefault(_debug);

var _fs = require('fs');

var _fs2 = _interopRequireDefault(_fs);

var _path = require('path');

var _path2 = _interopRequireDefault(_path);

var _express = require('express');

var _express2 = _interopRequireDefault(_express);

var _os = require('os');

var _os2 = _interopRequireDefault(_os);

var _morgan = require('morgan');

var _morgan2 = _interopRequireDefault(_morgan);

var _stylus = require('stylus');

var _stylus2 = _interopRequireDefault(_stylus);

var _nib = require('nib');

var _nib2 = _interopRequireDefault(_nib);

var _connectCoffeeScript = require('connect-coffee-script');

var _connectCoffeeScript2 = _interopRequireDefault(_connectCoffeeScript);

var _routeBuilder = require('./route-builder');

var _routeBuilder2 = _interopRequireDefault(_routeBuilder);

var _nunjucksInit = require('./nunjucks-init');

var _nunjucksInit2 = _interopRequireDefault(_nunjucksInit);

var _swigInit = require('./swig-init');

var _swigInit2 = _interopRequireDefault(_swigInit);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var debug = (0, _debug2.default)('touchto:app'); /* eslint-disable global-require, import/no-dynamic-require, no-console, arrow-body-style */

var basepath = process.cwd();
var tmp = _os2.default.tmpdir();

var app = (0, _express2.default)();

// ************************
// ***** Log requests *****
// ************************

if (app.get('env') === 'development') {
    app.use((0, _morgan2.default)('dev'));
} else {
    app.use((0, _morgan2.default)('combined'));
}

// *****************************
// ***** Get package info ******
// *****************************

var pkg = _fs2.default.readFileSync(_path2.default.resolve(_path2.default.join(basepath, 'package.json')), 'utf-8');
pkg = JSON.parse(pkg);

// *****************************
// ***** CSS Pre-processor *****
// *****************************

var cssTmpPath = pkg.name.replace(/[^a-z0-9]/gi, '') + '\n    _css_\n    ' + pkg.version.replace(/\./g, '-');
cssTmpPath = _path2.default.resolve(tmp, cssTmpPath);

var stylusdefaults = {
    compress: !app.get('env') === 'development',
    // Base64 encode CSS sourcemaps, devtools can read them, sweet!
    sourcemap: app.get('env') === 'development' ? false : { inline: true }
};

app.use('/css', _stylus2.default.middleware({
    src: _path2.default.join(basepath, 'client/styles'),
    dest: cssTmpPath,
    compile: function compile(str, filePath) {
        return (0, _stylus2.default)(str).set('filename', filePath).set('compress', stylusdefaults.compress).set('sourcemap', stylusdefaults.sourcemap).use((0, _nib2.default)());
    }
}));
app.use('/css', _express2.default.static(cssTmpPath));

// ****************************
// ***** Bower Components *****
// ****************************

app.use('/components', _express2.default.static(_path2.default.join(basepath, 'bower_components')));

// ********************************
// ***** Coffee Pre-processor ***** (Hopefully wont be necessary)
// ********************************

var scriptTmpPath = pkg.name.replace(/[^a-z0-9]/gi, '') + '\n    _js_\n    ' + pkg.version.replace(/\./g, '-');
scriptTmpPath = _path2.default.resolve(tmp, scriptTmpPath);

app.use('/js', (0, _connectCoffeeScript2.default)({
    force: true,
    src: _path2.default.join(basepath, 'client/scripts'),
    dest: scriptTmpPath,
    bare: true,
    sourceMap: app.get('env') === 'development',
    sourceMapRoot: '/source'
}));
app.use('/js', _express2.default.static(scriptTmpPath));

if (app.get('env') === 'development') {
    app.use('/source', _express2.default.static(scriptTmpPath));
    app.use('/source', _express2.default.static(_path2.default.join(basepath, 'client/scripts')));
}

app.use('images', _express2.default.static(_path2.default.join(basepath, 'client/images')));

// **********************************
// ******** Template engines ********
// **********************************

// Nunjucks
(0, _nunjucksInit2.default)(app);

// Swig
(0, _swigInit2.default)(app);

// Default to swig when no extension is shown.
app.set('view engine', 'html');

// ********************************
// ******** Access Control ********
// ********************************

var allowed = _config2.default.has('allowed-hosts') ? _config2.default.get('allowed-hosts') : [];
if (allowed.length > 0) {
    var accessControl = require('./access-control');
    app.use(accessControl);
}

// ************************
// ******** Routes ********
// ************************

var routedirs = {};

var routesRestOpen = _path2.default.join(basepath, 'server', 'routes-rest-open');
var routesOpen = _path2.default.join(basepath, 'server', 'routes-open');

try {
    debug('reading for open rest endpoints');
    var stat = _fs2.default.statSync(routesRestOpen);
    if (stat.isDirectory()) routedirs.restopen = true;
} catch (err) {
    debug('Error readig open rest endpoints: ', err);
}

try {
    debug('reading for open endpoints');
    var _stat = _fs2.default.statSync(routesOpen);
    if (_stat.isDirectory()) routedirs.open = true;
} catch (err) {
    debug('Error readig open endpoints: ', err);
}

if (routedirs.restopen) app.use((0, _routeBuilder2.default)({ rest: true }, routesRestOpen));
if (routedirs.open) app.use((0, _routeBuilder2.default)(routesOpen));

// ********************************
// ******** Session Routes ********
// ********************************

if (_config2.default.has('session.enabled') && _config2.default.get('session.enabled') === true) {
    var session = require('./session');

    app.use(session);

    var routesRest = _path2.default.join(basepath, 'server', 'routes-rest');
    var routes = _path2.default.join(basepath, 'server', 'routes');

    try {
        debug('Reading for authed rest endpoints');
        var _stat2 = _fs2.default.statSync(routesRest);
        if (_stat2.isDirectory()) routedirs.rest = true;
    } catch (err) {
        debug('Error readig authed rest endpoints: ', err);
    }

    try {
        debug('Reading for authed endpoints');
        var _stat3 = _fs2.default.statSync(routes);
        if (_stat3.isDirectory()) routedirs.sec = true;
    } catch (err) {
        debug('Error readig authed endpoints: ', err);
    }

    if (routedirs.rest) session.use((0, _routeBuilder2.default)({ rest: true }, routesRest));
    if (routedirs.sec) session.use((0, _routeBuilder2.default)(routes));
}

// ********************************
// ******** Error Handling ********
// ********************************

app.use(function (req, res) {
    res.sendStatus(404);
});

if (app.get('env') === 'development') {
    app.use(function (err, req, res) {
        res.status(err.status || 500);
        if (req.data !== undefined) {
            req.data.error = {
                message: err.message,
                err: err
            };
        } else {
            req.data = {
                app: _config2.default.has('app') ? _config2.default.get('app') : '',
                error: {
                    message: err.message,
                    err: err
                }
            };
        }
        if (!req.xhr) {
            res.render('error', req.data);
        } else {
            res.send({
                message: err.message,
                status: err.status
            });
        }
        console.error(err);
    });
} else {
    app.use(function (err, req, res) {
        res.satus(err.status || 500);
        if (!req.xhr) {
            res.render('error-friendly');
        } else {
            res.send({
                message: 'Error occurred',
                status: err.status
            });
        }
        console.error(err);
    });
}

exports.default = app;
module.exports = exports['default'];