mirror of
https://github.com/OpenCut-app/OpenCut.git
synced 2026-07-13 21:52:53 +02:00
feat: better auth rate limiting
This commit is contained in:
@@ -5,6 +5,8 @@ export const keys = () =>
|
|||||||
createEnv({
|
createEnv({
|
||||||
server: {
|
server: {
|
||||||
BETTER_AUTH_SECRET: z.string(),
|
BETTER_AUTH_SECRET: z.string(),
|
||||||
|
UPSTASH_REDIS_REST_URL: z.string().url(),
|
||||||
|
UPSTASH_REDIS_REST_TOKEN: z.string(),
|
||||||
},
|
},
|
||||||
client: {
|
client: {
|
||||||
NEXT_PUBLIC_BETTER_AUTH_URL: z.string().url(),
|
NEXT_PUBLIC_BETTER_AUTH_URL: z.string().url(),
|
||||||
@@ -12,5 +14,7 @@ export const keys = () =>
|
|||||||
runtimeEnv: {
|
runtimeEnv: {
|
||||||
NEXT_PUBLIC_BETTER_AUTH_URL: process.env.NEXT_PUBLIC_BETTER_AUTH_URL,
|
NEXT_PUBLIC_BETTER_AUTH_URL: process.env.NEXT_PUBLIC_BETTER_AUTH_URL,
|
||||||
BETTER_AUTH_SECRET: process.env.BETTER_AUTH_SECRET,
|
BETTER_AUTH_SECRET: process.env.BETTER_AUTH_SECRET,
|
||||||
|
UPSTASH_REDIS_REST_URL: process.env.UPSTASH_REDIS_REST_URL,
|
||||||
|
UPSTASH_REDIS_REST_TOKEN: process.env.UPSTASH_REDIS_REST_TOKEN,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,9 +1,20 @@
|
|||||||
import { betterAuth } from "better-auth";
|
import { betterAuth, RateLimit } from "better-auth";
|
||||||
import { drizzleAdapter } from "better-auth/adapters/drizzle";
|
import { drizzleAdapter } from "better-auth/adapters/drizzle";
|
||||||
import { db } from "@opencut/db";
|
import { db } from "@opencut/db";
|
||||||
import { keys } from "./keys";
|
import { keys } from "./keys";
|
||||||
|
import { Redis } from "@upstash/redis";
|
||||||
|
|
||||||
const { NEXT_PUBLIC_BETTER_AUTH_URL, BETTER_AUTH_SECRET } = keys();
|
const {
|
||||||
|
NEXT_PUBLIC_BETTER_AUTH_URL,
|
||||||
|
BETTER_AUTH_SECRET,
|
||||||
|
UPSTASH_REDIS_REST_URL,
|
||||||
|
UPSTASH_REDIS_REST_TOKEN,
|
||||||
|
} = keys();
|
||||||
|
|
||||||
|
const redis = new Redis({
|
||||||
|
url: UPSTASH_REDIS_REST_URL,
|
||||||
|
token: UPSTASH_REDIS_REST_TOKEN,
|
||||||
|
});
|
||||||
|
|
||||||
export const auth = betterAuth({
|
export const auth = betterAuth({
|
||||||
database: drizzleAdapter(db, {
|
database: drizzleAdapter(db, {
|
||||||
@@ -19,6 +30,18 @@ export const auth = betterAuth({
|
|||||||
emailAndPassword: {
|
emailAndPassword: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
},
|
},
|
||||||
|
rateLimit: {
|
||||||
|
storage: "secondary-storage",
|
||||||
|
customStorage: {
|
||||||
|
get: async (key) => {
|
||||||
|
const value = await redis.get(key);
|
||||||
|
return value as RateLimit | undefined;
|
||||||
|
},
|
||||||
|
set: async (key, value) => {
|
||||||
|
await redis.set(key, value);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
baseURL: NEXT_PUBLIC_BETTER_AUTH_URL,
|
baseURL: NEXT_PUBLIC_BETTER_AUTH_URL,
|
||||||
appName: "OpenCut",
|
appName: "OpenCut",
|
||||||
trustedOrigins: ["http://localhost:3000"],
|
trustedOrigins: ["http://localhost:3000"],
|
||||||
|
|||||||
+3
-1
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"strictNullChecks": true
|
"strictNullChecks": true,
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"module": "esnext"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user