ifms-printer-manager/src/server.ts

68 lines
1.7 KiB
TypeScript
Raw Normal View History

2023-06-15 19:55:09 +00:00
import express, { Request, Response } from 'express'
import bodyParser from 'body-parser'
import { injectUserMiddleware } from './middleware/injectUserMiddleware.js'
import { authMiddleware } from './middleware/authMiddleware.js'
import { hasRolesMiddleware } from './middleware/hasRolesMiddleware.js'
import { RequestWithUser } from './types/RequestWithUser.js'
import { UserRouteController } from './controllers/routes/UserRouteController.js'
import { AuthenticationController } from './controllers/AuthenticationController.js'
export const app = express()
app.use('/', express.static('public'))
app.use(injectUserMiddleware)
app.use(bodyParser.json())
// Test route
app.get('/api/', async (req: Request, res: Response) => {
res.json({ message: 'Hello!' })
})
// Login route
app.post('/api/login', async (req: Request, res: Response) => {
const { username, password } = req.body
if (!username || !password)
return res.status(400).json({ error: 'Missing username or password' })
try {
const token = await AuthenticationController.login(username, password)
res.json({ token })
} catch (error: any) {
res.status(401).json({ error: error.message })
}
})
app.get(
'/api/me',
authMiddleware,
async (req: RequestWithUser, res: Response) => res.json(req.user)
)
app.get(
'/api/protected',
authMiddleware,
async (req: RequestWithUser, res: Response) => {
res.json('Hello protected world! ' + req.user?.displayName)
}
)
app.get(
'/api/admin',
hasRolesMiddleware(['ADMIN']),
async (req: RequestWithUser, res: Response) => {
res.json('Hello Admin!' + req.user?.username)
}
)
app.get(
'/api/user/:username',
hasRolesMiddleware(['ADMIN']),
UserRouteController.getOne
)