Skip to content

Commit d4c9687

Browse files
author
wayne-th
committed
auth & dotenv added
1 parent a6a3094 commit d4c9687

23 files changed

+2025
-1808
lines changed

config/config.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

config/env/development.js

Lines changed: 0 additions & 5 deletions
This file was deleted.

config/express.js

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
var config = require('./config'),
2-
express = require('express'),
3-
morgan = require('morgan'),
4-
compress = require('compression'),
5-
bodyParser = require('body-parser'),
6-
methodOverride = require('method-override')
7-
passport = require('passport'),
8-
helmet = require('helmet'),
9-
cors = require('cors'),
10-
ApiRoutes = require('./routes');
1+
const express = require('express');
2+
const morgan = require('morgan');
3+
const compress = require('compression');
4+
const bodyParser = require('body-parser');
5+
const methodOverride = require('method-override');
6+
const passport = require('passport');
7+
const helmet = require('helmet');
8+
const cors = require('cors');
9+
const ApiRoutes = require('../routes');
10+
const path = require('path');
1111

1212
module.exports = function () {
1313
var app = express();
1414

15-
if (process.env.NODE_DEV === 'development') {
15+
if (process.env.NODE_ENV === 'development') {
1616
app.use(morgan('dev'));
17-
} else if (process.env.NODE_DEV === 'production') {
17+
} else if (process.env.NODE_ENV === 'production') {
1818
app.use(compress());
1919
}
2020

@@ -24,23 +24,17 @@ module.exports = function () {
2424
app.use(bodyParser.json());
2525
app.use(methodOverride());
2626

27-
app.use(session({
28-
saveUninitialized: true,
29-
resave: true,
30-
secret: config.sessionSecret
31-
}));
32-
3327
app.use(passport.initialize());
3428
app.use(passport.session());
3529
app.use(helmet());
3630
app.use(cors());
3731

38-
app.use('/api', ApiRoutes);
32+
app.use(`/${process.env.API}`, ApiRoutes);
3933

4034
// require('../app/routes/index.routes.js') (app);
4135
// require('../app/routes/users.routes.js') (app);
4236

43-
app.use(express.static('./public'));
37+
app.use(express.static(path.join(__dirname, "public")));
4438

4539
return app;
4640
}

config/mongoose.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ module.exports = function() {
1010

1111
// Connect the db with the url provide
1212
try {
13-
var db = mongoose.connect(config.db);
13+
var db = mongoose.connect(process.env.DB_URL);
1414
} catch (err) {
15-
var db = mongoose.createConnection(config.db);
15+
var db = mongoose.createConnection(process.env.DB_URL);
1616
}
1717

1818
mongoose.connection
@@ -21,7 +21,7 @@ module.exports = function() {
2121
throw e;
2222
});
2323

24-
require('../models/user.models');
24+
require('../models/user.model');
2525

2626
return db;
2727
};

config/passport.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
var passport = require('passport'),
2-
mongoose = require('mongoose');
1+
const passport = require('passport');
2+
const mongoose = require('mongoose');
33

44
module.exports = function() {
55
var User = mongoose.model('User');
@@ -16,6 +16,7 @@ module.exports = function() {
1616
});
1717
});
1818

19-
require('./strategies/local.js')();
19+
require('./strategies/register.js')();
20+
require('./strategies/login.js')();
2021
require('./strategies/jwt.js')();
2122
}

config/strategies/jwt.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
1-
var passport = require('passport'),
2-
User = require('mongoose').model('User');
3-
4-
import { Strategy as JWTStrategy, ExtractJwt } from 'passport-jwt';
1+
const passport = require('passport');
2+
const User = require('mongoose').model('User');
53

4+
const JWTStrategy = require('passport-jwt').Strategy;
5+
const ExtractJwt = require('passport-jwt').ExtractJwt;
66

77
/**
88
* JWT Strategy Auth
99
*/
1010
const jwtOpts = {
1111
// Telling Passport to check authorization headers for JWT
12-
jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('JWT'),
12+
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
1313
// Telling Passport where to find the secret
14-
secretOrKey: constants.JWT_SECRET,
14+
secretOrKey: process.env.JWT_SECRET,
1515
};
1616

1717
module.exports = function() {
18-
passport.use(new JWTStrategy(jwtOpts, function(payload, done){
19-
User.findById(payload._id , function(err, user) {
18+
passport.use(
19+
'jwt',
20+
new JWTStrategy(jwtOpts, function(payload, done){
21+
User.findById(payload._id).then((user, err) => {
2022
if (err) {
2123
return done(err, false);
2224
}

config/strategies/local.js

Lines changed: 0 additions & 29 deletions
This file was deleted.

config/strategies/login.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
const passport = require('passport');
2+
const LocalStrategy = require('passport-local').Strategy;
3+
const User = require('mongoose').model('User');
4+
5+
module.exports = function() {
6+
passport.use(
7+
'login',
8+
new LocalStrategy({
9+
usernameField: 'email',
10+
passwordField: 'password'
11+
}, (username, password, done) => {
12+
User.findOne({
13+
email: username
14+
}, (err, user) => {
15+
if (err) {
16+
return done(err);
17+
}
18+
19+
if (!user) {
20+
return done(null, false, {
21+
message: 'invalid username',
22+
});
23+
}
24+
25+
if (!user.authenticateUser(password)) {
26+
return done(null, false, {
27+
message: 'invalid password',
28+
});
29+
}
30+
31+
return done(null, user);
32+
});
33+
}));
34+
};
35+
36+
37+
38+

config/strategies/register.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
const passport = require('passport');
2+
const LocalStrategy = require('passport-local').Strategy;
3+
const User = require('mongoose').model('User');
4+
5+
module.exports = function() {
6+
passport.use(
7+
'register',
8+
new LocalStrategy({
9+
usernameField: 'email',
10+
passwordField: 'password'
11+
}, (username, password, done) => {
12+
User.findOne({
13+
username: username
14+
}, (err, user) => {
15+
if (err) {
16+
return done(err);
17+
}
18+
19+
if (user) {
20+
return done(null, false, {
21+
message: 'username already taken',
22+
});
23+
}
24+
25+
User.create({email: username, password})
26+
.then(user => {
27+
return done(null, user);
28+
});
29+
});
30+
}));
31+
};

controllers/auth.controller.js

Lines changed: 35 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -1,109 +1,39 @@
1-
import User from '../models/user.model';
1+
const User = require('../models/user.model');
2+
const authCtrl = {};
23

3-
import HTTPStatus from 'http-status';
4-
import Joi from 'joi';
5-
6-
export const validation = {
7-
login: {
8-
body: {
9-
email: Joi.string()
10-
.email()
11-
.required(),
12-
password: Joi.string()
13-
.regex(/^[a-zA-Z0-9]{3,30}$/)
14-
.required(),
15-
},
16-
},
17-
create: {
18-
body: {
19-
email: Joi.string()
20-
.email()
21-
.required(),
22-
password: Joi.string()
23-
.min(6)
24-
.regex(/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/)
25-
.required(),
26-
username: Joi.string()
27-
.min(3)
28-
.max(20)
29-
.required(),
30-
},
31-
},
32-
};
33-
34-
35-
/**
36-
* @api {post} /users/login Login a user
37-
* @apiDescription Login a user
38-
* @apiName loginUser
39-
* @apiGroup User
40-
*
41-
* @apiParam (Body) {String} email User email.
42-
* @apiParam (Body) {String} password User password.
43-
*
44-
* @apiSuccess {Number} status Status of the Request.
45-
* @apiSuccess {String} _id User _id.
46-
* @apiSuccess {String} token Authentication token.
47-
*
48-
* @apiSuccessExample Success-Response:
49-
*
50-
* HTTP/1.1 200 OK
51-
*
52-
* {
53-
* _id: '123',
54-
* token: 'JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1OTBhMWI3ODAzMDI3N2NiNjQxM2JhZGUiLCJpYXQiOjE0OTM4MzQ2MTZ9.RSlMF6RRwAALZQRdfKrOZWnuHBk-mQNnRcCLJsc8zio',
55-
* }
56-
*
57-
* @apiErrorExample {json} Error
58-
* HTTP/1.1 400 Bad Request
59-
*
60-
* {
61-
* email: 'email is required'
62-
* }
63-
*/
64-
65-
export async function login(req, res, next) {
66-
res.status(HTTPStatus.OK).json(req.user.toAuthJSON());
4+
authCtrl.register = (req, res, next) => {
5+
const data = {
6+
name: req.body.name,
7+
username: req.body.username,
8+
email: req.user.email,
9+
};
10+
User.findOne({
11+
email: data.email
12+
})
13+
.then(user => {
14+
user.updateOne(data)
15+
.then(user => {
16+
res.status(200).send(user.toAuthJSON());
17+
})
18+
})
19+
}
6720

68-
return next();
21+
authCtrl.login = (req, res, next) => {
22+
User.findOne({
23+
username: req.user.username
24+
})
25+
.then(user => {
26+
res.status(200).send(user.toAuthJSON());
27+
})
6928
}
7029

71-
/**
72-
* @api {post} /users/signup Create a user
73-
* @apiDescription Create a user
74-
* @apiName createUser
75-
* @apiGroup User
76-
*
77-
* @apiParam (Body) {String} email User email.
78-
* @apiParam (Body) {String} password User password.
79-
* @apiParam (Body) {String} username User username.
80-
*
81-
* @apiSuccess {Number} status Status of the Request.
82-
* @apiSuccess {String} _id User _id.
83-
* @apiSuccess {String} token Authentication token.
84-
*
85-
* @apiSuccessExample Success-Response:
86-
*
87-
* HTTP/1.1 200 OK
88-
*
89-
* {
90-
* _id: '123',
91-
* token: 'JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1OTBhMWI3ODAzMDI3N2NiNjQxM2JhZGUiLCJpYXQiOjE0OTM4MzQ2MTZ9.RSlMF6RRwAALZQRdfKrOZWnuHBk-mQNnRcCLJsc8zio',
92-
* }
93-
*
94-
* @apiErrorExample {json} Error
95-
* HTTP/1.1 400 Bad Request
96-
*
97-
* {
98-
* email: 'email is required'
99-
* }
100-
*/
101-
export async function create(req, res, next) {
102-
try {
103-
const user = await User.create(req.body);
104-
return res.status(HTTPStatus.CREATED).json(user.toAuthJSON());
105-
} catch (e) {
106-
e.status = HTTPStatus.BAD_REQUEST;
107-
return next(e);
108-
}
109-
}
30+
authCtrl.tokenLogin = async (user, req, res, next) => {
31+
User.findOne({
32+
username: user.username
33+
})
34+
.then(user => {
35+
res.status(200).send(user.toAuthJSON());
36+
})
37+
};
38+
39+
module.exports = authCtrl;

0 commit comments

Comments
 (0)