-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathserver.js
120 lines (99 loc) · 4.26 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
var express = require('express');
var _ = require('underscore');
var harp = require('harp');
var nodePath = require('path');
var busboy = require('connect-busboy');
var flash = require('connect-flash');
var debug = require('debug')('app');
var config = require('./config');
var dynHelpers = require('./lib/helpers');
exports.start = function(port, boilerplate) {
var app = express();
var projectPath = nodePath.resolve(process.cwd(), boilerplate || "");
var editor = require('./lib/editor')(projectPath);
// Routes
var auth = require("./routes/auth")(editor);
var members = require("./routes/members")(editor);
var settings = require("./routes/settings")(editor);
var pages = require("./routes/pages")(editor, config);
var entries = require("./routes/entries")(editor, config);
app.configure(function () {
app.use(express.cookieParser('play me off keyboard cat'));
app.use(express.session({ secret: "keyboard cat", cookie: { maxAge: 1000*60*60*24*365 }}));
app.use(flash());
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(busboy());
app.use(harp.mount(projectPath));
app.use(express.static(__dirname + "/public"));
app.use(dynHelpers.helpers(editor));
app.set("view engine", "jade");
app.set('views', __dirname + '/views');
// Just needed to parse html files
app.engine('html', require('ejs').renderFile);
});
function checkAuth(req, res, next) {
if (!req.session.user_id) {
res.redirect("/admin");
// next();
} else {
next();
}
}
// Pages Resource
// TODO - Rename these routes to pages
app.get('/admin/content', checkAuth, pages.all);
app.get('/admin/content/new', checkAuth, pages.new);
app.post('/admin/content/new', checkAuth, pages.create);
app.post('/admin/publish', checkAuth, pages.update);
app.get('/admin/publish', checkAuth, pages.edit);
app.del('/admin/content', checkAuth, pages.del);
// Entries
app.get("/admin/lists/:name", checkAuth, entries.all);
app.get("/admin/entry/new", checkAuth, entries.new);
app.post("/admin/entry/new", checkAuth, entries.create);
// This is for editing the editor Metadata
// TODO should be ADMIN only
app.get("/admin/entries/:name/edit", checkAuth, function(req, res) {
editor.sections.fetchSectionsRefined(function(sections) {
editor.sections.fetchMetaDataBySection(req.params.name, function(metaData, root) {
var fields = editor.metadata.fetchFields(metaData);
var editorData = (metaData.editor) ? metaData.editor : {};
var table = (metaData.editor && metaData.editor.table) ? metaData.editor.table : [];
editor.sections.fetchFilesBySection(req.params.name, function(err, files){
var contentSelect = editor.metadata.contentForSelect(files);
res.render("entries/list_edit", {nav:'content', contentSelect:contentSelect, table:table, editorData: editorData, fields: fields, list: req.params.name, sections: sections});
});
});
});
});
app.post("/admin/entries/:name/edit/table", checkAuth, function(req, res) {
editor.sections.sectionToBase(req.params.name, function(base) {
editor.metadata.updateTableField(base, req.body, function(err, result){
res.redirect("/admin/lists/" + req.params.name );
});
});
});
app.post("/admin/entries/:name/edit/content", checkAuth, function(req, res) {
editor.sections.sectionToBase(req.params.name, function(base) {
editor.metadata.updateContentField(base, req.body, function(err, result){
res.redirect("/admin/lists/" + req.params.name );
});
});
});
// Settings
app.get("/admin/settings", checkAuth, settings.get);
app.post("/admin/settings", checkAuth, settings.update);
// Members
app.get("/admin/members", checkAuth, members.all);
app.get("/admin/member/new", checkAuth, members.get);
app.post("/admin/member/new", checkAuth, members.new);
// Auth
app.get('/admin', auth.new);
app.get("/admin/logout", auth.logout);
app.post("/admin/login", auth.login);
// App Startup
app.listen(config.port);
console.log("Listening on Port", config.port, "With boilerplate", projectPath);
}