From a84bbe12e51db40cdd3ec24280fc9ecbb22189ea Mon Sep 17 00:00:00 2001 From: tycrek Date: Mon, 26 Dec 2022 11:58:41 -0700 Subject: [PATCH] feat: added resetting upload tokens via API --- src/auth.ts | 24 ++++++++++++++++++++++++ src/routers/api.ts | 26 ++++++++++++++++++-------- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/auth.ts b/src/auth.ts index d92e56d..a9f3c35 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -266,6 +266,30 @@ export const setUsername = (unid: string, username: string): Promise => ne .catch(reject); }); +/** + * Resets a token + * @since v0.14.1 + */ +export const resetToken = (unid: string): Promise => new Promise((resolve, reject) => { + + // Find the user + const user = users.find((user) => user.unid === unid); + if (!user) return reject(new Error('User not found')); + + // Reset the token + user.token = nanoid(32); + + // 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[userIndex] = user; + fs.writeJson(authPath, authData, { spaces: '\t' }) + .then(() => log.info('Reset token for', user.unid)) + .then(() => resolve(user)) + .catch(reject); +}); + /** * Called by ass.ts on startup * @since v0.14.0 diff --git a/src/routers/api.ts b/src/routers/api.ts index 2c649de..4e1ae74 100644 --- a/src/routers/api.ts +++ b/src/routers/api.ts @@ -5,7 +5,7 @@ */ import { Router, Request, Response, NextFunction } from 'express'; -import { findFromToken, setUserPassword, users, createNewUser, deleteUser, setUserMeta, deleteUserMeta, setUsername, verifyCliKey } from '../auth'; +import { findFromToken, setUserPassword, users, createNewUser, deleteUser, setUserMeta, deleteUserMeta, setUsername, resetToken, verifyCliKey } from '../auth'; import { log } from '../utils'; import { data } from '../data'; import { User } from '../types/auth'; @@ -133,6 +133,20 @@ function buildUserRouter() { .catch((err) => errorHandler(res, err)); }); + // Delete a user meta key + // Admin only + userRouter.delete('/meta/:id', adminAuthMiddleware, (req: Request, res: Response) => { + const id = req.params.id; + const key: string | undefined = req.body.key; + + if (key == null || key.length === 0) + return res.sendStatus(400); + + deleteUserMeta(id, key) + .then(() => res.sendStatus(200)) + .catch((err) => errorHandler(res, err)); + }); + // Sets a username // Admin only userRouter.put('/username/:id', adminAuthMiddleware, (req: Request, res: Response) => { @@ -147,16 +161,12 @@ function buildUserRouter() { .catch((err) => errorHandler(res, err)); }); - // Delete a user meta key + // Resets a token // Admin only - userRouter.delete('/meta/:id', adminAuthMiddleware, (req: Request, res: Response) => { + userRouter.put('/token/:id', adminAuthMiddleware, (req: Request, res: Response) => { const id = req.params.id; - const key: string | undefined = req.body.key; - if (key == null || key.length === 0) - return res.sendStatus(400); - - deleteUserMeta(id, key) + resetToken(id) .then(() => res.sendStatus(200)) .catch((err) => errorHandler(res, err)); });