added user model and users handler
parent
6359baee5b
commit
d30014b432
@ -1,2 +0,0 @@
|
||||
drop TABLE products;
|
||||
DROP TABLE users;
|
@ -0,0 +1,2 @@
|
||||
DROP TABLE products;
|
||||
DROP TABLE users;
|
@ -0,0 +1,129 @@
|
||||
import express, { Request, Response, NextFunction } from 'express'
|
||||
import { User, UserStore } from '../models/user'
|
||||
import jwt, {Secret} from 'jsonwebtoken'
|
||||
|
||||
const SECRET = process.env.TOKEN_SECRET as Secret
|
||||
|
||||
const userRoutes = (app: express.Application) => {
|
||||
app.get('/users', index)
|
||||
app.get('/users/:id', read)
|
||||
app.post('/users/create', verifyAuthToken, create)
|
||||
app.put('/users/:id', verifyAuthToken, update)
|
||||
app.delete('/users/:id', verifyAuthToken, destroy)
|
||||
app.post("/users/auth", authenticate)
|
||||
}
|
||||
|
||||
const store = new UserStore()
|
||||
|
||||
const verifyAuthToken = (req: Request, res: Response, next: NextFunction) => {
|
||||
if (!req.headers.authorization) {
|
||||
res.status(401)
|
||||
res.json("Access denied, invalid token")
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
try {
|
||||
//const authorizationHeader = req.headers.authorization
|
||||
const token = req.headers.authorization.split(" ")[1]
|
||||
const decoded = jwt.verify(token, SECRET)
|
||||
next()
|
||||
} catch (err) {
|
||||
res.status(401)
|
||||
res.json("Access denied, invalid token")
|
||||
}
|
||||
}
|
||||
|
||||
let verifyUserToken = (user: User | null) => {
|
||||
return jwt.sign({ user }, SECRET)
|
||||
}
|
||||
|
||||
|
||||
|
||||
const index = async (req: Request, res: Response) => {
|
||||
try {
|
||||
const users = await store.index()
|
||||
res.json(users);
|
||||
} catch (err) {
|
||||
res.status(400)
|
||||
res.json(err)
|
||||
}
|
||||
}
|
||||
|
||||
const read = async (req: Request, res: Response) => {
|
||||
try {
|
||||
const user = await store.read(parseInt(req.params.id))
|
||||
res.json(user)
|
||||
} catch (err) {
|
||||
res.status(400)
|
||||
res.json(err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
const create = async (req: Request, res: Response) => {
|
||||
|
||||
const userInfo: User = {
|
||||
firstName: req.body.fristName,
|
||||
lastName: req.body.lastName,
|
||||
username: req.body.username,
|
||||
password: req.body.password
|
||||
}
|
||||
|
||||
try {
|
||||
const newUser = await store.create(userInfo)
|
||||
res.json(verifyUserToken(newUser))
|
||||
} catch(err) {
|
||||
res.status(400)
|
||||
res.json(err)
|
||||
}
|
||||
}
|
||||
|
||||
const update = async (req: Request, res: Response) => {
|
||||
try {
|
||||
const user = await store.update(req.body)
|
||||
res.json({
|
||||
firstName: req.body.fristName,
|
||||
lastName: req.body.lastName,
|
||||
username: req.body.username,
|
||||
password: req.body.password
|
||||
})
|
||||
} catch (err) {
|
||||
res.status(400)
|
||||
res.json(err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const destroy = async (req: Request, res: Response) => {
|
||||
try {
|
||||
const deleted = await store.delete(req.body.id)
|
||||
res.json(deleted)
|
||||
} catch (err) {
|
||||
res.status(400)
|
||||
res.json(err)
|
||||
}
|
||||
}
|
||||
|
||||
const authenticate = async (req: Request, res: Response) => {
|
||||
const userInfo: User = {
|
||||
username: req.body.username,
|
||||
password: req.body.password
|
||||
}
|
||||
|
||||
if (userInfo.username === undefined || userInfo.password === undefined) {
|
||||
res.status(400)
|
||||
}
|
||||
|
||||
try {
|
||||
const auth: User | null = await store.authenticate(userInfo.username, userInfo.password)
|
||||
res.json(verifyUserToken(auth))
|
||||
} catch(err) {
|
||||
res.status(401)
|
||||
res.json(err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export default userRoutes
|
Loading…
Reference in New Issue