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
+3 -1
View File
@@ -23,11 +23,13 @@
"@types/jsonwebtoken": "^8.5.5",
"@types/node": "^16.10.3",
"@types/nodemailer": "^6.4.4",
"@types/redis": "^2.8.32",
"argon2": "^0.28.2",
"dotenv": "^10.0.0",
"express": "^4.17.1",
"jsonwebtoken": "^8.5.1",
"nodemailer": "^6.7.0"
"nodemailer": "^6.7.0",
"redis": "^3.1.2"
},
"devDependencies": {
"@types/chai": "^4.2.22",
+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);