AP_CLEANER,
CONTACT_FORM_LIFETIME,
RESUMABLE_UPLOAD_SESSION_LIFETIME,
- TRACKER_RATE_LIMITS,
TWO_FACTOR_AUTH_REQUEST_TOKEN_LIFETIME,
- USER_EMAIL_VERIFY_LIFETIME,
+ EMAIL_VERIFY_LIFETIME,
USER_PASSWORD_CREATE_LIFETIME,
USER_PASSWORD_RESET_LIFETIME,
VIEW_LIFETIME,
if (this.initialized === true) return
this.initialized = true
- logger.info('Connecting to redis...')
+ const redisMode = CONFIG.REDIS.SENTINEL.ENABLED ? 'sentinel' : 'standalone'
+ logger.info('Connecting to redis ' + redisMode + '...')
this.client = new IoRedis(Redis.getRedisClientOptions('', { enableAutoPipelining: true }))
this.client.on('error', err => logger.error('Redis failed to connect', { err }))
this.prefix = 'redis-' + WEBSERVER.HOST + '-'
}
- static getRedisClientOptions (connectionName?: string, options: RedisOptions = {}): RedisOptions {
+ static getRedisClientOptions (name?: string, options: RedisOptions = {}): RedisOptions {
+ const connectionName = [ 'PeerTube', name ].join('')
+ const connectTimeout = 20000 // Could be slow since node use sync call to compile PeerTube
+
+ if (CONFIG.REDIS.SENTINEL.ENABLED) {
+ return {
+ connectionName,
+ connectTimeout,
+ enableTLSForSentinelMode: CONFIG.REDIS.SENTINEL.ENABLE_TLS,
+ sentinelPassword: CONFIG.REDIS.AUTH,
+ sentinels: CONFIG.REDIS.SENTINEL.SENTINELS,
+ name: CONFIG.REDIS.SENTINEL.MASTER_NAME,
+ ...options
+ }
+ }
+
return {
- connectionName: [ 'PeerTube', connectionName ].join(''),
- connectTimeout: 20000, // Could be slow since node use sync call to compile PeerTube
+ connectionName,
+ connectTimeout,
password: CONFIG.REDIS.AUTH,
db: CONFIG.REDIS.DB,
host: CONFIG.REDIS.HOSTNAME,
/* ************ Email verification ************ */
- async setVerifyEmailVerificationString (userId: number) {
+ async setUserVerifyEmailVerificationString (userId: number) {
+ const generatedString = await generateRandomString(32)
+
+ await this.setValue(this.generateUserVerifyEmailKey(userId), generatedString, EMAIL_VERIFY_LIFETIME)
+
+ return generatedString
+ }
+
+ async getUserVerifyEmailLink (userId: number) {
+ return this.getValue(this.generateUserVerifyEmailKey(userId))
+ }
+
+ async setRegistrationVerifyEmailVerificationString (registrationId: number) {
const generatedString = await generateRandomString(32)
- await this.setValue(this.generateVerifyEmailKey(userId), generatedString, USER_EMAIL_VERIFY_LIFETIME)
+ await this.setValue(this.generateRegistrationVerifyEmailKey(registrationId), generatedString, EMAIL_VERIFY_LIFETIME)
return generatedString
}
- async getVerifyEmailLink (userId: number) {
- return this.getValue(this.generateVerifyEmailKey(userId))
+ async getRegistrationVerifyEmailLink (registrationId: number) {
+ return this.getValue(this.generateRegistrationVerifyEmailKey(registrationId))
}
/* ************ Contact form per IP ************ */
return this.exists(this.generateIPViewKey(ip, videoUUID))
}
- /* ************ Tracker IP block ************ */
-
- setTrackerBlockIP (ip: string) {
- return this.setValue(this.generateTrackerBlockIPKey(ip), '1', TRACKER_RATE_LIMITS.BLOCK_IP_LIFETIME)
- }
-
- async doesTrackerBlockIPExist (ip: string) {
- return this.exists(this.generateTrackerBlockIPKey(ip))
- }
-
/* ************ Video views stats ************ */
addVideoViewStats (videoId: number) {
return 'two-factor-request-' + userId + '-' + token
}
- private generateVerifyEmailKey (userId: number) {
- return 'verify-email-' + userId
+ private generateUserVerifyEmailKey (userId: number) {
+ return 'verify-email-user-' + userId
}
- private generateIPViewKey (ip: string, videoUUID: string) {
- return `views-${videoUUID}-${ip}`
+ private generateRegistrationVerifyEmailKey (registrationId: number) {
+ return 'verify-email-registration-' + registrationId
}
- private generateTrackerBlockIPKey (ip: string) {
- return `tracker-block-ip-${ip}`
+ private generateIPViewKey (ip: string, videoUUID: string) {
+ return `views-${videoUUID}-${ip}`
}
private generateContactFormKey (ip: string) {