|
const fs = require('fs'); |
|
const bodyParser = require('body-parser'); |
|
const jsonServer = require('json-server'); |
|
const jwt = require('jsonwebtoken'); |
|
const tokenHelper = require('./tokenHelper'); |
|
|
|
const server = jsonServer.create(); |
|
const router = jsonServer.router('./api/db.json'); |
|
const userdb = JSON.parse(fs.readFileSync('./api/users.json', 'UTF-8')); |
|
|
|
server.use(bodyParser.urlencoded({extended: true})); |
|
server.use(bodyParser.json()); |
|
|
|
const isAuth = ({ email, password }) => { |
|
let authStatus = userdb.users.findIndex(u => u.email === email && u.password === password); |
|
return authStatus !== -1; |
|
}; |
|
|
|
server.post('/auth/login', (req, res) => { |
|
const {email, password} = req.body |
|
if (!isAuth({ email, password })) { |
|
const status = 401; |
|
const message = 'Incorrect email or password'; |
|
res.status(status).json({status, message}); |
|
return; |
|
} |
|
const access_token = tokenHelper.sign({ email, password }); |
|
res.status(200).json({ access_token }); |
|
}); |
|
|
|
server.use(/^(?!\/auth).*$/, (req, res, next) => { |
|
let token = ''; |
|
|
|
if (req.headers.authorization === undefined || req.headers.authorization.split(' ')[0] !== 'Bearer'){ |
|
const status = 401; |
|
const msg = 'Bad authorization header'; |
|
res.status(status).json({ status, msg }); |
|
return; |
|
} |
|
|
|
if (req.headers.authorization.split(' ')[1].length > 0) |
|
token = req.headers.authorization.split(' ')[1]; |
|
|
|
try { |
|
if (tokenHelper.verify(token)) { |
|
next(); |
|
} else { |
|
const status = 401; |
|
const msg = 'You are not authorized'; |
|
res.status(status).json({ status, msg }); |
|
}; |
|
} |
|
catch (e) { |
|
const status = 401; |
|
const message = 'Auth token is not valid'; |
|
res.status(status).json({status, message}); |
|
} |
|
}); |
|
|
|
server.use(router); |
|
|
|
server.listen(3000, () => { |
|
console.log('Running the api server with auth'); |
|
}); |