From 70be130049e65a85ff2944a6b5e751d9dbf27daa Mon Sep 17 00:00:00 2001 From: M Ilham Hidayat Date: Wed, 26 Apr 2017 16:52:56 +0700 Subject: [PATCH 1/3] release 0 --- .gitignore | 2 + app.js | 15 ++++ config/config.json | 10 +++ controllers/userController.js | 92 ++++++++++++++++++++++++ helpers/verify.js | 22 ++++++ migrations/20170425041120-create-user.js | 36 ++++++++++ models/index.js | 36 ++++++++++ models/user.js | 16 +++++ package.json | 30 ++++++++ routes/users.js | 12 ++++ 10 files changed, 271 insertions(+) create mode 100644 .gitignore create mode 100644 app.js create mode 100644 config/config.json create mode 100644 controllers/userController.js create mode 100644 helpers/verify.js create mode 100644 migrations/20170425041120-create-user.js create mode 100644 models/index.js create mode 100644 models/user.js create mode 100644 package.json create mode 100644 routes/users.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9daa824 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +node_modules diff --git a/app.js b/app.js new file mode 100644 index 0000000..bd29ba4 --- /dev/null +++ b/app.js @@ -0,0 +1,15 @@ +var express = require('express'); +var app = express(); +var bodyParser = require('body-parser'); +var passport = require('passport'); +var Strategy = require('passport-local').Strategy; + +var users = require('./routes/users'); +var app = express(); + +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: false })); + +app.use('/api', users); + +app.listen(3000) diff --git a/config/config.json b/config/config.json new file mode 100644 index 0000000..c9af4bf --- /dev/null +++ b/config/config.json @@ -0,0 +1,10 @@ +{ + "development": { + "username": "quasar", + "password": "kagayakuyami", + "database": "user3", + "host": "127.0.0.1", + "dialect": "postgres", + "port": "5432" + } +} diff --git a/controllers/userController.js b/controllers/userController.js new file mode 100644 index 0000000..456cb2c --- /dev/null +++ b/controllers/userController.js @@ -0,0 +1,92 @@ +const db = require('../models'); +const passwordHash = require('password-hash'); +const jwt = require('jsonwebtoken'); +const auth = require('../helpers/verify.js').auth; +const methods = {}; + +methods.signup = (req,res,next) => { + var name = req.body.name; + var role = req.body.role; + var username = req.body.username; + var password = passwordHash.generate(req.body.password); + + db.User.create({ + name: name, + role: role, + username: username, + password: password + }) + .then(user => { + res.json(user) + }) + .catch(err => { + res.json(err) + }) + +} + +methods.signin = (req,res,next) => { + // console.log('a'); + db.User.findOne({ + where: { + username:req.body.username + } + }) + .then(user => { + if(passwordHash.verify(req.body.password, user.password)){ + let data = user.toJSON(); + delete data.id; + delete data.password; + delete data.createdAt; + delete data.updatedAt; + // res.json(data); + // let dataToken = jwt.sign(data, 'secret', {expiresIn: '1h'}) + res.json({ + message: 'Login sukses', + token: auth(data) + }) + } else { + res.json({message: 'Password Tidak sesuai'}); + } + }) + .catch(err => { + res.json({message: 'Username Tidak sesuai'}); + }) +} + +methods.getUsers = (req,res,next) => { + + let token = req.headers.token; + + db.User.findAll() + .then(users => { + res.json(users) + }) + .catch(err => { + res.json(err) + }) +} + +methods.insertUser = (req,res,next) => { + var name = req.body.name; + var role = req.body.role; + var username = req.body.username; + var password = passwordHash.generate(req.body.password); + + db.User.create({ + name: name, + role: role, + username: username, + password: password + }) + .then(user => { + res.json(user) + }) + .catch(err => { + res.json(err) + }) +} + + + +module.exports = methods diff --git a/helpers/verify.js b/helpers/verify.js new file mode 100644 index 0000000..d9dcf93 --- /dev/null +++ b/helpers/verify.js @@ -0,0 +1,22 @@ +const jwt = require('jsonwebtoken'); + +module.exports= { + isAdmin: function(req,res,next){ + + jwt.verify(req.headers.token, 'secret', function(error, decoded){ + if(decoded) { + if(decoded.role === 'Admin'){ + next(); + } else { + res.json({message : 'Anda tidak dapat menggunakan fitur ini'}) + } + } else { + res.json({message: error}) + } + }) + }, + auth: function(data){ + let token = jwt.sign(data, 'secret', { expiresIn: '1h' }) + return token; + } +} diff --git a/migrations/20170425041120-create-user.js b/migrations/20170425041120-create-user.js new file mode 100644 index 0000000..6070f79 --- /dev/null +++ b/migrations/20170425041120-create-user.js @@ -0,0 +1,36 @@ +'use strict'; +module.exports = { + up: function(queryInterface, Sequelize) { + return queryInterface.createTable('Users', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + name: { + type: Sequelize.STRING + }, + role: { + type: Sequelize.STRING + }, + username: { + type: Sequelize.STRING + }, + password: { + type: Sequelize.STRING + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }); + }, + down: function(queryInterface, Sequelize) { + return queryInterface.dropTable('Users'); + } +}; diff --git a/models/index.js b/models/index.js new file mode 100644 index 0000000..7540dba --- /dev/null +++ b/models/index.js @@ -0,0 +1,36 @@ +'use strict'; + +var fs = require('fs'); +var path = require('path'); +var Sequelize = require('sequelize'); +var basename = path.basename(module.filename); +var env = process.env.NODE_ENV || 'development'; +var config = require(__dirname + '/../config/config.json')[env]; +var db = {}; + +if (config.use_env_variable) { + var sequelize = new Sequelize(process.env[config.use_env_variable]); +} else { + var sequelize = new Sequelize(config.database, config.username, config.password, config); +} + +fs + .readdirSync(__dirname) + .filter(function(file) { + return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'); + }) + .forEach(function(file) { + var model = sequelize['import'](path.join(__dirname, file)); + db[model.name] = model; + }); + +Object.keys(db).forEach(function(modelName) { + if (db[modelName].associate) { + db[modelName].associate(db); + } +}); + +db.sequelize = sequelize; +db.Sequelize = Sequelize; + +module.exports = db; diff --git a/models/user.js b/models/user.js new file mode 100644 index 0000000..27b18b3 --- /dev/null +++ b/models/user.js @@ -0,0 +1,16 @@ +'use strict'; +module.exports = function(sequelize, DataTypes) { + var User = sequelize.define('User', { + name: DataTypes.STRING, + role: DataTypes.STRING, + username: DataTypes.STRING, + password: DataTypes.STRING + }, { + classMethods: { + associate: function(models) { + // associations can be defined here + } + } + }); + return User; +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000..cddedd9 --- /dev/null +++ b/package.json @@ -0,0 +1,30 @@ +{ + "name": "auth-passport", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "node app.js", + "dev": "nodemon app.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/milhamhidayat/auth-passport.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/milhamhidayat/auth-passport/issues" + }, + "homepage": "https://github.com/milhamhidayat/auth-passport#readme", + "devDependencies": { + "body-parser": "^1.17.1", + "express": "^4.15.2", + "jsonwebtoken": "^7.4.0", + "password-hash": "^1.2.2", + "pg": "^6.1.5", + "sequelize": "^3.30.4", + "sequelize-cli": "^2.7.0" + } +} diff --git a/routes/users.js b/routes/users.js new file mode 100644 index 0000000..2e523d9 --- /dev/null +++ b/routes/users.js @@ -0,0 +1,12 @@ +var express = require('express'); +var router = express.Router(); +const helper = require('../helpers/verify.js'); + +const userController = require('../controllers/userController'); + +router.post('/signup', userController.signup) +router.post('/signin', userController.signin) +router.get('/users', helper.isAdmin ,userController.getUsers) // get all the user info (admin only) +router.post('/users', helper.isAdmin ,userController.insertUser) // admin + +module.exports = router; From ce346ad2fc7cef1740094fd1cbe3426bbd5b4d0e Mon Sep 17 00:00:00 2001 From: M Ilham Hidayat Date: Wed, 26 Apr 2017 20:55:27 +0700 Subject: [PATCH 2/3] reset --- app.js | 15 ---- config/config.json | 10 --- controllers/userController.js | 92 ------------------------ helpers/verify.js | 22 ------ migrations/20170425041120-create-user.js | 36 ---------- models/index.js | 36 ---------- models/user.js | 16 ----- package.json | 30 -------- routes/users.js | 12 ---- 9 files changed, 269 deletions(-) delete mode 100644 app.js delete mode 100644 config/config.json delete mode 100644 controllers/userController.js delete mode 100644 helpers/verify.js delete mode 100644 migrations/20170425041120-create-user.js delete mode 100644 models/index.js delete mode 100644 models/user.js delete mode 100644 package.json delete mode 100644 routes/users.js diff --git a/app.js b/app.js deleted file mode 100644 index bd29ba4..0000000 --- a/app.js +++ /dev/null @@ -1,15 +0,0 @@ -var express = require('express'); -var app = express(); -var bodyParser = require('body-parser'); -var passport = require('passport'); -var Strategy = require('passport-local').Strategy; - -var users = require('./routes/users'); -var app = express(); - -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({ extended: false })); - -app.use('/api', users); - -app.listen(3000) diff --git a/config/config.json b/config/config.json deleted file mode 100644 index c9af4bf..0000000 --- a/config/config.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "development": { - "username": "quasar", - "password": "kagayakuyami", - "database": "user3", - "host": "127.0.0.1", - "dialect": "postgres", - "port": "5432" - } -} diff --git a/controllers/userController.js b/controllers/userController.js deleted file mode 100644 index 456cb2c..0000000 --- a/controllers/userController.js +++ /dev/null @@ -1,92 +0,0 @@ -const db = require('../models'); -const passwordHash = require('password-hash'); -const jwt = require('jsonwebtoken'); -const auth = require('../helpers/verify.js').auth; -const methods = {}; - -methods.signup = (req,res,next) => { - var name = req.body.name; - var role = req.body.role; - var username = req.body.username; - var password = passwordHash.generate(req.body.password); - - db.User.create({ - name: name, - role: role, - username: username, - password: password - }) - .then(user => { - res.json(user) - }) - .catch(err => { - res.json(err) - }) - -} - -methods.signin = (req,res,next) => { - // console.log('a'); - db.User.findOne({ - where: { - username:req.body.username - } - }) - .then(user => { - if(passwordHash.verify(req.body.password, user.password)){ - let data = user.toJSON(); - delete data.id; - delete data.password; - delete data.createdAt; - delete data.updatedAt; - // res.json(data); - // let dataToken = jwt.sign(data, 'secret', {expiresIn: '1h'}) - res.json({ - message: 'Login sukses', - token: auth(data) - }) - } else { - res.json({message: 'Password Tidak sesuai'}); - } - }) - .catch(err => { - res.json({message: 'Username Tidak sesuai'}); - }) -} - -methods.getUsers = (req,res,next) => { - - let token = req.headers.token; - - db.User.findAll() - .then(users => { - res.json(users) - }) - .catch(err => { - res.json(err) - }) -} - -methods.insertUser = (req,res,next) => { - var name = req.body.name; - var role = req.body.role; - var username = req.body.username; - var password = passwordHash.generate(req.body.password); - - db.User.create({ - name: name, - role: role, - username: username, - password: password - }) - .then(user => { - res.json(user) - }) - .catch(err => { - res.json(err) - }) -} - - - -module.exports = methods diff --git a/helpers/verify.js b/helpers/verify.js deleted file mode 100644 index d9dcf93..0000000 --- a/helpers/verify.js +++ /dev/null @@ -1,22 +0,0 @@ -const jwt = require('jsonwebtoken'); - -module.exports= { - isAdmin: function(req,res,next){ - - jwt.verify(req.headers.token, 'secret', function(error, decoded){ - if(decoded) { - if(decoded.role === 'Admin'){ - next(); - } else { - res.json({message : 'Anda tidak dapat menggunakan fitur ini'}) - } - } else { - res.json({message: error}) - } - }) - }, - auth: function(data){ - let token = jwt.sign(data, 'secret', { expiresIn: '1h' }) - return token; - } -} diff --git a/migrations/20170425041120-create-user.js b/migrations/20170425041120-create-user.js deleted file mode 100644 index 6070f79..0000000 --- a/migrations/20170425041120-create-user.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; -module.exports = { - up: function(queryInterface, Sequelize) { - return queryInterface.createTable('Users', { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: Sequelize.INTEGER - }, - name: { - type: Sequelize.STRING - }, - role: { - type: Sequelize.STRING - }, - username: { - type: Sequelize.STRING - }, - password: { - type: Sequelize.STRING - }, - createdAt: { - allowNull: false, - type: Sequelize.DATE - }, - updatedAt: { - allowNull: false, - type: Sequelize.DATE - } - }); - }, - down: function(queryInterface, Sequelize) { - return queryInterface.dropTable('Users'); - } -}; diff --git a/models/index.js b/models/index.js deleted file mode 100644 index 7540dba..0000000 --- a/models/index.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -var fs = require('fs'); -var path = require('path'); -var Sequelize = require('sequelize'); -var basename = path.basename(module.filename); -var env = process.env.NODE_ENV || 'development'; -var config = require(__dirname + '/../config/config.json')[env]; -var db = {}; - -if (config.use_env_variable) { - var sequelize = new Sequelize(process.env[config.use_env_variable]); -} else { - var sequelize = new Sequelize(config.database, config.username, config.password, config); -} - -fs - .readdirSync(__dirname) - .filter(function(file) { - return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'); - }) - .forEach(function(file) { - var model = sequelize['import'](path.join(__dirname, file)); - db[model.name] = model; - }); - -Object.keys(db).forEach(function(modelName) { - if (db[modelName].associate) { - db[modelName].associate(db); - } -}); - -db.sequelize = sequelize; -db.Sequelize = Sequelize; - -module.exports = db; diff --git a/models/user.js b/models/user.js deleted file mode 100644 index 27b18b3..0000000 --- a/models/user.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; -module.exports = function(sequelize, DataTypes) { - var User = sequelize.define('User', { - name: DataTypes.STRING, - role: DataTypes.STRING, - username: DataTypes.STRING, - password: DataTypes.STRING - }, { - classMethods: { - associate: function(models) { - // associations can be defined here - } - } - }); - return User; -}; diff --git a/package.json b/package.json deleted file mode 100644 index cddedd9..0000000 --- a/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "auth-passport", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "start": "node app.js", - "dev": "nodemon app.js", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/milhamhidayat/auth-passport.git" - }, - "author": "", - "license": "ISC", - "bugs": { - "url": "https://github.com/milhamhidayat/auth-passport/issues" - }, - "homepage": "https://github.com/milhamhidayat/auth-passport#readme", - "devDependencies": { - "body-parser": "^1.17.1", - "express": "^4.15.2", - "jsonwebtoken": "^7.4.0", - "password-hash": "^1.2.2", - "pg": "^6.1.5", - "sequelize": "^3.30.4", - "sequelize-cli": "^2.7.0" - } -} diff --git a/routes/users.js b/routes/users.js deleted file mode 100644 index 2e523d9..0000000 --- a/routes/users.js +++ /dev/null @@ -1,12 +0,0 @@ -var express = require('express'); -var router = express.Router(); -const helper = require('../helpers/verify.js'); - -const userController = require('../controllers/userController'); - -router.post('/signup', userController.signup) -router.post('/signin', userController.signin) -router.get('/users', helper.isAdmin ,userController.getUsers) // get all the user info (admin only) -router.post('/users', helper.isAdmin ,userController.insertUser) // admin - -module.exports = router; From 382a9ea22d0b626cec884e8396d87a3403ff94ef Mon Sep 17 00:00:00 2001 From: M Ilham Hidayat Date: Thu, 27 Apr 2017 14:54:03 +0700 Subject: [PATCH 3/3] done --- README.md | 23 ++++++++- app.js | 58 ++++++++++++++++++++++ bin/www | 90 +++++++++++++++++++++++++++++++++++ controllers/userController.js | 59 +++++++++++++++++++++++ helpers/verify.js | 22 +++++++++ models/user.js | 20 ++++++++ package.json | 24 ++++++++++ public/stylesheets/style.css | 8 ++++ routes/index.js | 9 ++++ routes/users.js | 23 +++++++++ views/error.jade | 6 +++ views/index.jade | 5 ++ views/layout.jade | 7 +++ 13 files changed, 353 insertions(+), 1 deletion(-) create mode 100644 app.js create mode 100755 bin/www create mode 100644 controllers/userController.js create mode 100644 helpers/verify.js create mode 100644 models/user.js create mode 100644 package.json create mode 100644 public/stylesheets/style.css create mode 100644 routes/index.js create mode 100644 routes/users.js create mode 100644 views/error.jade create mode 100644 views/index.jade create mode 100644 views/layout.jade diff --git a/README.md b/README.md index 63c92bc..41ea594 100644 --- a/README.md +++ b/README.md @@ -1 +1,22 @@ -# auth-passport \ No newline at end of file +# auth-passport + +auth-passport merupakan aplikasi sederhana dengan mengimplementasikan +otentikasi passport.js serta otorisasi jwt (json web token) + +# List Route +Route | HTTP | Description +--- | --- | --- +/api/signup | POST | Daftar ke dalam aplikasi +/api/signin | POST | Sign in ke dalam aplikasi +/api/users | GET | Mendapatkan data semua user + +# Usage + +# Usage +1. Install package depedency + + npm install + +2. Jalankan aplikasi dengan menggunakan : + node app.js / + nodemon app.js diff --git a/app.js b/app.js new file mode 100644 index 0000000..12fae44 --- /dev/null +++ b/app.js @@ -0,0 +1,58 @@ +var express = require('express'); +var path = require('path'); +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); + +var index = require('./routes/index'); +var users = require('./routes/users'); + +var userController = require('./controllers/userController') + +var app = express(); + +const mongoose = require('mongoose') +mongoose.connect('mongodb://localhost/passport') + +const passport = require('passport') +const Strategy = require('passport-local').Strategy + +passport.use(new Strategy(userController.signin)); + +// view engine setup +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', 'jade'); + +// uncomment after placing your favicon in /public +//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); +app.use(logger('dev')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'public'))); + +app.use(passport.initialize()); + +// app.use('/', index); +app.use('/api', users); + +// catch 404 and forward to error handler +app.use(function(req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); +}); + +// error handler +app.use(function(err, req, res, next) { + // set locals, only providing error in development + res.locals.message = err.message; + res.locals.error = req.app.get('env') === 'development' ? err : {}; + + // render the error page + res.status(err.status || 500); + res.render('error'); +}); + +module.exports = app; diff --git a/bin/www b/bin/www new file mode 100755 index 0000000..086a743 --- /dev/null +++ b/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('auth-passport:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '3000'); +app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/controllers/userController.js b/controllers/userController.js new file mode 100644 index 0000000..956a7ed --- /dev/null +++ b/controllers/userController.js @@ -0,0 +1,59 @@ +const User = require('../models/user'); +const passwordHash = require('password-hash'); +const auth = require('../helpers/verify.js').auth; +const methods = {}; + +methods.signup = (req, res) => { + var username = req.body.username; + var password = passwordHash.generate(req.body.password); + var role = req.body.role; + + User.create({ + username: username, + password: password, + role: role + }, (error, record) => { + if(error){ + res.json(error) + } else { + res.json(record) + } + }) +} + +methods.signin = (username, password, next) => { + + User.findOne({ + username: username + }) + .exec((error, record) => { + if (error) { + next() + } else { + if (passwordHash.verify(password, record.password)) { + let data = record.toJSON(); + delete data.id; + delete data.password; + next(null, {message: "Login Sukses", token:auth(data)}) + } else { + // next(error) + next(null, {message: "Password anda salah"}) + } + } + }) + +} + +methods.getUsers = (req, res) => { + + User.find({}, (error, records) => { + if (error) { + res.json(error) + } else { + res.json(records) + } + }) + +} + +module.exports = methods diff --git a/helpers/verify.js b/helpers/verify.js new file mode 100644 index 0000000..d9dcf93 --- /dev/null +++ b/helpers/verify.js @@ -0,0 +1,22 @@ +const jwt = require('jsonwebtoken'); + +module.exports= { + isAdmin: function(req,res,next){ + + jwt.verify(req.headers.token, 'secret', function(error, decoded){ + if(decoded) { + if(decoded.role === 'Admin'){ + next(); + } else { + res.json({message : 'Anda tidak dapat menggunakan fitur ini'}) + } + } else { + res.json({message: error}) + } + }) + }, + auth: function(data){ + let token = jwt.sign(data, 'secret', { expiresIn: '1h' }) + return token; + } +} diff --git a/models/user.js b/models/user.js new file mode 100644 index 0000000..5467ed2 --- /dev/null +++ b/models/user.js @@ -0,0 +1,20 @@ +const mongoose = require('mongoose') +const Schema = mongoose.Schema + +let userSchema = new Schema({ + username: { + type: String, + required: true + }, + password: { + type: String, + required: true + }, + role: { + type: String + } +}) + +let User = mongoose.model('User', userSchema) + +module.exports = User diff --git a/package.json b/package.json new file mode 100644 index 0000000..9e38039 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "auth-passport", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "nodemon ./bin/www" + }, + "dependencies": { + "body-parser": "~1.17.1", + "cookie-parser": "~1.4.3", + "debug": "~2.6.3", + "express": "~4.15.2", + "jade": "~1.11.0", + "morgan": "~1.8.1", + "passport": "^0.3.2", + "passport-local": "^1.0.0", + "serve-favicon": "~2.4.2" + }, + "devDependencies": { + "jsonwebtoken": "^7.4.0", + "mongoose": "^4.9.6", + "password-hash": "^1.2.2" + } +} diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/public/stylesheets/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/routes/index.js b/routes/index.js new file mode 100644 index 0000000..ecca96a --- /dev/null +++ b/routes/index.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET home page. */ +router.get('/', function(req, res, next) { + res.render('index', { title: 'Express' }); +}); + +module.exports = router; diff --git a/routes/users.js b/routes/users.js new file mode 100644 index 0000000..129e22a --- /dev/null +++ b/routes/users.js @@ -0,0 +1,23 @@ +var express = require('express'); +var router = express.Router(); +const userController = require('../controllers/userController'); +const helper = require('../helpers/verify.js'); +const passport = require('passport') + +// var Strategy = require('passport-local').Strategy; +// passport.use(new Strategy(userController.signin)); + +router.post('/signup', userController.signup) +// router.get('/users', helper.isAdmin, userController.getUsers) +router.get('/users', helper.isAdmin, userController.getUsers) + + +router.post('/signin', passport.authenticate('local', { + session: false +}), function(req, res) { + var user = req.user; + res.send(user); +}); + + +module.exports = router diff --git a/views/error.jade b/views/error.jade new file mode 100644 index 0000000..51ec12c --- /dev/null +++ b/views/error.jade @@ -0,0 +1,6 @@ +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} diff --git a/views/index.jade b/views/index.jade new file mode 100644 index 0000000..3d63b9a --- /dev/null +++ b/views/index.jade @@ -0,0 +1,5 @@ +extends layout + +block content + h1= title + p Welcome to #{title} diff --git a/views/layout.jade b/views/layout.jade new file mode 100644 index 0000000..15af079 --- /dev/null +++ b/views/layout.jade @@ -0,0 +1,7 @@ +doctype html +html + head + title= title + link(rel='stylesheet', href='/stylesheets/style.css') + body + block content