mirror of
https://github.com/umami-software/umami.git
synced 2025-12-06 01:18:00 +01:00
Updated redis logic.
This commit is contained in:
parent
39e7ceac06
commit
4d6ec631f7
9 changed files with 52 additions and 46 deletions
|
|
@ -75,7 +75,7 @@
|
|||
"@react-spring/web": "^9.7.3",
|
||||
"@tanstack/react-query": "^5.28.6",
|
||||
"@umami/prisma-client": "^0.14.0",
|
||||
"@umami/redis-client": "^0.24.0",
|
||||
"@umami/redis-client": "^0.25.0",
|
||||
"bcryptjs": "^2.4.3",
|
||||
"chalk": "^4.1.1",
|
||||
"chart.js": "^4.4.2",
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { z } from 'zod';
|
||||
import { checkPassword } from '@/lib/auth';
|
||||
import { createSecureToken } from '@/lib/jwt';
|
||||
import { redisEnabled } from '@umami/redis-client';
|
||||
import redis from '@/lib/redis';
|
||||
import { getUserByUsername } from '@/queries';
|
||||
import { json, unauthorized } from '@/lib/response';
|
||||
import { parseRequest } from '@/lib/request';
|
||||
|
|
@ -29,15 +29,16 @@ export async function POST(request: Request) {
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
if (redisEnabled) {
|
||||
const token = await saveAuth({ userId: user.id });
|
||||
|
||||
return json({ token, user });
|
||||
}
|
||||
|
||||
const token = createSecureToken({ userId: user.id }, secret());
|
||||
const { id, role, createdAt } = user;
|
||||
|
||||
let token = null;
|
||||
|
||||
if (redis.enabled) {
|
||||
token = await saveAuth({ userId: id, role });
|
||||
} else {
|
||||
token = createSecureToken({ userId: user.id, role }, secret());
|
||||
}
|
||||
|
||||
return json({
|
||||
token,
|
||||
user: { id, username, role, createdAt, isAdmin: role === ROLES.admin },
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
import { getClient, redisEnabled } from '@umami/redis-client';
|
||||
import redis from '@/lib/redis';
|
||||
import { ok } from '@/lib/response';
|
||||
|
||||
export async function POST(request: Request) {
|
||||
if (redisEnabled) {
|
||||
const redis = getClient();
|
||||
|
||||
if (redis.enabled) {
|
||||
const token = request.headers.get('authorization')?.split(' ')?.[1];
|
||||
|
||||
await redis.del(token);
|
||||
await redis.client.del(token);
|
||||
}
|
||||
|
||||
return ok();
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { redisEnabled } from '@umami/redis-client';
|
||||
import redis from '@/lib/redis';
|
||||
import { json } from '@/lib/response';
|
||||
import { parseRequest } from '@/lib/request';
|
||||
import { saveAuth } from '@/lib/auth';
|
||||
|
|
@ -10,7 +10,7 @@ export async function POST(request: Request) {
|
|||
return error();
|
||||
}
|
||||
|
||||
if (redisEnabled) {
|
||||
if (redis.enabled) {
|
||||
const token = await saveAuth({ userId: auth.user.id }, 86400);
|
||||
|
||||
return json({ user: auth.user, token });
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import bcrypt from 'bcryptjs';
|
||||
import { Report } from '@prisma/client';
|
||||
import { getClient, redisEnabled } from '@umami/redis-client';
|
||||
import redis from '@/lib/redis';
|
||||
import debug from 'debug';
|
||||
import { PERMISSIONS, ROLE_PERMISSIONS, ROLES, SHARE_TOKEN_HEADER } from '@/lib/constants';
|
||||
import { secret, getRandomChars } from '@/lib/crypto';
|
||||
|
|
@ -31,10 +31,8 @@ export async function checkAuth(request: Request) {
|
|||
|
||||
if (userId) {
|
||||
user = await getUser(userId);
|
||||
} else if (redisEnabled && authKey) {
|
||||
const redis = getClient();
|
||||
|
||||
const key = await redis.get(authKey);
|
||||
} else if (redis.enabled && authKey) {
|
||||
const key = await redis.client.get(authKey);
|
||||
|
||||
if (key?.userId) {
|
||||
user = await getUser(key.userId);
|
||||
|
|
@ -66,12 +64,12 @@ export async function checkAuth(request: Request) {
|
|||
export async function saveAuth(data: any, expire = 0) {
|
||||
const authKey = `auth:${getRandomChars(32)}`;
|
||||
|
||||
const redis = getClient();
|
||||
if (redis.enabled) {
|
||||
await redis.client.set(authKey, data);
|
||||
|
||||
await redis.set(authKey, data);
|
||||
|
||||
if (expire) {
|
||||
await redis.expire(authKey, expire);
|
||||
if (expire) {
|
||||
await redis.client.expire(authKey, expire);
|
||||
}
|
||||
}
|
||||
|
||||
return createSecureToken({ authKey }, secret());
|
||||
|
|
|
|||
|
|
@ -1,14 +1,12 @@
|
|||
import { Website, Session } from '@prisma/client';
|
||||
import { getClient, redisEnabled } from '@umami/redis-client';
|
||||
import redis from '@/lib/redis';
|
||||
import { getWebsiteSession, getWebsite } from '@/queries';
|
||||
|
||||
export async function fetchWebsite(websiteId: string): Promise<Website> {
|
||||
let website = null;
|
||||
|
||||
if (redisEnabled) {
|
||||
const redis = getClient();
|
||||
|
||||
website = await redis.fetch(`website:${websiteId}`, () => getWebsite(websiteId), 86400);
|
||||
if (redis.enabled) {
|
||||
website = await redis.client.fetch(`website:${websiteId}`, () => getWebsite(websiteId), 86400);
|
||||
} else {
|
||||
website = await getWebsite(websiteId);
|
||||
}
|
||||
|
|
@ -23,10 +21,8 @@ export async function fetchWebsite(websiteId: string): Promise<Website> {
|
|||
export async function fetchSession(websiteId: string, sessionId: string): Promise<Session> {
|
||||
let session = null;
|
||||
|
||||
if (redisEnabled) {
|
||||
const redis = getClient();
|
||||
|
||||
session = await redis.fetch(
|
||||
if (redis.enabled) {
|
||||
session = await redis.client.fetch(
|
||||
`session:${sessionId}`,
|
||||
() => getWebsiteSession(websiteId, sessionId),
|
||||
86400,
|
||||
|
|
|
|||
17
src/lib/redis.ts
Normal file
17
src/lib/redis.ts
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
import { REDIS, UmamiRedisClient } from '@umami/redis-client';
|
||||
|
||||
const enabled = !!process.env.REDIS_URL;
|
||||
|
||||
function getClient() {
|
||||
const client = new UmamiRedisClient(process.env.REDIS_URL);
|
||||
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
global[REDIS] = client;
|
||||
}
|
||||
|
||||
return client;
|
||||
}
|
||||
|
||||
const client = global[REDIS] || getClient();
|
||||
|
||||
export default { client, enabled };
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
import { Prisma, Website } from '@prisma/client';
|
||||
import { getClient } from '@umami/redis-client';
|
||||
import redis from '@/lib/redis';
|
||||
import prisma from '@/lib/prisma';
|
||||
import { PageResult, PageParams } from '@/lib/types';
|
||||
import WebsiteFindManyArgs = Prisma.WebsiteFindManyArgs;
|
||||
|
|
@ -182,9 +182,7 @@ export async function resetWebsite(
|
|||
}),
|
||||
]).then(async data => {
|
||||
if (cloudMode) {
|
||||
const redis = getClient();
|
||||
|
||||
await redis.set(`website:${websiteId}`, data[3]);
|
||||
await redis.client.set(`website:${websiteId}`, data[3]);
|
||||
}
|
||||
|
||||
return data;
|
||||
|
|
@ -227,9 +225,7 @@ export async function deleteWebsite(
|
|||
}),
|
||||
]).then(async data => {
|
||||
if (cloudMode) {
|
||||
const redis = getClient();
|
||||
|
||||
await redis.del(`website:${websiteId}`);
|
||||
await redis.client.del(`website:${websiteId}`);
|
||||
}
|
||||
|
||||
return data;
|
||||
|
|
|
|||
|
|
@ -3402,10 +3402,10 @@
|
|||
chalk "^4.1.2"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@umami/redis-client@^0.24.0":
|
||||
version "0.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@umami/redis-client/-/redis-client-0.24.0.tgz#8af489250396be76bc0906766343620589774c4b"
|
||||
integrity sha512-yUZmC87H5QZKNA6jD9k/7d8WDaXQTDROlpyK7S+V2csD96eAnMNi7JsWAVWx9T/584QKD8DsSIy87PTWq1HNPw==
|
||||
"@umami/redis-client@^0.25.0":
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@umami/redis-client/-/redis-client-0.25.0.tgz#8bf01f22ceb3b90e15e59ab8daf44f838b83a6a7"
|
||||
integrity sha512-j2GUehtrUfNPuikmcVXucgnL04gQOtbLiG20NqdlUXlDA/ebkV/waDfcYtMLuvXOFwiEeTatqPFEfXYuLDwJWw==
|
||||
dependencies:
|
||||
debug "^4.3.4"
|
||||
redis "^4.5.1"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue