72 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| const config = require('config');
 | |
| const express = require('express');
 | |
| const router = new express.Router();
 | |
| const passport = require('../lib/passport');
 | |
| const _ = require('../lib/translate')._;
 | |
| const fs = require('fs');
 | |
| const path = require('path');
 | |
| const settings = require('../lib/models/settings');
 | |
| const editorHelpers = require('../lib/editor-helpers')
 | |
| 
 | |
| router.all('/*', (req, res, next) => {
 | |
|     if (!req.user) {
 | |
|         req.flash('danger', _('Need to be logged in to access restricted content'));
 | |
|         return res.redirect('/users/login?next=' + encodeURIComponent(req.originalUrl));
 | |
|     }
 | |
|     next();
 | |
| });
 | |
| 
 | |
| router.get('/editor', passport.csrfProtection, (req, res) => {
 | |
|     settings.get('serviceUrl', (err, serviceUrl) => {
 | |
|         if (err) {
 | |
|             req.flash('danger', err.message || err);
 | |
|             return res.redirect('/');
 | |
|         }
 | |
| 
 | |
|         editorHelpers.getResource(req.query.type, req.query.id, (err, resource) => {
 | |
|             if (err) {
 | |
|                 req.flash('danger', err.message || err);
 | |
|                 return res.redirect('/');
 | |
|             }
 | |
| 
 | |
|             try {
 | |
|                 resource.editorData = JSON.parse(resource.editorData);
 | |
|             } catch (err) {
 | |
|                 resource.editorData = {
 | |
|                     template: req.query.template || 'demo'
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if (!resource.html && !resource.editorData.html && !resource.editorData.mjml) {
 | |
|                 const base = path.join(__dirname, '..', 'public', 'grapejs', 'templates', path.join('/', resource.editorData.template));
 | |
|                 try {
 | |
|                     resource.editorData.mjml = fs.readFileSync(path.join(base, 'index.mjml'), 'utf8');
 | |
|                 } catch (err) {
 | |
|                     try {
 | |
|                         resource.html = fs.readFileSync(path.join(base, 'index.html'), 'utf8');
 | |
|                     } catch (err) {
 | |
|                         resource.html = err.message || err;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             res.render('grapejs/editor', {
 | |
|                 layout: 'grapejs/layout-editor',
 | |
|                 type: req.query.type,
 | |
|                 stringifiedResource: JSON.stringify(resource),
 | |
|                 resource,
 | |
|                 editor: {
 | |
|                     name: resource.editorName || 'grapejs',
 | |
|                     mode: resource.editorData.mjml ? 'mjml' : 'html',
 | |
|                     config: config.grapejs
 | |
|                 },
 | |
|                 csrfToken: req.csrfToken(),
 | |
|                 serviceUrl
 | |
|             });
 | |
|         });
 | |
|     });
 | |
| });
 | |
| 
 | |
| module.exports = router;
 |