UNPKG

keystone

Version:

Web Application Framework and Admin GUI / Content Management System built on Express.js and Mongoose

98 lines (87 loc) 3.33 kB
var _ = require('lodash'); var ejs = require('ejs'); var path = require('path'); var templatePath = path.resolve(__dirname, '../templates/index.html'); module.exports = function IndexRoute (req, res) { var keystone = req.keystone; var lists = {}; _.forEach(keystone.lists, function (list, key) { lists[key] = list.getOptions(); }); var UserList = keystone.list(keystone.get('user model')); var orphanedLists = keystone.getOrphanedLists().map(function (list) { return _.pick(list, ['key', 'label', 'path']); }); var backUrl = keystone.get('back url'); if (backUrl === undefined) { // backUrl can be falsy, to disable the link altogether // but if it's undefined, default it to "/" backUrl = '/'; } var keystoneData = { adminPath: '/' + keystone.get('admin path'), appversion: keystone.get('appversion'), backUrl: backUrl, brand: keystone.get('brand'), csrf: { header: {} }, devMode: !!process.env.KEYSTONE_DEV, lists: lists, nav: keystone.nav, orphanedLists: orphanedLists, signoutUrl: keystone.get('signout url'), user: { id: req.user.id, name: UserList.getDocumentName(req.user) || '(no name)', }, userList: UserList.key, version: keystone.version, wysiwyg: { options: { enableImages: keystone.get('wysiwyg images') ? true : false, enableCloudinaryUploads: keystone.get('wysiwyg cloudinary images') ? true : false, enableS3Uploads: keystone.get('wysiwyg s3 images') ? true : false, additionalButtons: keystone.get('wysiwyg additional buttons') || '', additionalPlugins: keystone.get('wysiwyg additional plugins') || '', additionalOptions: keystone.get('wysiwyg additional options') || {}, overrideToolbar: keystone.get('wysiwyg override toolbar'), skin: keystone.get('wysiwyg skin') || 'keystone', menubar: keystone.get('wysiwyg menubar'), importcss: keystone.get('wysiwyg importcss') || '', } }, }; keystoneData.csrf.header[keystone.security.csrf.CSRF_HEADER_KEY] = keystone.security.csrf.getToken(req, res); var codemirrorPath = keystone.get('codemirror url path') ? '/' + keystone.get('codemirror url path') : '/' + keystone.get('admin path') + '/js/lib/codemirror'; var locals = { adminPath: keystoneData.adminPath, cloudinaryScript: false, codemirrorPath: codemirrorPath, env: keystone.get('env'), fieldTypes: keystone.fieldTypes, ga: { property: keystone.get('ga property'), domain: keystone.get('ga domain'), }, keystone: keystoneData, title: keystone.get('name') || 'Keystone', }; var cloudinaryConfig = keystone.get('cloudinary config'); if (cloudinaryConfig) { var cloudinary = require('cloudinary'); var cloudinaryUpload = cloudinary.uploader.direct_upload(); keystoneData.cloudinary = { cloud_name: keystone.get('cloudinary config').cloud_name, api_key: keystone.get('cloudinary config').api_key, timestamp: cloudinaryUpload.hidden_fields.timestamp, signature: cloudinaryUpload.hidden_fields.signature, }; locals.cloudinaryScript = cloudinary.cloudinary_js_config(); }; ejs.renderFile(templatePath, locals, { delimiter: '%' }, function (err, str) { if (err) { console.error('Could not render Admin UI Index Template:', err); return res.status(500).send(keystone.wrapHTMLError('Error Rendering Admin UI', err.message)); } res.send(str); }); };