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/jsonwebtoken": "^8.5.5",
"@types/node": "^16.10.3", "@types/node": "^16.10.3",
"@types/nodemailer": "^6.4.4", "@types/nodemailer": "^6.4.4",
"@types/redis": "^2.8.32",
"argon2": "^0.28.2", "argon2": "^0.28.2",
"dotenv": "^10.0.0", "dotenv": "^10.0.0",
"express": "^4.17.1", "express": "^4.17.1",
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
"nodemailer": "^6.7.0" "nodemailer": "^6.7.0",
"redis": "^3.1.2"
}, },
"devDependencies": { "devDependencies": {
"@types/chai": "^4.2.22", "@types/chai": "^4.2.22",
+4
View File
@@ -1,5 +1,6 @@
import { Request, Response } from "express"; import { Request, Response } from "express";
import { Admin, AdminLevel, Group } from "@prisma/client"; import { Admin, AdminLevel, Group } from "@prisma/client";
import { authClient } from "../lib/redis";
import prisma from "../lib/prisma"; import prisma from "../lib/prisma";
import argon2 from "argon2"; import argon2 from "argon2";
import jwt from "jsonwebtoken"; 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 }); const param_password_hash = await argon2.hash(password, { type: argon2.argon2id });
if (param_password_hash === user.password) { if (param_password_hash === user.password) {
// Set password revision ID in redis
await authClient.set(user.pid, user.revision);
return { return {
type: "success", type: "success",
payload: { 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);