usersVideoRatingValidator
} from '../../middlewares'
import {
+ deleteMeValidator,
usersAskResetPasswordValidator,
+ usersBlockingValidator,
usersResetPasswordValidator,
videoImportsSortValidator,
videosSortValidator
authenticate,
asyncMiddleware(getUserInformation)
)
+usersRouter.delete('/me',
+ authenticate,
+ asyncMiddleware(deleteMeValidator),
+ asyncMiddleware(deleteMe)
+)
usersRouter.get('/me/video-quota-used',
authenticate,
asyncMiddleware(getUserVideoQuotaUsed)
)
-
usersRouter.get('/me/videos/imports',
authenticate,
paginationValidator,
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),
user.Account.id,
req.query.start as number,
req.query.count as number,
- req.query.sort as VideoSortField,
- false // Display my NSFW videos
+ req.query.sort as VideoSortField
)
const additionalAttributes = {
waitTranscoding: true,
state: true,
- scheduledUpdate: true
+ scheduledUpdate: true,
+ blacklistInfo: true
}
return res.json(getFormattedObjects(resultList.data, resultList.total, { additionalAttributes }))
}
async function getUserVideoImports (req: express.Request, res: express.Response, next: express.NextFunction) {
const user = res.locals.oauth.token.User as UserModel
const resultList = await VideoImportModel.listUserVideoImportsForApi(
- user.Account.id,
+ user.id,
req.query.start as number,
req.query.count as number,
req.query.sort
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
+ const reason = req.body.reason
+
+ await changeUserBlock(res, user, true, reason)
+
+ 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())
}
return res.json(getFormattedObjects(resultList.data, resultList.total))
}
+async function deleteMe (req: express.Request, res: express.Response) {
+ const user: UserModel = res.locals.oauth.token.User
+
+ await user.destroy()
+
+ auditLogger.delete(res.locals.oauth.token.User.Account.Actor.getIdentifier(), new UserAuditView(user.toFormattedJSON()))
+
+ return res.sendStatus(204)
+}
+
async function removeUser (req: express.Request, res: express.Response, next: express.NextFunction) {
- const user = await UserModel.loadById(req.params.id)
+ const user: UserModel = res.locals.user
await user.destroy()
function success (req: express.Request, res: express.Response, next: express.NextFunction) {
res.end()
}
+
+async function changeUserBlock (res: express.Response, user: UserModel, block: boolean, reason?: string) {
+ const oldUserAuditView = new UserAuditView(user.toFormattedJSON())
+
+ user.blocked = block
+ user.blockedReason = reason || null
+
+ await sequelizeTypescript.transaction(async t => {
+ await OAuthTokenModel.deleteUserToken(user.id, t)
+
+ await user.save({ transaction: t })
+ })
+
+ await Emailer.Instance.addUserBlockJob(user, block, reason)
+
+ auditLogger.update(
+ res.locals.oauth.token.User.Account.Actor.getIdentifier(),
+ new UserAuditView(user.toFormattedJSON()),
+ oldUserAuditView
+ )
+}