feat: added deleting users via the API

pull/189/head
tycrek 2 years ago
parent 47fa061548
commit 2b87e044e1
No known key found for this signature in database
GPG Key ID: FF8A54DCE404885A

@ -164,6 +164,29 @@ export const setUserPassword = (unid: string, password: string): Promise<User> =
.catch(reject); .catch(reject);
}); });
/**
* Deletes a user account
* @since v0.14.1
*/
export const deleteUser = (unid: string): Promise<void> => new Promise((resolve, reject) => {
// Find the user
const user = users.find((user) => user.unid === unid);
if (!user) return reject(new Error('User not found'));
// Remove the user from the users map
users.splice(users.indexOf(user), 1);
// Save the new user to auth.json
const authPath = path('auth.json');
const authData = fs.readJsonSync(authPath) as Users;
const userIndex = authData.users.findIndex((user) => user.unid === unid);
authData.users.splice(userIndex, 1);
fs.writeJson(authPath, authData, { spaces: '\t' })
.then(() => resolve())
.catch(reject);
});
/** /**
* Called by ass.ts on startup * Called by ass.ts on startup
* @since v0.14.0 * @since v0.14.0

@ -5,7 +5,7 @@
*/ */
import { Router, Request, Response, NextFunction } from 'express'; import { Router, Request, Response, NextFunction } from 'express';
import { findFromToken, setUserPassword, users, createNewUser, verifyCliKey } from '../auth'; import { findFromToken, setUserPassword, users, createNewUser, deleteUser, verifyCliKey } from '../auth';
import { log } from '../utils'; import { log } from '../utils';
import { data } from '../data'; import { data } from '../data';
import { User } from '../types/auth'; import { User } from '../types/auth';
@ -15,6 +15,17 @@ import { User } from '../types/auth';
*/ */
const RouterApi = Router(); const RouterApi = Router();
/**
* Logs an error and sends a 500 (404 if 'User not found' error)
* @since v0.14.1
*/
const errorHandler = (res: Response, err: Error | any) => {
log.error(err);
if (err.message === 'User not found')
return res.sendStatus(404);
res.sendStatus(500);
};
/** /**
* Token authentication middleware for Admins * Token authentication middleware for Admins
* @since v0.14.0 * @since v0.14.0
@ -56,7 +67,7 @@ function buildUserRouter() {
setUserPassword(id, newPassword) setUserPassword(id, newPassword)
.then(() => res.sendStatus(200)) .then(() => res.sendStatus(200))
.catch((err) => (log.error(err), res.sendStatus(500))); .catch((err) => errorHandler(res, err));
}); });
// Create a new user // Create a new user
@ -73,7 +84,7 @@ function buildUserRouter() {
createNewUser(username, password, admin, meta) createNewUser(username, password, admin, meta)
.then((user) => res.send(user)) .then((user) => res.send(user))
.catch((err) => (log.error(err), res.sendStatus(500))); .catch((err) => errorHandler(res, err));
}); });
// Get a user (must be last as it's a catch-all) // Get a user (must be last as it's a catch-all)
@ -81,6 +92,23 @@ function buildUserRouter() {
userRouter.get('/:id', adminAuthMiddleware, (req: Request, res: Response) => userRouter.get('/:id', adminAuthMiddleware, (req: Request, res: Response) =>
userFinder(res, users.find(user => user.unid === req.params.id || user.username === req.params.id))); userFinder(res, users.find(user => user.unid === req.params.id || user.username === req.params.id)));
// Delete a user
// Admin only
userRouter.delete('/:id', adminAuthMiddleware, (req: Request, res: Response) => {
const id = req.params.id;
deleteUser(id)
.then(() => res.sendStatus(200))
.catch((err) => errorHandler(res, err));
});
// Update a user
// Admin only
userRouter.put('/:id', adminAuthMiddleware, (req: Request, res: Response) => {
const id = req.params.id;
//WIP
});
return userRouter; return userRouter;
} }

Loading…
Cancel
Save