cloudflare js worker разрешает список стран и блокирует остальные - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь настроить следующий код так, чтобы он был разрешен, если страна в списке, и заблокирован, если нет, текущий код делает противоположный блок, если страна в списке, и разрешает, если нет

addEventListener('fetch', event => {
  event.respondWith(blockCountries(event.request))
})

//Add countries to this Set to block 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')

  // Find out if country is on the block list
  let countryBlocked = countries.has(country)

  // If it's on the blocked 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)
}

любые советы по настройке

1 Ответ

0 голосов
/ 15 мая 2019

Чтобы сделать это изменение, вы можете изменить это:

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)
}
...