X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fredis.ts;h=a075eee2d900e9765f96d04578e2a167ecb90db4;hb=284ef529113ad61de30ff30a28c699b97d9ca02f;hp=0c5dbdd3ec13949220a0750dd1d94c2c5031443e;hpb=a30a136c9896c656cab98d2c92cde32c534dc098;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/redis.ts b/server/lib/redis.ts index 0c5dbdd3e..a075eee2d 100644 --- a/server/lib/redis.ts +++ b/server/lib/redis.ts @@ -6,8 +6,10 @@ import { CONTACT_FORM_LIFETIME, USER_EMAIL_VERIFY_LIFETIME, USER_PASSWORD_RESET_LIFETIME, + USER_PASSWORD_CREATE_LIFETIME, VIDEO_VIEW_LIFETIME, - WEBSERVER + WEBSERVER, + TRACKER_RATE_LIMITS } from '../initializers/constants' import { CONFIG } from '../initializers/config' @@ -74,6 +76,18 @@ class Redis { return generatedString } + async setCreatePasswordVerificationString (userId: number) { + const generatedString = await generateRandomString(32) + + await this.setValue(this.generateResetPasswordKey(userId), generatedString, USER_PASSWORD_CREATE_LIFETIME) + + return generatedString + } + + async removePasswordVerificationString (userId: number) { + return this.removeValue(this.generateResetPasswordKey(userId)) + } + async getResetPasswordLink (userId: number) { return this.getValue(this.generateResetPasswordKey(userId)) } @@ -112,6 +126,16 @@ class Redis { return this.exists(this.generateViewKey(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)) + } + /* ************ API cache ************ */ async getCachedRoute (req: express.Request) { @@ -204,6 +228,10 @@ class Redis { return `views-${videoUUID}-${ip}` } + private generateTrackerBlockIPKey (ip: string) { + return `tracker-block-ip-${ip}` + } + private generateContactFormKey (ip: string) { return 'contact-form-' + ip } @@ -266,6 +294,16 @@ class Redis { }) } + private removeValue (key: string) { + return new Promise((res, rej) => { + this.client.del(this.prefix + key, err => { + if (err) return rej(err) + + return res() + }) + }) + } + private setObject (key: string, obj: { [id: string]: string }, expirationMilliseconds: number) { return new Promise((res, rej) => { this.client.hmset(this.prefix + key, obj, (err, ok) => {