mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-18 21:45:31 +09:00
20 lines
738 B
TypeScript
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();
|
|
});
|