INTEGRITY Dokumentace

Context Enricher

Zaraz Context Enricher je nástroj pro úpravu nebo obohacení context která je používána v rámci Zaraz prostřednictvím Cloudflare Worker. Context Enricher vám umožňuje přístup ke klientským a systémovým proměnným.

Vytvoření Workeru

Chcete-li používat Context Enricher, musíte nejprve vytvořit nový Cloudflare Worker. Můžete to udělat přes Cloudflare dashboard nebo pomocí Wrangler.

Chcete-li vytvořit nový Worker v Cloudflare dashboardu:

  1. V dashboardu Cloudflare přejděte na Workers & Pages stránce.

    Přejděte na Workers & Pages ↗
  2. Vyberte Vytvoření aplikace.

  3. Zadejte název svého Workeru a vyberte Nasadit.

  4. Vyberte Upravit kód.

Právě jste vytvořili základní Worker, který odpovídá textem "Hello world." Aby tento Worker fungoval jako Context Enricher, musíte upravit kód tak, aby vracel kontext zpět:

export default {
  async fetch(request, env, ctx) {
    const { system, client } = await request.json();

    // Here goes your modification to the system or client objects.
    /*
      For example, to change the country to a fictitious "Pirate's Island" ("PI"), use:
      system.device.location.country = 'PI';
    */

    return new Response(JSON.stringify({ system, client }));
  },
};

Další, podrobnější příklady různých případů užití najdete v pokračování textu, případně si přečtěte Zaraz Context.

Konfigurace Context Enricher

Jakmile je váš Worker publikovaný, můžete ho vybrat v nastavení Zaraz:

  1. V dashboardu Cloudflare přejděte na Nastavení stránce.

    Přejděte na Nastavení ↗
  2. Vyberte svůj Context Enricher Worker.

  3. Uložte svá nastavení.

Váš Context Enricher se nyní bude spouštět u všech požadavků Zaraz v dané zóně.

Příklad Context Enricher

Přidání libovolných informací pomocí API

Pomocí Context Enricher můžete do svého kontextu přidávat další informace. Můžete například pomocí API zjistit aktuální počasí v lokalitě uživatele a přidat ho do kontextu.

function getWeatherForLocation({ client, system }) {
  // Get the location from the context.
  const { city } = system.device.location;

  // Get the weather from an API.
  const response = await fetch(
    `https://wttr.in/${encodeURIComponents(city)}?format=j1`
  ).then((response) => response.json());

  // Add the weather to the context.
  client.weather = weather;

  return { client, system };
}

export default {
  async fetch(request, env, ctx) {
    const { system, client } = await request.json();

    // Add the weather to the context.
    const newContext = getWeatherForLocation({ system, client });

    // Return as JSON
    return new Response(JSON.stringify(newContext));
  },
};

Nyní můžete vlastnost weather použít kdekoli v Zaraz výběrem Track Property z pole atributů a zadáním weather.

Maskování citlivých údajů, jako jsou e-mailové adresy

Předpokládejme, že chceme redigovat citlivé informace, například e-maily. Nahradíme proto všechny výskyty e-mailových adres v celém kontextu. Mějte na paměti, že jde pouze o příklad, který nemusí odpovídat všem okrajovým situacím nebo případům užití.

Pro zjednodušení tohoto příkladu nahradíme všechny řetězce, které obsahují @ symbol:

function redactEmailAddressesFromObject(context) {
  // Loop through all keys of the object.
  for (const key in context) {
    // Check if the value is a string.
    if (typeof context[key] === "string") {
      // Check if the string contains an @ symbol.
      if (context[key].includes("@")) {
        // Replace the string with a redacted version.
        context[key] = "[email protected]";
      }
    } else if (typeof context[key] === "object") {
      // Recursively call this function to redact the object.
      context[key] = redactEmailAddressesFromObject(context[key]);
    }
  }

  return context;
}

export default {
  async fetch(request, env, ctx) {
    const { system, client } = await request.json();

    // Redact email addresses from the context.
    const newContext = redactEmailAddressesFromObject({ system, client });

    // Return as JSON
    return new Response(JSON.stringify(newContext));
  },
};