Add redis

+ Add a public lib file for redis
  + Add an indexed auth client
  + Add a function to create promisified partial clients
+ Add password revisions to the auth redis index
This commit is contained in:
Stephan
2021-11-10 12:08:07 +01:00
parent 5ee5218d5a
commit fc78f730bd
3 changed files with 34 additions and 1 deletions
+4
View File
@@ -1,5 +1,6 @@
import { Request, Response } from "express";
import { Admin, AdminLevel, Group } from "@prisma/client";
import { authClient } from "../lib/redis";
import prisma from "../lib/prisma";
import argon2 from "argon2";
import jwt from "jsonwebtoken";
@@ -55,6 +56,9 @@ export const authenticateUser = async (req: Request<{}, {}, AuthenticateUserBody
const param_password_hash = await argon2.hash(password, { type: argon2.argon2id });
if (param_password_hash === user.password) {
// Set password revision ID in redis
await authClient.set(user.pid, user.revision);
return {
type: "success",
payload: {
+27
View File
@@ -0,0 +1,27 @@
import redis from "redis";
import { promisify } from "util";
const REDIS_INDICES = {
auth: 0,
};
const REDIS_HOST = process.env.REDIS_HOST || "redis";
const REDIS_PORT = process.env.REDIS_PORT ? parseInt(process.env.REDIS_PORT) : 6379;
// TODO: Extend
function createAsyncClient(client: redis.RedisClient) {
return {
get: promisify(client.get).bind(client),
set: promisify(client.set).bind(client),
};
}
// ----------------- //
// Redis auth client //
// ----------------- //
const auth = redis.createClient({ host: REDIS_HOST, port: REDIS_PORT });
auth.select(REDIS_INDICES.auth);
export const authClient = createAsyncClient(auth);