fix(api): mask Tor blocks as administrator IP bans (#2023)

This commit is contained in:
Hampus
2026-08-26 16:07:19 +02:00
committed by GitHub
parent 14a935db81
commit cf1a7d7a8a
7 changed files with 6 additions and 23 deletions
-2
View File
@@ -9896,8 +9896,6 @@
"GLOBAL_IP_BANNED",
"GLOBAL_IP_TEMPORARILY_BANNED",
"IP_BANNED",
"RESIDENTIAL_PROXY_BLOCKED",
"TOR_BLOCKED",
"MAX_ANIMATED_EMOJIS",
"MAX_APPLICATIONS",
"MAX_BOOKMARKS",
@@ -311,7 +311,7 @@ describe('Auth registration', () => {
date_of_birth: '2000-01-01',
consent: true,
})
.expect(403, 'TOR_BLOCKED')
.expect(403, 'GLOBAL_IP_BANNED')
.execute();
} finally {
torExitListCache.clearForTesting();
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {TorBlockedError} from '@fluxer/errors/src/domains/moderation/TorBlockedError';
import {IpBannedError} from '@fluxer/errors/src/domains/moderation/IpBannedError';
import {extractClientIp} from '@fluxer/ip_utils/src/ClientIp';
import {createMiddleware} from 'hono/factory';
import {Config} from '../Config';
@@ -13,7 +13,10 @@ export const TorExitMiddleware = createMiddleware<HonoEnv>(async (ctx, next) =>
clientIpHeaderName: Config.proxy.client_ip_header,
});
if (clientIp && torExitListCache.isTorExit(clientIp)) {
throw new TorBlockedError();
throw new IpBannedError({
ipAddress: clientIp,
kind: 'permanent',
});
}
await next();
});
-4
View File
@@ -25344,8 +25344,6 @@
"GLOBAL_IP_BANNED",
"GLOBAL_IP_TEMPORARILY_BANNED",
"IP_BANNED",
"RESIDENTIAL_PROXY_BLOCKED",
"TOR_BLOCKED",
"MAX_ANIMATED_EMOJIS",
"MAX_APPLICATIONS",
"MAX_BOOKMARKS",
@@ -25660,8 +25658,6 @@
"Your IP address {ipAddress} has been permanently blocked from the Fluxer API by platform administrators. If you believe this is a mistake, contact support@fluxer.app to appeal. Include this IP address in your appeal.",
"Your IP address {ipAddress} has been temporarily blocked from the Fluxer API for 24 hours because of abusive or unusual access patterns. We usually do not provide appeals for temporary API bans. Change IP addresses or wait for the ban to expire, and review the Fluxer API access patterns coming from your client.",
"Your IP address {ipAddress} has been permanently blocked from the Fluxer API by platform administrators. If you believe this is a mistake, contact support@fluxer.app to appeal. Include this IP address in your appeal.",
"This user's IP is banned from this community.",
"This user's IP is banned from this community.",
"You've reached the maximum of {count, plural, one {# animated emoji} other {# animated emojis}}.",
"You've reached the maximum of {limit, plural, one {# application} other {# applications}}.",
"You've reached the maximum of {count, plural, one {# bookmark} other {# bookmarks}}.",
-2
View File
@@ -159,8 +159,6 @@ export const APIErrorCodes = {
GLOBAL_IP_BANNED: 'GLOBAL_IP_BANNED',
GLOBAL_IP_TEMPORARILY_BANNED: 'GLOBAL_IP_TEMPORARILY_BANNED',
IP_BANNED: 'IP_BANNED',
RESIDENTIAL_PROXY_BLOCKED: 'RESIDENTIAL_PROXY_BLOCKED',
TOR_BLOCKED: 'TOR_BLOCKED',
MAX_ANIMATED_EMOJIS: 'MAX_ANIMATED_EMOJIS',
MAX_APPLICATIONS: 'MAX_APPLICATIONS',
MAX_BOOKMARKS: 'MAX_BOOKMARKS',
@@ -1,10 +0,0 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes';
import {ForbiddenError} from '@fluxer/errors/src/domains/core/ForbiddenError';
export class TorBlockedError extends ForbiddenError {
constructor() {
super({code: APIErrorCodes.TOR_BLOCKED});
}
}
@@ -208,8 +208,6 @@ export const ErrorCodeToI18nKey = {
[APIErrorCodes.GLOBAL_IP_BANNED]: 'permissions.global_ip_banned',
[APIErrorCodes.GLOBAL_IP_TEMPORARILY_BANNED]: 'permissions.global_ip_temporarily_banned',
[APIErrorCodes.IP_BANNED]: 'permissions.global_ip_banned',
[APIErrorCodes.RESIDENTIAL_PROXY_BLOCKED]: 'permissions.user_ip_banned_from_guild',
[APIErrorCodes.TOR_BLOCKED]: 'permissions.user_ip_banned_from_guild',
[APIErrorCodes.MAX_ANIMATED_EMOJIS]: 'invites_and_packs.max_animated_emojis_reached',
[APIErrorCodes.MAX_APPLICATIONS]: 'misc_limits.max_applications_reached',
[APIErrorCodes.MAX_BOOKMARKS]: 'misc_limits.max_bookmarks_reached',