Files
fluxer/fluxer_api/src/api/middleware/TorExitMiddleware.ts
T

20 lines
738 B
TypeScript

// SPDX-License-Identifier: AGPL-3.0-or-later
import {TorBlockedError} from '@fluxer/errors/src/domains/moderation/TorBlockedError';
import {extractClientIp} from '@fluxer/ip_utils/src/ClientIp';
import {createMiddleware} from 'hono/factory';
import {Config} from '../Config';
import type {HonoEnv} from '../types/HonoEnv';
import {torExitListCache} from './TorExitListCache';
export const TorExitMiddleware = createMiddleware<HonoEnv>(async (ctx, next) => {
const clientIp = extractClientIp(ctx.req.raw, {
trustClientIpHeader: Config.proxy.trust_client_ip_header,
clientIpHeaderName: Config.proxy.client_ip_header,
});
if (clientIp && torExitListCache.isTorExit(clientIp)) {
throw new TorBlockedError();
}
await next();
});