Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions 05-JWT-Basics/starter/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ require('express-async-errors');
const express = require('express');
const app = express();

const mainRouter = require('./routes/main')
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You imported the main router, but you forgot to use it.
Add the following line right above the 'app.use(notFoundMiddleware);':
app.use("/api/v1", mainRouter);

const notFoundMiddleware = require('./middleware/not-found');
const errorHandlerMiddleware = require('./middleware/error-handler');

// middleware
app.use(express.static('./public'));
app.use(express.json());

app.use('/api/v1', mainRouter)
app.use(notFoundMiddleware);
app.use(errorHandlerMiddleware);

Expand Down
16 changes: 16 additions & 0 deletions 05-JWT-Basics/starter/controllers/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const {BadRequest} = require('../errors/index')

const dashboard = async (req, res) => {


const luckyNumber = Math.floor( Math.random() * 100 )

res.status(200).json({msg: `Hello, ${req.user.username}`,
secret: `Here's your authorized data, your lucky number is ${luckyNumber}`})

}

module.exports = {
login,
dashboard
}
11 changes: 11 additions & 0 deletions 05-JWT-Basics/starter/errors/bad-request.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const CustomAPIError = require('./custom-error')
const {StatusCodes} = require('http-status-codes')

class BadRequest extends CustomAPIError {
constructor(message) {
super(message)
this.statusCode = StatusCodes.BAD_REQUEST
}
}

module.exports = BadRequest
1 change: 0 additions & 1 deletion 05-JWT-Basics/starter/errors/custom-error.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
class CustomAPIError extends Error {
constructor(message, statusCode) {
super(message)
this.statusCode = statusCode
}
}

Expand Down
10 changes: 10 additions & 0 deletions 05-JWT-Basics/starter/errors/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const CustomAPIError = require('./custom-error')
const BadRequest = require('./bad-request')
const UnauthenticatedError = require('./unauthenticated')


module.exports = {
CustomAPIError,
BadRequest,
UnauthenticatedError
}
11 changes: 11 additions & 0 deletions 05-JWT-Basics/starter/errors/unauthenticated.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const CustomAPIError = require('./custom-error')
const {StatusCodes} = require('http-status-codes')

class UnauthenticatedError extends CustomAPIError {
constructor(message) {
super(message)
this.statusCode = StatusCodes.UNAUTHORIZED
}
}

module.exports = UnauthenticatedError
24 changes: 24 additions & 0 deletions 05-JWT-Basics/starter/middleware/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const {UnauthenticatedError} = require('../errors/index')
const jwt = require('jsonwebtoken')

const authMiddleware = async (req, res, next) => {
const authHeader = req.headers.authorization;

if (!authHeader || !authHeader.startsWith('Bearer ')) {
throw new UnauthenticatedError('no token provided')
}

const token = authHeader.split(' ')[1]

try {
const decoded = jwt.verify(token, process.env.JWT_SECRET)
const {id, username} = decoded
req.user = {id, username}
next()
} catch (error) {
throw new UnauthenticatedError('Not authorized to access this route')
}

}

module.exports = authMiddleware
5 changes: 3 additions & 2 deletions 05-JWT-Basics/starter/middleware/error-handler.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
const CustomAPIError = require('../errors/custom-error')
const {CustomAPIError} = require('../errors/index')
const {StatusCodes} = require('http-status-codes')
const errorHandlerMiddleware = (err, req, res, next) => {
if (err instanceof CustomAPIError) {
return res.status(err.statusCode).json({ msg: err.message })
}
return res.status(500).send('Something went wrong try again later')
return res.status(StatusCodes.INTERNAL_SERVER_ERROR).send('Something went wrong try again later')
}

module.exports = errorHandlerMiddleware
11 changes: 11 additions & 0 deletions 05-JWT-Basics/starter/routes/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const express = require('express')
const router = express.Router()

const {login, dashboard} = require('../controllers/main')

const auth = require('../middleware/auth')

router.route('/dashboard').get(auth, dashboard)
router.route('/login').post(login)

module.exports = router