summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/index.js160
-rw-r--r--server/lib/api.js65
-rw-r--r--server/lib/auth.js5
-rw-r--r--server/lib/schemas/Documentation.js1
-rw-r--r--server/lib/schemas/Layout.js2
5 files changed, 158 insertions, 75 deletions
diff --git a/server/index.js b/server/index.js
index 84d9818..9fe8edf 100644
--- a/server/index.js
+++ b/server/index.js
@@ -18,89 +18,109 @@ var http = require('http'),
path = require('path'),
mongoose = require('mongoose');
-// var io = websocket.listen(config.socketPort)
-
-var app = express();
+var app = express()
+var server
var DATABASE_URI = process.env.MONGOLAB_URI || ('mongodb://' + config.hostName + '/vvalls')
-mongoose.connect(DATABASE_URI);
-var SessionStore = new MongoStore({ mongoose_connection: mongoose.connection })
+//
+
+var site = {}
+
+site.init = function(){
+ mongoose.connect(DATABASE_URI, {}, site.ready);
+}
+
+site.ready = function(){
+ auth.init()
+ site.setup()
+ site.route()
+}
+
+site.setup = function(){
+ var SessionStore = new MongoStore({ mongoose_connection: mongoose.connection })
+
+ app.set('port', config.port);
+ app.set('views', path.join(__dirname, '../views'));
+ app.set('view engine', 'ejs');
+ app.use(express.static(path.join(__dirname, '../public')));
+ app.use(express.logger('dev'));
+ app.use(express.json());
+ app.use(express.urlencoded());
+ app.use(express.cookieParser());
+ app.use(express.session({
+ key: 'vvalls.sid',
+ secret: 'flibbertigibbet',
+ cookie: { domain: '.' + config.hostName, maxAge: 43200000 },
+ store: SessionStore
+ }));
+ app.use(bodyParser());
+ app.use(multer());
+ app.use(express.query());
+ app.use(express.csrf());
+ app.use(express.methodOverride());
+ app.use(passport.initialize());
+ app.use(passport.session());
+ // app.use('/api', middleware.ensureAuthenticated, mers({conn: mongoose.connection}).rest());
+ app.use(app.router);
+ app.get('env') === 'development' && app.use(express.errorHandler());
+
+ // Essential middleware
+ // app.all('*', middleware.enableCORS);
+ app.all('*', middleware.ensureLocals);
-// Configure things
-app.set('port', config.port);
-app.set('views', path.join(__dirname, '../views'));
-app.set('view engine', 'ejs');
-app.use(express.static(path.join(__dirname, '../public')));
-app.use(express.logger('dev'));
-app.use(express.json());
-app.use(express.urlencoded());
-app.use(express.cookieParser());
-app.use(express.session({
- key: 'vvalls.sid',
- secret: 'flibbertigibbet',
- cookie: { domain: '.' + config.hostName, maxAge: 43200000 },
- store: SessionStore
-}));
-app.use(bodyParser());
-app.use(multer());
-app.use(express.query());
-app.use(express.csrf());
-app.use(express.methodOverride());
-app.use(passport.initialize());
-app.use(passport.session());
-// app.use('/api', middleware.ensureAuthenticated, mers({conn: mongoose.connection}).rest());
-app.use(app.router);
-app.get('env') === 'development' && app.use(express.errorHandler());
+ server = http.createServer(app)
+ server.listen(app.get('port'), function () {
+ console.log('Express server listening on port ' + app.get('port'));
+ });
+ // var io = websocket.listen(server)
+ // auth.initSockets(io, SessionStore)
+}
-// Configure user authentication
-auth.init()
+site.route = function () {
+ app.get('/', views.home);
+ app.get('/about', views.docs);
+ app.get('/about/:name/edit', views.docs);
+ app.get('/about/:name', views.docs);
+ app.get('/login', views.modal);
+ app.get('/signup', views.modal);
+ app.post('/auth/signin', auth.loggedInLocal);
+ app.post('/auth/signup', auth.signup);
+ app.get('/logout', auth.logout);
+ app.get('/auth/twitter', auth.login('twitter'));
+ app.get('/auth/twitter/callback', auth.loggedIn('twitter'));
+ app.get('/auth/facebook', auth.login('facebook'));
+ app.get('/auth/facebook/callback', auth.loggedIn('facebook'));
+ app.get('/profile', views.profile)
+ app.get('/profile/edit', views.profile)
+ app.get('/profile/:name', views.profile)
-// Essential middleware
-// app.all('*', middleware.enableCORS);
+ app.get('/api/profile', middleware.ensureAuthenticated, api.profile.show)
+ app.put('/api/profile', middleware.ensureAuthenticated, api.profile.update)
-app.all('*', middleware.ensureLocals);
+ app.get('/project/new', middleware.ensureAuthenticated, views.modal);
-// Initialize views
-app.get('/', views.home);
-app.get('/about', views.docs);
-app.get('/about/:name/edit', views.docs);
-app.get('/about/:name', views.docs);
-app.get('/login', views.modal);
-app.get('/signup', views.modal);
-app.post('/auth/signin', auth.loggedInLocal);
-app.post('/auth/signup', auth.signup);
-app.get('/logout', auth.logout);
-app.get('/auth/twitter', auth.login('twitter'));
-app.get('/auth/twitter/callback', auth.loggedIn('twitter'));
-app.get('/auth/facebook', auth.login('facebook'));
-app.get('/auth/facebook/callback', auth.loggedIn('facebook'));
-app.get('/profile', views.profile)
-app.get('/profile/edit', views.profile)
-app.get('/profile/:name', views.profile)
+ app.get('/staff', middleware.ensureAuthenticated, middleware.ensureIsStaff, views.staff.index);
+ app.get('/staff/bless', middleware.ensureAuthenticated, views.staff.bless);
-app.get('/api/profile', middleware.ensureAuthenticated, api.profile.show)
-app.put('/api/profile', middleware.ensureAuthenticated, api.profile.update)
+ app.get('/api/docs', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.show)
+ app.post('/api/docs/new', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.create)
+ app.post('/api/docs/edit', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.update)
+ app.delete('/api/docs/destroy', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.destroy)
-app.get('/project/new', middleware.ensureAuthenticated, views.modal);
+ app.use('/builder', middleware.ensureAuthenticated)
+ app.get('/builder', views.builder)
+ app.get('/builder/:name', views.builder)
-app.get('/staff', middleware.ensureAuthenticated, middleware.ensureIsStaff, views.staff.index);
-app.get('/staff/bless', middleware.ensureAuthenticated, views.staff.bless);
+ app.get('/api/layout', middleware.ensureAuthenticated, api.layout.index)
+ app.get('/api/layout/show', middleware.ensureAuthenticated, api.layout.show)
+ app.post('/api/layout/new', middleware.ensureAuthenticated, api.layout.create)
+ app.post('/api/layout/edit', middleware.ensureAuthenticated, api.layout.update)
+ app.delete('/api/layout/destroy', middleware.ensureAuthenticated, api.layout.destroy)
-app.get('/api/docs', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.show)
-app.post('/api/docs/new', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.create)
-app.post('/api/docs/edit', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.update)
-app.delete('/api/docs/destroy', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.destroy)
-app.use('/builder', middleware.ensureAuthenticated)
-app.get('/builder', views.builder)
-app.get('/builder/:name', views.builder)
+}
-/*
-auth.initSockets(io)
-*/
-http.createServer(app).listen(app.get('port'), function () {
- console.log('Express server listening on port ' + app.get('port'));
-});
+site.init()
diff --git a/server/lib/api.js b/server/lib/api.js
index b89b6ae..2d35f50 100644
--- a/server/lib/api.js
+++ b/server/lib/api.js
@@ -9,7 +9,8 @@ var passport = require('passport'),
upload = require('./upload'),
config = require('../../config.json'),
User = require('./schemas/User'),
- Documentation = require('./schemas/Documentation');
+ Documentation = require('./schemas/Documentation'),
+ Layout = require('./schemas/Layout');
var api = {
@@ -122,6 +123,68 @@ var api = {
res.json({ status: "OK" })
})
}
+ },
+
+ layout: {
+ index: function(req, res){
+ Layout.find({}, function(err, docs){
+ res.json(docs)
+ })
+ },
+
+ show: function(req, res){
+ Layout.findOne({ name: req.query.name }, function(err, doc){
+ if (doc) {
+ res.json(doc)
+ }
+ else {
+ var name = util.sanitize(req.query.name)
+ if (name == "new") {
+ name = ""
+ }
+ res.json({ name: name, isNew: true })
+ }
+ })
+ },
+
+ create: function(req, res){
+ var data = util.cleanQuery(req.body)
+ data.name = util.sanitize(data.new_name)
+ data.displayName = util.sanitize(data.displayName)
+ delete data.new_name
+ new Layout(data).save(function(err, doc){
+ if (err || ! doc) { return res.json({ error: err }) }
+ res.json(doc)
+ })
+ },
+
+ update: function(req, res){
+ var data = util.cleanQuery(req.body)
+ if (data.name == "new") {
+ return api.docs.create(req, res)
+ }
+ Layout.findOne({ name: data.name }, function(err, doc){
+ if (err || ! doc) { return res.json({ error: err }) }
+ data.name = data.new_name
+ delete data.new_name
+ _.extend(doc, data)
+ doc.save(function(err, doc){
+ if (err || ! doc) { return res.json({ error: err }) }
+ res.json(doc)
+ })
+ })
+ },
+
+ destroy: function(req, res){
+ var name = util.sanitize(req.body.name)
+ if (! name || ! name.length) {
+ res.json({ error: 404 })
+ return
+ }
+ Layout.remove({ name: name }, function(err){
+ res.json({ status: "OK" })
+ })
+ },
}
}
diff --git a/server/lib/auth.js b/server/lib/auth.js
index b710a22..018c9ad 100644
--- a/server/lib/auth.js
+++ b/server/lib/auth.js
@@ -5,6 +5,7 @@ var passport = require('passport'),
TwitterStrategy = require('passport-twitter').Strategy,
LocalStrategy = require('passport-local').Strategy,
passportSocketIo = require("passport.socketio"),
+ cookieParser = require('express').cookieParser,
crypto = require('crypto'),
_ = require('lodash'),
util = require('./util'),
@@ -33,9 +34,9 @@ var auth = {
}, auth.insertFacebookUser));
},
- initSockets: function (io, cookieParser, SessionStore) {
+ initSockets: function (io, express, SessionStore) {
io.set('authorization', passportSocketIo.authorize({
- cookieParser: express.cookieParser,
+ cookieParser: cookieParser,
passport: passport,
key: 'vvalls.sid', // the name of the cookie where express/connect stores its session_id
secret: 'flibbertigibbet', // the session_secret to parse the cookie
diff --git a/server/lib/schemas/Documentation.js b/server/lib/schemas/Documentation.js
index 0381e0b..482f609 100644
--- a/server/lib/schemas/Documentation.js
+++ b/server/lib/schemas/Documentation.js
@@ -1,6 +1,5 @@
/* jshint node: true */
-
var mongoose = require('mongoose'),
uniqueValidator = require('mongoose-unique-validator'),
_ = require('lodash'),
diff --git a/server/lib/schemas/Layout.js b/server/lib/schemas/Layout.js
index 48cd85e..f818ed2 100644
--- a/server/lib/schemas/Layout.js
+++ b/server/lib/schemas/Layout.js
@@ -27,7 +27,7 @@ var LayoutSchema = new mongoose.Schema({
type: String,
default: ""
},
- rooms: [Schema.Types.Mixed],
+ rooms: [mongoose.Schema.Types.Mixed],
user_id: { type: mongoose.Schema.ObjectId, index: true },
created_at: { type: Date },
updated_at: { type: Date },