Skip to content

Commit 5626687

Browse files
committed
Boiler plate with auth module
boiler plate code using express genrator added jwt middleware added db connection created user model -> need to be renamed as login details added endpoints for adding user, validate, authenticate
1 parent d711ebc commit 5626687

File tree

13 files changed

+2951
-0
lines changed

13 files changed

+2951
-0
lines changed

app.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
const express = require('express');
2+
const path = require('path');
3+
const logger = require('morgan');
4+
const cookieParser = require('cookie-parser');
5+
const cors = require('cors');
6+
7+
const indexRouter = require('./routes/index');
8+
const usersRouter = require('./routes/users');
9+
const authRouter = require('./routes/auth');
10+
11+
const app = express();
12+
13+
app.use(cors());
14+
app.use(logger('dev'));
15+
app.use(express.json());
16+
app.use(express.urlencoded({ extended: false }));
17+
app.use(cookieParser());
18+
app.use(express.static(path.join(__dirname, 'public')));
19+
20+
app.use('/', indexRouter);
21+
app.use('/users', usersRouter);
22+
app.use('/auth', authRouter);
23+
24+
module.exports = app;

bin/www

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
#!/usr/bin/env node
2+
3+
/**
4+
* Module dependencies.
5+
*/
6+
7+
let app = require('../app');
8+
let debug = require('debug')('api:server');
9+
let http = require('http');
10+
require("dotenv").config()
11+
12+
13+
/**
14+
* Get port from environment and store in Express.
15+
*/
16+
17+
let port = normalizePort(process.env.PORT || '3000');
18+
app.set('port', port);
19+
20+
/**
21+
* Create HTTP server.
22+
*/
23+
24+
let server = http.createServer(app);
25+
26+
/**
27+
* Listen on provided port, on all network interfaces.
28+
*/
29+
30+
server.listen(port);
31+
server.on('error', onError);
32+
server.on('listening', onListening);
33+
34+
35+
/**
36+
* Normalize a port into a number, string, or false.
37+
*/
38+
39+
function normalizePort(val) {
40+
let port = parseInt(val, 10);
41+
42+
if (isNaN(port)) {
43+
// named pipe
44+
return val;
45+
}
46+
47+
if (port >= 0) {
48+
// port number
49+
return port;
50+
}
51+
52+
return false;
53+
}
54+
55+
/**
56+
* Event listener for HTTP server "error" event.
57+
*/
58+
59+
function onError(error) {
60+
if (error.syscall !== 'listen') {
61+
throw error;
62+
}
63+
64+
let bind = typeof port === 'string'
65+
? 'Pipe ' + port
66+
: 'Port ' + port;
67+
68+
// handle specific listen errors with friendly messages
69+
switch (error.code) {
70+
case 'EACCES':
71+
console.error(bind + ' requires elevated privileges');
72+
process.exit(1);
73+
break;
74+
case 'EADDRINUSE':
75+
console.error(bind + ' is already in use');
76+
process.exit(1);
77+
break;
78+
default:
79+
throw error;
80+
}
81+
}
82+
83+
/**
84+
* Event listener for HTTP server "listening" event.
85+
*/
86+
87+
function onListening() {
88+
let addr = server.address();
89+
let bind = typeof addr === 'string'
90+
? 'pipe ' + addr
91+
: 'port ' + addr.port;
92+
debug('Listening on ' + bind);
93+
}

middleware/auth.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const jwt = require('jsonwebtoken');
2+
3+
function authenticateToken(req, res, next) {
4+
const authHeader = req.headers['authorization'];
5+
const token = authHeader && authHeader.split(' ')[1];
6+
if (token == null) return res.sendStatus(401);
7+
jwt.verify(token, process.env.TOKEN_SECRET, (err, user) => {
8+
9+
if (err) return res.sendStatus(403);
10+
11+
req.user = user;
12+
13+
next();
14+
})
15+
}
16+
17+
module.exports = authenticateToken;

models/databaseUtil.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const mongoose = require('mongoose');
2+
require("dotenv").config();
3+
4+
mongoose.set('strictQuery', true);
5+
mongoose.connect(`${process.env.DB_URL}`);
6+
7+
8+
module.exports = { connector:mongoose };

models/user.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
const {connector} = require('./databaseUtil');
2+
3+
const userSchema = {
4+
name: {type: String, required: true},
5+
emailId: {type: String, unique: true, required: true},
6+
password: {type: String, required: true},
7+
uid: {type: String, unique: true, required: true},
8+
userType: {type: String, required: true}
9+
}
10+
11+
const User = new connector.model('User', userSchema);
12+
13+
14+
async function createUser(name, password, emailId, uid, userType){
15+
const user = new User({
16+
name: name,
17+
password:password,
18+
emailId: emailId,
19+
uid: uid,
20+
userType: userType
21+
});
22+
let newUser = {};
23+
await user.save().then((savedUser) => {
24+
newUser = savedUser ;
25+
})
26+
.catch(err=>newUser.err=err);
27+
return newUser;
28+
}
29+
30+
async function validateUser(uid, pass){
31+
let user = await User.findOne({uid: uid}).catch(err=>console.log(err))
32+
if(user){
33+
if(user.password==pass)
34+
return user
35+
return null;
36+
}
37+
return null;
38+
}
39+
40+
module.exports = {validateUser:validateUser, createUser:createUser};

0 commit comments

Comments
 (0)