diff options
Diffstat (limited to 'server')
| -rw-r--r-- | server/api/index.js | 4 | ||||
| -rw-r--r-- | server/api/party.js | 10 | ||||
| -rw-r--r-- | server/api/user.js | 13 | ||||
| -rw-r--r-- | server/auth/index.js | 70 | ||||
| -rw-r--r-- | server/db.js | 11 | ||||
| -rw-r--r-- | server/index.js | 14 | ||||
| -rw-r--r-- | server/models/Party.js | 13 | ||||
| -rw-r--r-- | server/models/User.js | 21 | ||||
| -rw-r--r-- | server/models/UserParty.js | 11 | ||||
| -rw-r--r-- | server/models/index.js | 3 |
10 files changed, 159 insertions, 11 deletions
diff --git a/server/api/index.js b/server/api/index.js index 3b02ec9..9139a28 100644 --- a/server/api/index.js +++ b/server/api/index.js @@ -1,2 +1,4 @@ module.exports = { -}
\ No newline at end of file + party: require('./party'), + user: require('./user'), +} diff --git a/server/api/party.js b/server/api/party.js new file mode 100644 index 0000000..e0a9a22 --- /dev/null +++ b/server/api/party.js @@ -0,0 +1,10 @@ +module.exports = { + list: function (req, res) { + }, + + view: function (req, res) { + }, + + edit: function (req, res) { + } +} diff --git a/server/api/user.js b/server/api/user.js new file mode 100644 index 0000000..099521a --- /dev/null +++ b/server/api/user.js @@ -0,0 +1,13 @@ +module.exports = { + all: function (req, res) { + }, + + view: function (req, res) { + }, + + edit: function (req, res) { + }, + + destroy: function (req, res) { + } +}
\ No newline at end of file diff --git a/server/auth/index.js b/server/auth/index.js index 3b02ec9..709fd0d 100644 --- a/server/auth/index.js +++ b/server/auth/index.js @@ -1,2 +1,68 @@ -module.exports = { -}
\ No newline at end of file +/* jshint node: true */ + +var passport = require('passport'), + LocalStrategy = require('passport-local').Strategy, + _ = require('lodash'), + util = require('../util'), + config = require('../../../config.json'), + User = require('../models/User'); + +var auth = { + + init: function () { + passport.serializeUser(auth.serializeUser); + passport.deserializeUser(auth.deserializeUser); + + passport.use(new LocalStrategy(auth.verifyLocalUser)) + }, + + loggedInLocal: function (req, res, next) { + passport.authenticate("local", function(err, user, info){ + if (err) { + return res.json({ error: err }); + } + if (! user) { + return info ? res.json(info) : res.redirect("/login"); + } + + user.last_ip = util.ip2num( req.ip ) + user.save(function(err, data){ if (err) console.err('error setting ip for user') }) + + req.logIn(user, function(err) { + if (err) { return next(err); } + var returnTo = req.session.returnTo + delete req.session.returnTo + return res.json({ status: "OK", returnTo: returnTo || "/profile" }) + }); + })(req, res, next); + }, + + logout: function (req, res) { + req.logout(); + res.redirect('/'); + }, + + serializeUser: function (user, done) { + done(null, user.id); + }, + + deserializeUser: function (id, done) { + User.find({ id: id }, function (err, user) { + done(err, user) + }); + }, + + verifyLocalUser: function (username, password, done) { + User.findByUsername(username, function(err, user){ + if (err) { return done(err); } + if (! user) { + return done(null, false, { error: { errors: { username: { message: 'No such username.' } }}}) + } + if (! user.validPassword(password)) { + return done(null, false, { error: { errors: { password: { message: 'Incorrect password.' } }}}) + } + return done(null, user); + }); + } + +} diff --git a/server/db.js b/server/db.js new file mode 100644 index 0000000..a56c163 --- /dev/null +++ b/server/db.js @@ -0,0 +1,11 @@ +var Sequelize = require("sequelize"), + pg = require('pg'); + +var db = module.exports = {} + +var DATABASE_URL = process.env.DATABASE_URL || ('postgres://postgres@localhost/' + config.name) + +db.sequelize = new Sequelize(DATABASE_URL, { + dialect: 'postgres', + protocol: null, +}) diff --git a/server/index.js b/server/index.js index 2f786ec..36a84f7 100644 --- a/server/index.js +++ b/server/index.js @@ -21,23 +21,24 @@ var http = require('http'), multer = require('multer'), morgan = require('morgan'), csurf = require('csurf'), - path = require('path'), - pg = require('pg'); + path = require('path'); var app = express() var server -var DATABASE_URI = process.env.DATABASE_URL || ('postgres://postgres@localhost/' + config.name) + +var auth = require('./auth') +var api = require('./api') // var site = {} site.init = function(){ - pg.connect(DATABASE_URI, site.ready); + site.ready() } site.ready = function(){ - // auth.init() + auth.init() site.setup() site.route() } @@ -82,6 +83,9 @@ site.setup = function(){ site.route = function(){ app.get('/', views.home) + app.post('/auth/signin', auth.loggedInLocal); + app.get('/logout', auth.logout); + } site.init() diff --git a/server/models/Party.js b/server/models/Party.js new file mode 100644 index 0000000..f48fde1 --- /dev/null +++ b/server/models/Party.js @@ -0,0 +1,13 @@ + +// 0 id 1 date +// 0 id 1 date 2 location + +var db = require("../db"), + Sequelize = require("sequelize"); + +var Party = db.sequelize.define('Party', { + date: Sequelize.INTEGER, + location: Sequelize.STRING, +}) + +module.exports = Party diff --git a/server/models/User.js b/server/models/User.js new file mode 100644 index 0000000..c379653 --- /dev/null +++ b/server/models/User.js @@ -0,0 +1,21 @@ +// 0 id 1 group 2 name 3 email 4 blurb +// 0 id 1 name 2 email 3 access 4 emailhidden 5 hostid 6 blurb +// 0 id 1 name 2 firstname 3 email 4 access + +var db = require("../db"), + Sequelize = require("sequelize"); + +var User = db.sequelize.define('User', { + email: Sequelize.STRING, + password: Sequelize.STRING, + + name: Sequelize.STRING, + + access: Sequelize.INTEGER, + emailhidden: Sequelize.BOOLEAN, + hostid: Sequelize.INTEGER, + blurb: Sequelize.BLOB, +}) + +module.exports = User + diff --git a/server/models/UserParty.js b/server/models/UserParty.js new file mode 100644 index 0000000..626135c --- /dev/null +++ b/server/models/UserParty.js @@ -0,0 +1,11 @@ + +var db = require("../db"), + Sequelize = require("sequelize"); + +var UserParty = db.sequelize.define('UserParty', { + user_id: Sequelize.INTEGER, + host_id: Sequelize.INTEGER, + party_id: Sequelize.INTEGER, +}) + +module.exports = UserParty diff --git a/server/models/index.js b/server/models/index.js deleted file mode 100644 index 7acaac2..0000000 --- a/server/models/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - -} |
