Cloudflare js worker разрешает список стран и блокирует остальные

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

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

любые советы, чтобы настроить это


person Jecki    schedule 12.05.2019    source источник


Ответы (1)


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

let countryBlocked = countries.has(country)

к этому: (обратите внимание на восклицательный знак)

let countryBlocked = !countries.has(country)

Восклицательный знак — это оператор NOT. Таким образом, это изменение установит countryBlocked в true, если страна для этого запроса НЕ входит в набор разрешенных стран.

Следует помнить, что если страна для данного запроса неизвестна, может отображаться как "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)
}
person Jake Riesterer    schedule 14.05.2019