X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fredis.ts;h=b7523492a5895ba50ce3c487e7d1cd0f9161d8fc;hb=37ff5005b47b9df2933a0b8812609a6c41faa170;hp=d6d053d2f8b1b29a5cb2674bfee6df3ce36c7ba6;hpb=64324ac646b0938e35cd88771492623b640bd0d8;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/redis.ts b/server/lib/redis.ts index d6d053d2f..b7523492a 100644 --- a/server/lib/redis.ts +++ b/server/lib/redis.ts @@ -9,6 +9,7 @@ import { CONTACT_FORM_LIFETIME, RESUMABLE_UPLOAD_SESSION_LIFETIME, TRACKER_RATE_LIMITS, + TWO_FACTOR_AUTH_REQUEST_TOKEN_LIFETIME, USER_EMAIL_VERIFY_LIFETIME, USER_PASSWORD_CREATE_LIFETIME, USER_PASSWORD_RESET_LIFETIME, @@ -33,6 +34,7 @@ class Redis { this.initialized = true this.client = createClient(Redis.getRedisClientOptions()) + this.client.on('error', err => logger.error('Redis Client Error', { err })) logger.info('Connecting to redis...') @@ -107,10 +109,24 @@ class Redis { return this.removeValue(this.generateResetPasswordKey(userId)) } - async getResetPasswordLink (userId: number) { + async getResetPasswordVerificationString (userId: number) { return this.getValue(this.generateResetPasswordKey(userId)) } + /* ************ Two factor auth request ************ */ + + async setTwoFactorRequest (userId: number, otpSecret: string) { + const requestToken = await generateRandomString(32) + + await this.setValue(this.generateTwoFactorRequestKey(userId, requestToken), otpSecret, TWO_FACTOR_AUTH_REQUEST_TOKEN_LIFETIME) + + return requestToken + } + + async getTwoFactorRequestToken (userId: number, requestToken: string) { + return this.getValue(this.generateTwoFactorRequestKey(userId, requestToken)) + } + /* ************ Email verification ************ */ async setVerifyEmailVerificationString (userId: number) { @@ -341,6 +357,10 @@ class Redis { return 'reset-password-' + userId } + private generateTwoFactorRequestKey (userId: number, token: string) { + return 'two-factor-request-' + userId + '-' + token + } + private generateVerifyEmailKey (userId: number) { return 'verify-email-' + userId } @@ -390,8 +410,8 @@ class Redis { return JSON.parse(value) } - private setObject (key: string, value: { [ id: string ]: number | string }) { - return this.setValue(key, JSON.stringify(value)) + private setObject (key: string, value: { [ id: string ]: number | string }, expirationMilliseconds?: number) { + return this.setValue(key, JSON.stringify(value), expirationMilliseconds) } private async setValue (key: string, value: string, expirationMilliseconds?: number) {