Чтобы сделать это изменение, вы можете изменить это:
let countryBlocked = countries.has(country)
на следующее: (обратите внимание на восклицательный знак)
let countryBlocked = !countries.has(country)
Восклицательный знак - NOT
оператор.Таким образом, это изменение установит countryBlocked
в true
, если страна для этого запроса НЕ находится в наборе разрешенных стран.
Следует помнить одну вещь: если страна не известна для данногоrequest, может отображаться как "XX" .
Вот полный код с этим изменением и обновленные комментарии для отражения нового поведения:
addEventListener('fetch', event => {
event.respondWith(blockCountries(event.request))
})
// Add countries to this Set to allow them
const countries = new Set([
"US", // United States
"SG", // Singapore
"BR" // Brazil
])
async function blockCountries(request) {
// Get country value from request headers
let country = request.headers.get('cf-ipcountry')
// Check if country is on the allowed list
let countryBlocked = !countries.has(country)
// If it's not on the allowed list, give back a 403
if (countryBlocked){
return new Response("This page not available in your country",
{ status: 403, statusText: "Forbidden" })
}
// Catch-all return of the original response
return await fetch(request)
}