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);
- }
-};
|