feature/ability to disable video history by default (#5728)
* draft: ability to disable video history by default * Update configuration and add tests * Updated code based on review comments * Add tests on registration and video quota * Remove required video quotas in query * Fix tests
This commit is contained in:
parent
9258e9a4a3
commit
b302c80dc0
18 changed files with 145 additions and 18 deletions
|
@ -246,6 +246,17 @@
|
|||
|
||||
<div *ngIf="formErrors.user.videoQuotaDaily" class="form-error">{{ formErrors.user.videoQuotaDaily }}</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<ng-container formGroupName="history">
|
||||
<ng-container formGroupName="videos">
|
||||
<my-peertube-checkbox
|
||||
inputName="videosHistoryEnabled" formControlName="enabled"
|
||||
i18n-labelText labelText="Automatically enable video history for new users"
|
||||
>
|
||||
</my-peertube-checkbox>
|
||||
</ng-container>
|
||||
</ng-container>
|
||||
</div>
|
||||
</ng-container>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -165,6 +165,11 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit {
|
|||
enabled: null
|
||||
},
|
||||
user: {
|
||||
history: {
|
||||
videos: {
|
||||
enabled: null
|
||||
}
|
||||
},
|
||||
videoQuota: USER_VIDEO_QUOTA_VALIDATOR,
|
||||
videoQuotaDaily: USER_VIDEO_QUOTA_DAILY_VALIDATOR
|
||||
},
|
||||
|
|
|
@ -408,6 +408,10 @@ signup:
|
|||
blacklist: []
|
||||
|
||||
user:
|
||||
history:
|
||||
videos:
|
||||
# Enable or disable video history by default for new users.
|
||||
enabled: true
|
||||
# Default value of maximum video bytes the user can upload (does not take into account transcoded files)
|
||||
# Byte format is supported ("1GB" etc)
|
||||
# -1 == unlimited
|
||||
|
|
|
@ -417,7 +417,11 @@ signup:
|
|||
whitelist: []
|
||||
blacklist: []
|
||||
|
||||
user:
|
||||
user:
|
||||
history:
|
||||
videos:
|
||||
# Enable or disable video history by default for new users.
|
||||
enabled: true
|
||||
# Default value of maximum video bytes the user can upload (does not take into account transcoded files)
|
||||
# Byte format is supported ("1GB" etc)
|
||||
# -1 == unlimited
|
||||
|
|
|
@ -204,6 +204,11 @@ function customConfig (): CustomConfig {
|
|||
enabled: CONFIG.CONTACT_FORM.ENABLED
|
||||
},
|
||||
user: {
|
||||
history: {
|
||||
videos: {
|
||||
enabled: CONFIG.USER.HISTORY.VIDEOS.ENABLED
|
||||
}
|
||||
},
|
||||
videoQuota: CONFIG.USER.VIDEO_QUOTA,
|
||||
videoQuotaDaily: CONFIG.USER.VIDEO_QUOTA_DAILY
|
||||
},
|
||||
|
|
|
@ -24,7 +24,7 @@ function checkMissedConfig () {
|
|||
'open_telemetry.metrics.enabled', 'open_telemetry.metrics.prometheus_exporter.hostname',
|
||||
'open_telemetry.metrics.prometheus_exporter.port', 'open_telemetry.tracing.enabled', 'open_telemetry.tracing.jaeger_exporter.endpoint',
|
||||
'open_telemetry.metrics.http_request_duration.enabled',
|
||||
'user.video_quota', 'user.video_quota_daily',
|
||||
'user.history.videos.enabled', 'user.video_quota', 'user.video_quota_daily',
|
||||
'video_channels.max_per_user',
|
||||
'csp.enabled', 'csp.report_only', 'csp.report_uri',
|
||||
'security.frameguard.enabled', 'security.powered_by_header.enabled',
|
||||
|
|
|
@ -324,6 +324,11 @@ const CONFIG = {
|
|||
}
|
||||
},
|
||||
USER: {
|
||||
HISTORY: {
|
||||
VIDEOS: {
|
||||
get ENABLED () { return config.get<boolean>('user.history.videos.enabled') }
|
||||
}
|
||||
},
|
||||
get VIDEO_QUOTA () { return parseBytes(config.get<number>('user.video_quota')) },
|
||||
get VIDEO_QUOTA_DAILY () { return parseBytes(config.get<number>('user.video_quota_daily')) }
|
||||
},
|
||||
|
|
|
@ -56,6 +56,8 @@ function buildUser (options: {
|
|||
|
||||
nsfwPolicy: CONFIG.INSTANCE.DEFAULT_NSFW_POLICY,
|
||||
p2pEnabled: CONFIG.DEFAULTS.P2P.WEBAPP.ENABLED,
|
||||
videosHistoryEnabled: CONFIG.USER.HISTORY.VIDEOS.ENABLED,
|
||||
|
||||
autoPlayVideo: true,
|
||||
|
||||
role,
|
||||
|
|
|
@ -35,6 +35,7 @@ const customConfigUpdateValidator = [
|
|||
body('admin.email').isEmail(),
|
||||
body('contactForm.enabled').isBoolean(),
|
||||
|
||||
body('user.history.videos.enabled').isBoolean(),
|
||||
body('user.videoQuota').custom(isUserVideoQuotaValid),
|
||||
body('user.videoQuotaDaily').custom(isUserVideoQuotaDailyValid),
|
||||
|
||||
|
|
|
@ -65,8 +65,11 @@ const usersAddValidator = [
|
|||
.custom(isVideoChannelUsernameValid),
|
||||
|
||||
body('videoQuota')
|
||||
.optional()
|
||||
.custom(isUserVideoQuotaValid),
|
||||
|
||||
body('videoQuotaDaily')
|
||||
.optional()
|
||||
.custom(isUserVideoQuotaDailyValid),
|
||||
|
||||
body('role')
|
||||
|
|
|
@ -90,6 +90,11 @@ describe('Test config API validators', function () {
|
|||
enabled: false
|
||||
},
|
||||
user: {
|
||||
history: {
|
||||
videos: {
|
||||
enabled: true
|
||||
}
|
||||
},
|
||||
videoQuota: 5242881,
|
||||
videoQuotaDaily: 318742
|
||||
},
|
||||
|
|
|
@ -216,18 +216,6 @@ describe('Test users admin API validators', function () {
|
|||
})
|
||||
})
|
||||
|
||||
it('Should fail without a videoQuota', async function () {
|
||||
const fields = omit(baseCorrectParams, [ 'videoQuota' ])
|
||||
|
||||
await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
|
||||
})
|
||||
|
||||
it('Should fail without a videoQuotaDaily', async function () {
|
||||
const fields = omit(baseCorrectParams, [ 'videoQuotaDaily' ])
|
||||
|
||||
await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
|
||||
})
|
||||
|
||||
it('Should fail with an invalid videoQuota', async function () {
|
||||
const fields = { ...baseCorrectParams, videoQuota: -5 }
|
||||
|
||||
|
|
|
@ -204,6 +204,84 @@ describe('Test config defaults', function () {
|
|||
})
|
||||
})
|
||||
|
||||
describe('Default user attributes', function () {
|
||||
it('Should create a user and register a user with the default config', async function () {
|
||||
await server.config.updateCustomSubConfig({
|
||||
newConfig: {
|
||||
user: {
|
||||
history: {
|
||||
videos: {
|
||||
enabled: true
|
||||
}
|
||||
},
|
||||
videoQuota : -1,
|
||||
videoQuotaDaily: -1
|
||||
},
|
||||
signup: {
|
||||
enabled: true,
|
||||
requiresApproval: false
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
const config = await server.config.getConfig()
|
||||
|
||||
expect(config.user.videoQuota).to.equal(-1)
|
||||
expect(config.user.videoQuotaDaily).to.equal(-1)
|
||||
|
||||
const user1Token = await server.users.generateUserAndToken('user1')
|
||||
const user1 = await server.users.getMyInfo({ token: user1Token })
|
||||
|
||||
const user = { displayName: 'super user 2', username: 'user2', password: 'super password' }
|
||||
const channel = { name: 'my_user_2_channel', displayName: 'my channel' }
|
||||
await server.registrations.register({ ...user, channel })
|
||||
const user2Token = await server.login.getAccessToken(user)
|
||||
const user2 = await server.users.getMyInfo({ token: user2Token })
|
||||
|
||||
for (const user of [ user1, user2 ]) {
|
||||
expect(user.videosHistoryEnabled).to.be.true
|
||||
expect(user.videoQuota).to.equal(-1)
|
||||
expect(user.videoQuotaDaily).to.equal(-1)
|
||||
}
|
||||
})
|
||||
|
||||
it('Should update config and create a user and register a user with the new default config', async function () {
|
||||
await server.config.updateCustomSubConfig({
|
||||
newConfig: {
|
||||
user: {
|
||||
history: {
|
||||
videos: {
|
||||
enabled: false
|
||||
}
|
||||
},
|
||||
videoQuota : 5242881,
|
||||
videoQuotaDaily: 318742
|
||||
},
|
||||
signup: {
|
||||
enabled: true,
|
||||
requiresApproval: false
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
const user3Token = await server.users.generateUserAndToken('user3')
|
||||
const user3 = await server.users.getMyInfo({ token: user3Token })
|
||||
|
||||
const user = { displayName: 'super user 4', username: 'user4', password: 'super password' }
|
||||
const channel = { name: 'my_user_4_channel', displayName: 'my channel' }
|
||||
await server.registrations.register({ ...user, channel })
|
||||
const user4Token = await server.login.getAccessToken(user)
|
||||
const user4 = await server.users.getMyInfo({ token: user4Token })
|
||||
|
||||
for (const user of [ user3, user4 ]) {
|
||||
expect(user.videosHistoryEnabled).to.be.false
|
||||
expect(user.videoQuota).to.equal(5242881)
|
||||
expect(user.videoQuotaDaily).to.equal(318742)
|
||||
}
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
after(async function () {
|
||||
await cleanupTests([ server ])
|
||||
})
|
||||
|
|
|
@ -56,6 +56,7 @@ function checkInitialConfig (server: PeerTubeServer, data: CustomConfig) {
|
|||
expect(data.admin.email).to.equal('admin' + server.internalServerNumber + '@example.com')
|
||||
expect(data.contactForm.enabled).to.be.true
|
||||
|
||||
expect(data.user.history.videos.enabled).to.be.true
|
||||
expect(data.user.videoQuota).to.equal(5242880)
|
||||
expect(data.user.videoQuotaDaily).to.equal(-1)
|
||||
|
||||
|
@ -164,6 +165,7 @@ function checkUpdatedConfig (data: CustomConfig) {
|
|||
|
||||
expect(data.contactForm.enabled).to.be.false
|
||||
|
||||
expect(data.user.history.videos.enabled).to.be.false
|
||||
expect(data.user.videoQuota).to.equal(5242881)
|
||||
expect(data.user.videoQuotaDaily).to.equal(318742)
|
||||
|
||||
|
@ -298,6 +300,11 @@ const newCustomConfig: CustomConfig = {
|
|||
enabled: false
|
||||
},
|
||||
user: {
|
||||
history: {
|
||||
videos: {
|
||||
enabled: false
|
||||
}
|
||||
},
|
||||
videoQuota: 5242881,
|
||||
videoQuotaDaily: 318742
|
||||
},
|
||||
|
|
|
@ -97,6 +97,11 @@ export interface CustomConfig {
|
|||
}
|
||||
|
||||
user: {
|
||||
history: {
|
||||
videos: {
|
||||
enabled: boolean
|
||||
}
|
||||
}
|
||||
videoQuota: number
|
||||
videoQuotaDaily: number
|
||||
}
|
||||
|
@ -229,4 +234,5 @@ export interface CustomConfig {
|
|||
isDefaultSearch: boolean
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -350,6 +350,11 @@ export class ConfigCommand extends AbstractCommand {
|
|||
enabled: true
|
||||
},
|
||||
user: {
|
||||
history: {
|
||||
videos: {
|
||||
enabled: true
|
||||
}
|
||||
},
|
||||
videoQuota: 5242881,
|
||||
videoQuotaDaily: 318742
|
||||
},
|
||||
|
|
|
@ -165,8 +165,8 @@ export class UsersCommand extends AbstractCommand {
|
|||
username,
|
||||
adminFlags,
|
||||
password = 'password',
|
||||
videoQuota = 42000000,
|
||||
videoQuotaDaily = -1,
|
||||
videoQuota,
|
||||
videoQuotaDaily,
|
||||
role = UserRole.USER
|
||||
} = options
|
||||
|
||||
|
|
|
@ -7894,8 +7894,6 @@ components:
|
|||
- username
|
||||
- password
|
||||
- email
|
||||
- videoQuota
|
||||
- videoQuotaDaily
|
||||
- role
|
||||
UpdateUser:
|
||||
properties:
|
||||
|
|
Loading…
Reference in a new issue