Limit channel numbers

We can't load too much channels in selects and it helps to prevent actor
name squatting
This commit is contained in:
Chocobozzz 2019-11-29 16:35:27 +01:00
parent 1689176a7b
commit a3ce4ae847
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
2 changed files with 14 additions and 0 deletions

View File

@ -431,6 +431,10 @@ const OVERVIEWS = {
} }
} }
const VIDEO_CHANNELS = {
MAX_PER_USER: 20
}
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
const SERVER_ACTOR_NAME = 'peertube' const SERVER_ACTOR_NAME = 'peertube'
@ -725,6 +729,7 @@ export {
VIDEO_TRANSCODING_FPS, VIDEO_TRANSCODING_FPS,
FFMPEG_NICE, FFMPEG_NICE,
VIDEO_ABUSE_STATES, VIDEO_ABUSE_STATES,
VIDEO_CHANNELS,
LRU_CACHE, LRU_CACHE,
JOB_REQUEST_TIMEOUT, JOB_REQUEST_TIMEOUT,
USER_PASSWORD_RESET_LIFETIME, USER_PASSWORD_RESET_LIFETIME,

View File

@ -14,6 +14,7 @@ import { ActorModel } from '../../../models/activitypub/actor'
import { isBooleanValid } from '../../../helpers/custom-validators/misc' import { isBooleanValid } from '../../../helpers/custom-validators/misc'
import { doesLocalVideoChannelNameExist, doesVideoChannelNameWithHostExist } from '../../../helpers/middlewares' import { doesLocalVideoChannelNameExist, doesVideoChannelNameWithHostExist } from '../../../helpers/middlewares'
import { MChannelAccountDefault, MUser } from '@server/typings/models' import { MChannelAccountDefault, MUser } from '@server/typings/models'
import { VIDEO_CHANNELS } from '@server/initializers/constants'
const videoChannelsAddValidator = [ const videoChannelsAddValidator = [
body('name').custom(isActorPreferredUsernameValid).withMessage('Should have a valid channel name'), body('name').custom(isActorPreferredUsernameValid).withMessage('Should have a valid channel name'),
@ -34,6 +35,14 @@ const videoChannelsAddValidator = [
return false return false
} }
const count = await VideoChannelModel.countByAccount(res.locals.oauth.token.User.Account.id)
if (count > VIDEO_CHANNELS.MAX_PER_USER) {
res.status(400)
.send({ error: `You cannot create more than ${VIDEO_CHANNELS.MAX_PER_USER} channels` })
.end()
return false
}
return next() return next()
} }
] ]