Ticker

6/recent/ticker-posts

Header Ads Widget

JWT Authentication Code with usecses

your title goes here


    your headings

    your content goes here
    const express = require('express') const bcrypt = require('bcrypt') const path = require('path') const {open} = require('sqlite') const sqlite3 = require('sqlite3') const jwt = require('jsonwebtoken') const app = express() app.use(express.json()) const dbPath = path.join(__dirname, 'covid19IndiaPortal.db') let db = null const initailSetupDB = async () => { try { db = await open({ filename: dbPath, driver: sqlite3.Database, }) app.listen(3000, () => { console.log('Server Started at http://localhost:3000') }) } catch (e) { console.log(`DB Error: ${e.message}`) process.exit(1) } } initailSetupDB() const authenticateToken = (request, response, next) => { let jwtToken const authHeader = request.headers['authorization'] if (authHeader !== undefined) { jwtToken = authHeader.split(' ')[1] } if (jwtToken === undefined) { response.status(401) response.send('Invalid JWT Token') } else { jwt.verify(jwtToken, 'MY_SECRET_TOKEN', async (error, payload) => { if (error) { response.status(401) response.send('Invalid JWT Token') } else { next() } }) } } // API 1 app.post('/users/', async (request, response) => { const {username, name, password, gender, location} = request.body const hashedPassword = await bcrypt.hash(request.body.password, 10) const selectUserQuery = `SELECT * FROM user WHERE username = '${username}'` const dbUser = await db.get(selectUserQuery) if (dbUser === undefined) { const createUserQuery = ` INSERT INTO user (username, name, password, gender, location) VALUES ( '${username}', '${name}', '${hashedPassword}', '${gender}', '${location}' )` const dbResponse = await db.run(createUserQuery) const newUserId = dbResponse.lastID response.send(`Created new user with ${newUserId}`) } else { response.status = 400 response.send('User already exists') } }) app.post('/login', async (request, response) => { const {username, password} = request.body const selectUserQuery = `SELECT * FROM user WHERE username = '${username}'` const dbUser = await db.get(selectUserQuery) if (dbUser === undefined) { response.status(400) response.send('Invalid user') } else { const isPasswordMatched = await bcrypt.compare(password, dbUser.password) if (isPasswordMatched === true) { const payload = { username: username, } const jwtToken = jwt.sign(payload, 'MY_SECRET_TOKEN') response.send({jwtToken}) } else { response.status(400) response.send('Invalid password') } } }) // API 2 app.get('/states', authenticateToken, async (request, response) => { const ans = state => { return { stateId: state.state_id, stateName: state.state_name, population: state.population, } } const getStateDetails = `SELECT * FROM state` const stateList = await db.all(getStateDetails) response.send(stateList.map(state => ans(state))) }) // API 3 app.get('/states/:stateId/', authenticateToken, async (request, response) => { const {stateId} = request.params const ans = state => { return { stateId: state.state_id, stateName: state.state_name, population: state.population, } } const stateDetailsQuery = `SELECT * FROM state where state_id = ${stateId}` const stateDetails = await db.get(stateDetailsQuery) response.send(ans(stateDetails)) }) // API 4 app.post('/districts/', authenticateToken, async (request, response) => { const {districtName, stateId, cases, cured, active, deaths} = request.body const addDistrictQuery = `INSERT INTO district(district_name, state_id, cases, cured, active, deaths) values( '${districtName}', ${stateId}, ${cases}, ${cured}, ${active}, ${deaths})` await db.run(addDistrictQuery) response.send('District Successfully Added') }) // API 5 app.get( '/districts/:districtId/', authenticateToken, async (request, response) => { const {districtId} = request.params const districtDetilsQuery = ` SELECT * FROM district WHERE district_id=${districtId} ` const ans = detail => { return { districtId: detail.district_id, districtName: detail.district_name, stateId: detail.state_id, cases: detail.cases, cured: detail.cured, active: detail.active, deaths: detail.deaths, } } const districtDetails = await db.get(districtDetilsQuery) response.send(ans(districtDetails)) }, ) // API 6 app.delete( '/districts/:districtId/', authenticateToken, async (request, response) => { const {districtId} = request.params const deleteDistrictQuery = `DELETE FROM district WHERE district_id=${districtId}` await db.run(deleteDistrictQuery) response.send('District Removed') }, ) // API 7 app.put( '/districts/:districtId/', authenticateToken, async (request, response) => { const {districtId} = request.params const {districtName, stateId, cases, cured, active, deaths} = request.body const updateNewDistrict = ` UPDATE district SET district_name= '${districtName}', state_id =${stateId}, cases =${cases}, cured =${cured}, active=${active}, deaths=${deaths} WHERE district_id = ${districtId} ` await db.run(updateNewDistrict) response.send('District Details Updated') }, ) // API 8 app.get( '/states/:stateId/stats/', authenticateToken, async (request, response) => { const {stateId} = request.params const stateDetailsQuey = ` SELECT sum(cases) as total_cases, sum(cured) as total_cured, sum(active) as total_active, sum(deaths) as total_deaths FROM state inner join district on state.state_id = district.state_id where state.state_id = ${stateId}` const ans = detail => { return { totalCases: detail.total_cases, totalCured: detail.total_cured, totalActive: detail.total_active, totalDeaths: detail.total_deaths, } } const details = await db.get(stateDetailsQuey) response.send(ans(details)) }, ) module.exports = app

    Post a Comment

    0 Comments