From c251396987dcffa38d421303162661b68443314f Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Wed, 9 Jul 2014 16:59:22 -0400 Subject: got some datamodels --- .gitignore | 2 -- README.md | 4 +-- config.json | 6 ++++ package.json | 12 ++++---- server/api/index.js | 4 ++- server/api/party.js | 10 +++++++ server/api/user.js | 13 +++++++++ server/auth/index.js | 70 ++++++++++++++++++++++++++++++++++++++++++++-- server/db.js | 11 ++++++++ server/index.js | 14 ++++++---- server/models/Party.js | 13 +++++++++ server/models/User.js | 21 ++++++++++++++ server/models/UserParty.js | 11 ++++++++ server/models/index.js | 3 -- 14 files changed, 174 insertions(+), 20 deletions(-) create mode 100644 config.json create mode 100644 server/api/party.js create mode 100644 server/api/user.js create mode 100644 server/db.js create mode 100644 server/models/Party.js create mode 100644 server/models/User.js create mode 100644 server/models/UserParty.js delete mode 100644 server/models/index.js diff --git a/.gitignore b/.gitignore index c0f4c0c..54e537b 100644 --- a/.gitignore +++ b/.gitignore @@ -29,5 +29,3 @@ tmp/ *.mp4 *.db -config.json - diff --git a/README.md b/README.md index d360d94..8c0b9d2 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -postgres/node testbed -===================== +protocols +========= \ No newline at end of file diff --git a/config.json b/config.json new file mode 100644 index 0000000..6d6c27d --- /dev/null +++ b/config.json @@ -0,0 +1,6 @@ +{ + "name": "protocols", + "secret": "ummagumma", + "host": "localhost", + "port": 3000 +} diff --git a/package.json b/package.json index 7ca5610..0861dc4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "postgres-test", + "name": "protocols", "version": "0.0.0", - "description": "postgres/heroku testbed", + "description": "protocols", "main": "lib/index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" @@ -12,15 +12,17 @@ "express": "~4.5.1", "express-session": "~1.6.4", "passport": "~0.2.0", - "csurf": "~1.3.0", + "passport-local": "~1.0.0", + "csurf": "~1.3.0", "lodash": "~2.4.1", - "pg": "~3.3.0", "ejs": "^0.8.8", "multer": "~0.1.0", "body-parser": "~1.3.0", "cookie-parser": "~1.3.2", "method-override": "~2.1.0", "errorhandler": "~1.1.1", - "morgan": "~1.1.1" + "morgan": "~1.1.1", + "pg": "~3.3.0", + "sequelize": "~1.7.9" } } 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 = { - -} -- cgit v1.2.3-70-g09d2