UNPKG

muffin

Version:

The 21st century way of building websites

194 lines (131 loc) 5.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk); var _http = require('http'); var _http2 = _interopRequireDefault(_http); var _fsExtra = require('fs-extra'); var _fsExtra2 = _interopRequireDefault(_fsExtra); var _koa = require('koa'); var _koa2 = _interopRequireDefault(_koa); var _koaStatic = require('koa-static'); var _koaStatic2 = _interopRequireDefault(_koaStatic); var _koaMount = require('koa-mount'); var _koaMount2 = _interopRequireDefault(_koaMount); var _koaCompress = require('koa-compress'); var _koaCompress2 = _interopRequireDefault(_koaCompress); var _koaRouter = require('koa-router'); var _koaRouter2 = _interopRequireDefault(_koaRouter); var _koaBody = require('koa-body'); var _koaBody2 = _interopRequireDefault(_koaBody); var _koaJwt = require('koa-jwt'); var _koaJwt2 = _interopRequireDefault(_koaJwt); var _koaConvert = require('koa-convert'); var _koaConvert2 = _interopRequireDefault(_koaConvert); var _db = require('./utils/db'); var _utils = require('./utils'); var _front = require('./routes/front'); var _front2 = _interopRequireDefault(_front); var _config = require('./utils/config'); var _config2 = _interopRequireDefault(_config); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { return step("next", value); }, function (err) { return step("throw", err); }); } } return step("next"); }); }; } const router = new _koaRouter2.default(); const app = new _koa2.default(); // Loads .env and puts variables into process.env const envFile = new _config2.default(); app.use((0, _koaCompress2.default)()); router.use('/api', (0, _koaConvert2.default)((0, _koaJwt2.default)({ secret: process.env.SESSION_SECRET }).unless({ path: [/token-auth/, /token-refresh/, /reset-password/] }))); router.use((0, _koaConvert2.default)((0, _koaBody2.default)({ multipart: true }))); // Retrieve routes from passed path const getRouter = path => require('./routes/' + path); const APIroutes = ['content', 'reset-password', 'token', 'upload']; // Register media routes and API const uploadRouter = getRouter('uploads'); router.use('/uploads*', uploadRouter.routes()); router.use('/uploads*', uploadRouter.allowedMethods()); for (let route of APIroutes) { let subRouter = getRouter('api/' + route); router.use('/api', subRouter.routes()); router.use('/api', subRouter.allowedMethods()); } // Serve assets of admin area... app.use((0, _koaMount2.default)('/admin', (0, _koaStatic2.default)(__dirname + '/client'))); // ...and the Ember app router.get('/admin*', (() => { var ref = _asyncToGenerator(function* (ctx, next) { let indexContent = false; let indexPath = __dirname + '/client/index.html'; try { indexContent = _fsExtra2.default.readFileSync(indexPath, { encoding: 'utf8' }); } catch (err) { return (0, _utils.log)(err); } ctx.body = indexContent; yield next(); }); return function (_x, _x2) { return ref.apply(this, arguments); }; })()); // Serve frontend assets app.use((0, _koaMount2.default)('/assets', (0, _koaStatic2.default)(process.cwd() + '/dist'))); // Redirect users from "/login" to the Ember app login router.get('/login', (() => { var ref = _asyncToGenerator(function* (ctx, next) { ctx.redirect('/admin/login'); yield next(); }); return function (_x3, _x4) { return ref.apply(this, arguments); }; })()); // Log HTTP requests to console app.use((() => { var ref = _asyncToGenerator(function* (ctx, next) { let start = new Date(); try { yield next(); } catch (err) { ctx.body = { message: err.message }; ctx.status = err.status || 500; } let ms = new Date() - start; if (ctx.url.split('/')[1] == 'api') { return; } console.log(_chalk2.default.blue('[muffin]') + ' %s %s - %sms', ctx.method, ctx.url, ms); }); return function (_x5, _x6) { return ref.apply(this, arguments); }; })()); function listening() { const port = this.address().port; const url = 'http://localhost:' + port; // Output message as soon as server is running console.log(_chalk2.default.blue('[muffin]') + ' ' + 'Running at ' + _chalk2.default.grey(url)); } // Export front router app.router = _front2.default; app.run = outerRouter => { // Register front routes router.use('/', outerRouter.routes()); router.use('/', outerRouter.allowedMethods()); // Register dashboard routes app.use(router.routes()); app.use(router.allowedMethods()); app.listen(process.env.PORT, listening); }; exports.default = app; module.exports = exports['default'];