Skip to content

Commit 229d03b

Browse files
committed
Simplify free mode risk scoring
1 parent 22943b3 commit 229d03b

1 file changed

Lines changed: 28 additions & 28 deletions

File tree

web/src/server/free-mode-country.ts

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,32 @@ function hasTorPrivacySignal(
173173
return ipPrivacy?.signals.includes('tor') ?? false
174174
}
175175

176+
function hasStrongCorroboratedAbuse(
177+
countryAccess: Partial<
178+
Pick<
179+
FreeModeCountryAccess,
180+
| 'ipPrivacy'
181+
| 'spurIpPrivacy'
182+
| 'scamalyticsIpPrivacy'
183+
| 'scamalyticsScore'
184+
>
185+
>,
186+
): boolean {
187+
return (
188+
hasHardBlockedPrivacySignal(countryAccess.ipPrivacy) &&
189+
hasHardBlockedPrivacySignal(countryAccess.spurIpPrivacy) &&
190+
(hasHardBlockedPrivacySignal(countryAccess.scamalyticsIpPrivacy) ||
191+
(countryAccess.scamalyticsScore ?? 0) >= SCAMALYTICS_HIGH_RISK_SCORE)
192+
)
193+
}
194+
176195
function maxPrivacySignalRisk(
177196
ipPrivacy: FreeModeIpPrivacy | null | undefined,
178197
): number {
179198
let risk = 0
199+
const hasHardSignal = ipPrivacy?.signals.some(
200+
isFreebuffHardBlockedPrivacySignal,
201+
)
180202
for (const signal of ipPrivacy?.signals ?? []) {
181203
if (signal === 'tor') risk = Math.max(risk, 100)
182204
else if (isFreebuffHardBlockedPrivacySignal(signal)) {
@@ -187,22 +209,17 @@ function maxPrivacySignalRisk(
187209
risk = Math.max(risk, 40)
188210
}
189211
}
190-
if (
191-
ipPrivacy?.providerName &&
192-
ipPrivacy.signals.some(isFreebuffHardBlockedPrivacySignal)
193-
) {
212+
if (ipPrivacy?.providerName && hasHardSignal) {
194213
risk = Math.max(risk, 80)
195214
}
196215
if (
216+
hasHardSignal &&
197217
typeof ipPrivacy?.percentDaysSeen === 'number' &&
198218
ipPrivacy.percentDaysSeen >= 50
199219
) {
200220
risk = Math.max(risk, 85)
201221
}
202-
if (
203-
ipPrivacy?.lastSeen &&
204-
ipPrivacy.signals.some(isFreebuffHardBlockedPrivacySignal)
205-
) {
222+
if (ipPrivacy?.lastSeen && hasHardSignal) {
206223
const lastSeenMs = Date.parse(ipPrivacy.lastSeen)
207224
const sevenDaysMs = 7 * 24 * 60 * 60 * 1000
208225
if (Number.isFinite(lastSeenMs) && Date.now() - lastSeenMs <= sevenDaysMs) {
@@ -215,7 +232,6 @@ function maxPrivacySignalRisk(
215232
export function getFreeModeRiskScore(
216233
countryAccess: Pick<
217234
FreeModeCountryAccess,
218-
| 'allowed'
219235
| 'blockReason'
220236
| 'cfCountry'
221237
| 'ipPrivacy'
@@ -266,12 +282,7 @@ export function getFreeModeRiskScore(
266282
if (typeof countryAccess.scamalyticsScore === 'number') {
267283
score = Math.max(score, countryAccess.scamalyticsScore)
268284
}
269-
if (
270-
hasHardBlockedPrivacySignal(countryAccess.ipPrivacy) &&
271-
hasHardBlockedPrivacySignal(countryAccess.spurIpPrivacy) &&
272-
(hasHardBlockedPrivacySignal(countryAccess.scamalyticsIpPrivacy) ||
273-
(countryAccess.scamalyticsScore ?? 0) >= SCAMALYTICS_HIGH_RISK_SCORE)
274-
) {
285+
if (hasStrongCorroboratedAbuse(countryAccess)) {
275286
score = Math.max(score, 95)
276287
}
277288

@@ -300,12 +311,7 @@ export function shouldHardBlockFreeModeAccess(
300311
) {
301312
return true
302313
}
303-
return (
304-
hasHardBlockedPrivacySignal(countryAccess.ipPrivacy) &&
305-
hasHardBlockedPrivacySignal(countryAccess.spurIpPrivacy) &&
306-
(hasHardBlockedPrivacySignal(countryAccess.scamalyticsIpPrivacy) ||
307-
(countryAccess.scamalyticsScore ?? 0) >= SCAMALYTICS_HIGH_RISK_SCORE)
308-
)
314+
return hasStrongCorroboratedAbuse(countryAccess)
309315
}
310316

311317
export function getFreeModePrivacyDecision(
@@ -335,12 +341,7 @@ export function getFreeModePrivacyDecision(
335341
return 'ipinfo_failed_limited'
336342
}
337343
if (countryAccess.blockReason === 'anonymous_network') {
338-
if (
339-
hasHardBlockedPrivacySignal(countryAccess.ipPrivacy) &&
340-
hasHardBlockedPrivacySignal(countryAccess.spurIpPrivacy) &&
341-
(hasHardBlockedPrivacySignal(countryAccess.scamalyticsIpPrivacy) ||
342-
(countryAccess.scamalyticsScore ?? 0) >= SCAMALYTICS_HIGH_RISK_SCORE)
343-
) {
344+
if (hasStrongCorroboratedAbuse(countryAccess)) {
344345
return 'corroborated_block'
345346
}
346347
if (countryAccess.spurStatus === 'failed') {
@@ -364,7 +365,6 @@ export function getFreeModePrivacyProviderDecision(
364365
| 'ipPrivacy'
365366
| 'spurIpPrivacy'
366367
| 'spurStatus'
367-
| 'scamalyticsIpPrivacy'
368368
| 'scamalyticsStatus'
369369
>,
370370
): FreebuffPrivacyProviderDecision {

0 commit comments

Comments
 (0)