Skip to content

Elizabeth hagag #28

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
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
13 changes: 13 additions & 0 deletions __tests__/users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const { default: expectCt } = require('helmet/dist/middlewares/expect-ct')
const supertest = require('supertest')
const server= require('../api/server')
const db = require('../database/dbConfig')

describe('auth testing',() => {
it('adds users', async () => {
const res = await supertest(server)
.post('/register')
.send({username: "hello", password: "shifnf"})
expect(res.statusCode).toBe(201)
})
})
17 changes: 13 additions & 4 deletions api/server.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
require('dotenv').config();

const express = require('express');
const cors = require('cors');
const helmet = require('helmet');

const authenticate = require('../auth/authenticate-middleware.js');
const { restrict } = require('../auth/authenticate-middleware.js');
const authRouter = require('../auth/auth-router.js');
const jokesRouter = require('../jokes/jokes-router.js');

Expand All @@ -12,7 +14,14 @@ server.use(helmet());
server.use(cors());
server.use(express.json());

server.use('/api/auth', authRouter);
server.use('/api/jokes', authenticate, jokesRouter);
server.use(authRouter);
server.use('/api/jokes', restrict, jokesRouter);

server.use((err, req, res, next) => {
console.log(err)
res.status(500).json({
message: "Something went wrong",
})
})

module.exports = server;
module.exports = server;
72 changes: 68 additions & 4 deletions auth/auth-router.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,75 @@
const router = require('express').Router();

router.post('/register', (req, res) => {
// implement registration
const User = require('./users-model')

const {restrict} = require('./authenticate-middleware')

const bcrypt = require('bcryptjs')

const jwt = require('jsonwebtoken')


router.post('/register', async (req, res, next) => {
try {
const { username, password} = req.body

const user = await User.findBy({username}).first()

if(user) {
return res.status(409).json({
message: "Username is Taken"
})
}

const addUser = await User.add({
username,
password: await bcrypt.hash(password, 14)
})

res.status(201).json(addUser)

} catch(err) {
next(err)
}
});

router.post('/login', (req, res) => {
// implement login
router.post('/login', async (req, res) => {
try {
const { username, password} = req.body
const user = await User.findBy({username}).first()

if (!user ) {
return res.status(401).json({
message: "Invalid User"
})
}

const validPassword = await bcrypt.compare(password, user.password)

if(!validPassword) {
return res.status(401).json({
message: "Invalid Password"
})
}

//create new JSON toke with user details

const token = jwt.sign({
userID: user.id,
}, process.env.JWT_SECRET)

// req.session.user = user

// save client cookie

res.cookie("token", token)

res.json({
message: `Welcome ${user.username} !!!!`
})
} catch(err) {

}
});

module.exports = router;
23 changes: 20 additions & 3 deletions auth/authenticate-middleware.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,23 @@
before granting access to the next middleware/route handler
*/

module.exports = (req, res, next) => {
res.status(401).json({ you: 'shall not pass!' });
};
const bcrypt = require('bcryptjs')
const Users = require('./users-model')

function restrict() {
return async (req,res,next) => {
try {

if(!req.session || !req.user ) {
return res.status(401).json()
}

} catch(err) {
next(err)
}
}
}

module.exports = {
restrict
}
30 changes: 30 additions & 0 deletions auth/users-model.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const db = require('../database/dbConfig')

async function add(user) {
const [id] = await db('users').insert(user)
return findById(id)
}

function findById(id) {
return db('users')
.select('id', 'username')
.where({id})
.first()
}

function find(id) {
return db('users').select('id','username')
}

function findBy(filter) {
return db('users')
.select('id','username','password')
.where(filter)
}

module.exports = {
add,
findById,
find,
findBy
}
Binary file modified database/auth.db3
Binary file not shown.
3 changes: 3 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@


const server = require('./api/server.js');

const PORT = process.env.PORT || 3300;

server.listen(PORT, () => {
console.log(`\n=== Server listening on port ${PORT} ===\n`);
});
15 changes: 13 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
{
"private": true,
"name": "nodeauth-challenge",
"version": "1.0.0",
"description": "Authentication Sprint Challenge",
"main": "index.js",
"scripts": {
"server": "nodemon index.js"
"server": "nodemon index.js",
"start": " node index.js",
"test": "jest --watch"
},
"jest": {
"testEnvironment": "node"
},
"repository": {
"type": "git",
Expand All @@ -19,11 +25,16 @@
"homepage": "https://github.com/LambdaSchool/Sprint-Challenge-Authentication#readme",
"dependencies": {
"axios": "^0.20.0",
"bcryptjs": "^2.4.3",
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"helmet": "^4.1.1",
"jest": "^26.6.3",
"jsonwebtoken": "^8.5.1",
"knex": "^0.21.6",
"sqlite3": "^5.0.0"
"sqlite3": "^5.0.0",
"supertest": "^6.0.1"
},
"devDependencies": {
"nodemon": "^2.0.5"
Expand Down