Download server/verifyTokenAndRateLimit.ts from abhijeetsarkargis/MiniSearch: direct link, hf CLI and curl.
- Browser
- Download file 1.2 kB
-
https://huggingface.co/spaces/abhijeetsarkargis/MiniSearch/resolve/main/server/verifyTokenAndRateLimit.ts
- Command line
-
hf download hf://spaces/abhijeetsarkargis/MiniSearch/server/verifyTokenAndRateLimit.ts
-
curl -L -o verifyTokenAndRateLimit.ts https://huggingface.co/spaces/abhijeetsarkargis/MiniSearch/resolve/main/server/verifyTokenAndRateLimit.ts
1.2 kB
| import { argon2Verify } from "hash-wasm"; | |
| import { RateLimiterMemory } from "rate-limiter-flexible"; | |
| import { getSearchToken } from "./searchToken"; | |
| import { addVerifiedToken, isVerifiedToken } from "./verifiedTokens"; | |
| const rateLimiter = new RateLimiterMemory({ | |
| points: 10, | |
| duration: 10, | |
| }); | |
| export async function verifyTokenAndRateLimit(token: string | null): Promise<{ | |
| isAuthorized: boolean; | |
| statusCode?: number; | |
| error?: string; | |
| }> { | |
| if (!token) { | |
| return { | |
| isAuthorized: false, | |
| statusCode: 401, | |
| error: "Missing or invalid token", | |
| }; | |
| } | |
| if (!isVerifiedToken(token)) { | |
| let isValidToken = false; | |
| try { | |
| isValidToken = await argon2Verify({ | |
| password: getSearchToken(), | |
| hash: token, | |
| }); | |
| } catch (error) { | |
| void error; | |
| } | |
| if (isValidToken) { | |
| addVerifiedToken(token); | |
| } else { | |
| return { | |
| isAuthorized: false, | |
| statusCode: 401, | |
| error: "Unauthorized.", | |
| }; | |
| } | |
| } | |
| try { | |
| await rateLimiter.consume(token); | |
| } catch { | |
| return { | |
| isAuthorized: false, | |
| statusCode: 429, | |
| error: "Too many requests.", | |
| }; | |
| } | |
| return { isAuthorized: true }; | |
| } | |