mirror of
https://github.com/detleph/server.git
synced 2026-09-07 16:06:18 +02:00
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:
+3
-1
@@ -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",
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
@@ -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);
|
||||||
Reference in New Issue
Block a user