summary refs log tree commit diff
path: root/src/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/api')
-rw-r--r--src/api/middlewares/authMiddleware.js25
-rw-r--r--src/api/middlewares/index.js2
-rw-r--r--src/api/routes.js26
-rw-r--r--src/api/routes/auth/accountRoutes.js36
-rw-r--r--src/api/routes/auth/deviceRoutes.js36
-rw-r--r--src/api/routes/auth/index.js2
-rw-r--r--src/api/routes/auth/registerRoute.js20
7 files changed, 122 insertions, 25 deletions
diff --git a/src/api/middlewares/authMiddleware.js b/src/api/middlewares/authMiddleware.js
new file mode 100644

index 0000000..4cdbb51 --- /dev/null +++ b/src/api/middlewares/authMiddleware.js
@@ -0,0 +1,25 @@ +import { validateJwtToken } from '#util/jwtUtils.js'; +import { DbUser } from '#db/schemas/index.js'; + +/** + * @param options {AuthValidationOptions} + * @returns {(function(*, *, *): void)|*} + */ +export function validateAuth(options) { + return async function (req, res, next) { + var auth = validateJwtToken(req.headers.authorization); + if (!auth) { + res.status(401).send('Unauthorized'); + return; + } + + req.user = await DbUser.findById(auth.id).exec(); + + req.auth = auth; + req = next(); + }; +} + +class AuthValidationOptions { + roles; +} diff --git a/src/api/middlewares/index.js b/src/api/middlewares/index.js
index 1894f1a..f712465 100644 --- a/src/api/middlewares/index.js +++ b/src/api/middlewares/index.js
@@ -1,2 +1,4 @@ export * from './corsMiddleware.js'; export * from './loggingMiddleware.js'; +export * from './errorMiddleware.js'; +export * from './authMiddleware.js'; diff --git a/src/api/routes.js b/src/api/routes.js
index 73d954e..0da8be9 100644 --- a/src/api/routes.js +++ b/src/api/routes.js
@@ -2,6 +2,7 @@ import * as routes from './routes/index.js'; export function registerRoutes(app) { // app.get("/status", routes.statusRoute); + let routeCount = 0; Object.values(routes).forEach(route => { console.log('Registering route:', route); if (!route.route) @@ -10,9 +11,26 @@ export function registerRoutes(app) { JSON.stringify(route) ); - if (route.onGet) app.get(route.route, route.onGet); - if (route.onPost) app.post(route.route, route.onPost); - if (route.onPut) app.put(route.route, route.onPut); - if (route.onDelete) app.put(route.route, route.onDelete); + if (route.onGet) { + app.get(route.route, route.onGet); + routeCount++; + } + if (route.onPost) { + app.post(route.route, route.onPost); + routeCount++; + } + if (route.onPut) { + app.put(route.route, route.onPut); + routeCount++; + } + if (route.onDelete) { + app.put(route.route, route.onDelete); + routeCount++; + } + if (route.onPatch) { + app.patch(route.route, route.onPatch); + routeCount++; + } }); + console.log(`Registered ${routeCount} routes.`); } diff --git a/src/api/routes/auth/accountRoutes.js b/src/api/routes/auth/accountRoutes.js new file mode 100644
index 0000000..6655ecb --- /dev/null +++ b/src/api/routes/auth/accountRoutes.js
@@ -0,0 +1,36 @@ +import { deleteUser, loginUser, registerUser } from '#db/index.js'; +import { AuthDto, RegisterDto } from '#dto/index.js'; + +export const registerRoute = { + route: '/auth/register', + async onPost(req, res) { + const data = await RegisterDto.create(req.body); + const registerResult = await registerUser(data); + res.send(registerResult); + } +}; + +export const loginRoute = { + route: '/auth/login', + /** + * + * @param req {Request} + * @param res + * @returns {Promise<WhoAmIDto>} + */ + async onPost(req, res) { + const data = await AuthDto.create(req.body); + console.log(req.headers['user-agent']); + const loginResult = await loginUser(data, req.headers['user-agent']); + res.send(loginResult); + } +}; + +export const deleteRoute = { + route: '/auth/delete', + async onDelete(req, res) { + const data = await AuthDto.create(req.body); + await deleteUser(data); + res.status(204).send(); + } +}; diff --git a/src/api/routes/auth/deviceRoutes.js b/src/api/routes/auth/deviceRoutes.js new file mode 100644
index 0000000..6655ecb --- /dev/null +++ b/src/api/routes/auth/deviceRoutes.js
@@ -0,0 +1,36 @@ +import { deleteUser, loginUser, registerUser } from '#db/index.js'; +import { AuthDto, RegisterDto } from '#dto/index.js'; + +export const registerRoute = { + route: '/auth/register', + async onPost(req, res) { + const data = await RegisterDto.create(req.body); + const registerResult = await registerUser(data); + res.send(registerResult); + } +}; + +export const loginRoute = { + route: '/auth/login', + /** + * + * @param req {Request} + * @param res + * @returns {Promise<WhoAmIDto>} + */ + async onPost(req, res) { + const data = await AuthDto.create(req.body); + console.log(req.headers['user-agent']); + const loginResult = await loginUser(data, req.headers['user-agent']); + res.send(loginResult); + } +}; + +export const deleteRoute = { + route: '/auth/delete', + async onDelete(req, res) { + const data = await AuthDto.create(req.body); + await deleteUser(data); + res.status(204).send(); + } +}; diff --git a/src/api/routes/auth/index.js b/src/api/routes/auth/index.js
index 7113a17..29a07ad 100644 --- a/src/api/routes/auth/index.js +++ b/src/api/routes/auth/index.js
@@ -1 +1 @@ -export * from './registerRoute.js'; +export * from './accountRoutes.js'; diff --git a/src/api/routes/auth/registerRoute.js b/src/api/routes/auth/registerRoute.js deleted file mode 100644
index 87762d3..0000000 --- a/src/api/routes/auth/registerRoute.js +++ /dev/null
@@ -1,20 +0,0 @@ -import { registerUser } from '#db/index.js'; -import { LoginDto, RegisterDto } from '#dto/index.js'; - -export const registerRoute = { - route: '/auth/register', - async onPost(req, res) { - const data = await RegisterDto.create(req.body); - await registerUser(data); - res.send(data); - } -}; - -export const loginRoute = { - route: '/auth/login', - async onPost(req, res) { - const data = await LoginDto.create(req.body); - await registerUser(data); - res.send(data); - } -};