summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/api/routes/adminRoutes.js6
-rw-r--r--src/api/routes/alarmRoutes.js17
-rw-r--r--src/api/routes/auth/accountRoutes.js11
-rw-r--r--src/api/routes/auth/adminAccountRoutes.js58
-rw-r--r--src/api/routes/auth/index.js1
-rw-r--r--src/api/routes/budgetRoutes.js6
6 files changed, 25 insertions, 74 deletions
diff --git a/src/api/routes/adminRoutes.js b/src/api/routes/adminRoutes.js

index 7a1d1e2..a5902ee 100644 --- a/src/api/routes/adminRoutes.js +++ b/src/api/routes/adminRoutes.js
@@ -23,9 +23,13 @@ export const adminGetUserIdsRoute = { res.status(200); res.write('[\n'); + let first = true; const users = DbUser.find().lean().cursor(); for await (const user of users) { - res.write(JSON.stringify(user._id) + ',\n'); + res.write( + (first ? '' : ',') + JSON.stringify(user._id) + '\n' + ); + first = false; } res.write(']'); diff --git a/src/api/routes/alarmRoutes.js b/src/api/routes/alarmRoutes.js
index aeae4ab..635d230 100644 --- a/src/api/routes/alarmRoutes.js +++ b/src/api/routes/alarmRoutes.js
@@ -19,7 +19,7 @@ export const alarmByUserRoute = { description: 'Get the alarm for a monitored user, if one is set', async method(req, res) { const user = await getUserById(req.params.id); - res.send(user.alarm); + res.send(user.alarm ?? 'null'); } }), delete: new RouteMethod({ @@ -49,18 +49,19 @@ export const alarmListRoute = { async method(req, res) { // execute the query asynchronously and manually construct a response, for scaling reasons const users = DbUser.find({ - _id: { $in: req.user.monitoredUsers } + _id: { $in: req.user.monitoredUsers }, + alarm: { $exists: true, $ne: null } }) .lean() .cursor(); res.status(200); res.write('{\n'); + let first = true; for await (const user of users) { - if (user.alarm) { - res.write( - `"${user._id}": ${JSON.stringify(user.alarm)},\n` - ); - } + res.write( + `${first ? '' : ','}"${user._id}": ${JSON.stringify(user.alarm)}\n` + ); + first = false; } res.write('}'); res.end(); @@ -79,7 +80,7 @@ export const alarmRoute = { middlewares: [requireUser], description: "Get the current user's alarm", async method(req, res) { - res.send(req.user.alarm); + res.send(req.user.alarm ?? 'null'); } }), put: new RouteMethod({ diff --git a/src/api/routes/auth/accountRoutes.js b/src/api/routes/auth/accountRoutes.js
index 34592ed..fb6dcfa 100644 --- a/src/api/routes/auth/accountRoutes.js +++ b/src/api/routes/auth/accountRoutes.js
@@ -3,6 +3,7 @@ import { AuthDto, RegisterDto } from '#dto/index.js'; import { RouteDescription, RouteMethod } from '#api/RouteDescription.js'; import { WhoAmIDto } from '#dto/auth/WhoAmIDto.js'; import { requireAuth } from '#api/middlewares/index.js'; +import { SafeNSoundError } from '#util/error.js'; /** * @type {RouteDescription} @@ -59,13 +60,17 @@ export const logoutRoute = { path: '/auth/logout', methods: { post: new RouteMethod({ - description: 'Log out from a device (TODO)', + description: 'Log out from a device', exampleHeaders: { Authorization: 'Bearer {{accessToken}}' }, + middlewares: [requireAuth], async method(req, res) { - const data = await AuthDto.create(req.body); - // const loginResult = await deleteDevice(data, ); + const deviceIndex = req.user.devices.findIndex( + device => device.id === req.device._id + ); + req.user.devices.splice(deviceIndex, 1); + await req.user.save(); res.status(204).send(); } }) diff --git a/src/api/routes/auth/adminAccountRoutes.js b/src/api/routes/auth/adminAccountRoutes.js deleted file mode 100644
index b485002..0000000 --- a/src/api/routes/auth/adminAccountRoutes.js +++ /dev/null
@@ -1,58 +0,0 @@ -import { - DbUser, - deleteUser, - getUserById, - loginUser, - registerUser, - UserType -} from '#db/index.js'; -import { AuthDto, RegisterDto } from '#dto/index.js'; -import { requireAdmin, requireRole } from '#api/middlewares/index.js'; -import { RouteDescription, RouteMethod } from '#api/RouteDescription.js'; - -/** - * @type {RouteDescription} - */ -export const adminGetUsersRoute = { - path: '/admin/users', - methods: { - get: new RouteMethod({ - description: 'Get all users (raw)', - exampleHeaders: { - Authorization: 'Bearer {{accessToken}}' - }, - middlewares: [requireAdmin], - async method(req, res) { - res.send(DbUser.find({}).exec()); - } - }) - } -}; - -/** - * @type {RouteDescription} - */ -export const adminUserRoute = { - path: '/admin/user/:id', - methods: { - get: new RouteMethod({ - description: 'Get a user (raw)', - exampleHeaders: { - Authorization: 'Bearer {{accessToken}}' - }, - middlewares: [requireAdmin], - async method(req, res) { - const user = await getUserById(req.params.id); - res.send(user); - } - }), - delete: new RouteMethod({ - middlewares: [requireAdmin], - description: 'Delete a user', - async method(req, res) { - await deleteUser(data); - res.status(204).send(); - } - }) - } -}; diff --git a/src/api/routes/auth/index.js b/src/api/routes/auth/index.js
index 2d2cc86..e687911 100644 --- a/src/api/routes/auth/index.js +++ b/src/api/routes/auth/index.js
@@ -1,3 +1,2 @@ export * from './accountRoutes.js'; export * from './deviceRoutes.js'; -export * from './adminAccountRoutes.js'; diff --git a/src/api/routes/budgetRoutes.js b/src/api/routes/budgetRoutes.js
index bcb9711..440c26d 100644 --- a/src/api/routes/budgetRoutes.js +++ b/src/api/routes/budgetRoutes.js
@@ -16,7 +16,7 @@ import { SafeNSoundError } from '#util/error.js'; * @type {RouteDescription} */ export const getBudgetByUserRoute = { - path: '/budget/:id', + path: '/user/:id/budget', methods: { get: new RouteMethod({ middlewares: [requireMonitor], @@ -41,7 +41,7 @@ export const getBudgetByUserRoute = { * @type {RouteDescription} */ export const addBudgetByUserRoute = { - path: '/budget/:id/add', + path: '/user/:id/budget/add', methods: { get: new RouteMethod({ description: 'Add budget to a monitored user', @@ -76,7 +76,7 @@ export const addBudgetByUserRoute = { /** * @type {RouteDescription} */ -export const getBudgetRoute = { +export const userBudgetRoute = { path: '/budget/@me', methods: { get: new RouteMethod({