From e69219184b1a3262ec5e617d30337b6431c9840c Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 8 Aug 2018 14:58:21 +0200 Subject: Implement user blocking on server side --- server/controllers/api/users.ts | 48 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'server/controllers/api/users.ts') diff --git a/server/controllers/api/users.ts b/server/controllers/api/users.ts index 3d2586c3a..8f429d0b5 100644 --- a/server/controllers/api/users.ts +++ b/server/controllers/api/users.ts @@ -32,6 +32,7 @@ import { import { deleteMeValidator, usersAskResetPasswordValidator, + usersBlockingValidator, usersResetPasswordValidator, videoImportsSortValidator, videosSortValidator @@ -108,6 +109,19 @@ usersRouter.get('/', asyncMiddleware(listUsers) ) +usersRouter.post('/:id/block', + authenticate, + ensureUserHasRight(UserRight.MANAGE_USERS), + asyncMiddleware(usersBlockingValidator), + asyncMiddleware(blockUser) +) +usersRouter.post('/:id/unblock', + authenticate, + ensureUserHasRight(UserRight.MANAGE_USERS), + asyncMiddleware(usersBlockingValidator), + asyncMiddleware(unblockUser) +) + usersRouter.get('/:id', authenticate, ensureUserHasRight(UserRight.MANAGE_USERS), @@ -278,6 +292,22 @@ async function getUserVideoQuotaUsed (req: express.Request, res: express.Respons return res.json(data) } +async function unblockUser (req: express.Request, res: express.Response, next: express.NextFunction) { + const user: UserModel = res.locals.user + + await changeUserBlock(res, user, false) + + return res.status(204).end() +} + +async function blockUser (req: express.Request, res: express.Response, next: express.NextFunction) { + const user: UserModel = res.locals.user + + await changeUserBlock(res, user, true) + + return res.status(204).end() +} + function getUser (req: express.Request, res: express.Response, next: express.NextFunction) { return res.json((res.locals.user as UserModel).toFormattedJSON()) } @@ -423,3 +453,21 @@ async function resetUserPassword (req: express.Request, res: express.Response, n function success (req: express.Request, res: express.Response, next: express.NextFunction) { res.end() } + +async function changeUserBlock (res: express.Response, user: UserModel, block: boolean) { + const oldUserAuditView = new UserAuditView(user.toFormattedJSON()) + + user.blocked = block + + await sequelizeTypescript.transaction(async t => { + await OAuthTokenModel.deleteUserToken(user.id, t) + + await user.save({ transaction: t }) + }) + + auditLogger.update( + res.locals.oauth.token.User.Account.Actor.getIdentifier(), + new UserAuditView(user.toFormattedJSON()), + oldUserAuditView + ) +} -- cgit v1.2.3