Autorisations de modèles personnalisés côté serveur

Ce document décrit les autorisations des modèles personnalisés côté serveur.


Chaque autorisation est:

  • Vérifié par les API qui en ont besoin.
  • Détecté automatiquement dans le code JavaScript en bac à sable, en fonction des API utilisées. Cela se produit lorsque des modifications sont apportées dans l'éditeur de modèles personnalisés (pour une boucle de rétroaction rapide) et lorsque le code est compilé (pour vérifier que les autorisations appropriées sont appliquées).
  • Modifiable dans l'éditeur de modèles personnalisés pour rendre l'autorisation plus spécifique.
  • Peut être interrogé en JavaScript de bac à sable via l'API queryPermission.

access_bigquery

Nom à afficher:permet d'accéder à BigQuery

Description:permet d'accéder à BigQuery sur Google Cloud Platform.

Configuration:option permettant d'autoriser l'utilisation de combinaisons de projet, d'ensemble de données et de table spécifiées avec BigQuery. Définir une configuration d'ID de projet sur GOOGLE_CLOUD_PROJECT permet d'utiliser la variable d'environnement GOOGLE_CLOUD_PROJECT comme ID de projet lorsque projectId est exclu de BigQuery API parameter.

Obligatoire par: BigQuery

Signature de la requête: queryPermission('access_bigquery', <operation>, <options>)

Remarques:<operation> est une chaîne et peut avoir les valeurs suivantes:

  • write

<options> est un objet contenant les éléments suivants:

{
  'projectId': <project_id>,
  'datasetId': <dataset_id>,
  'tableId': <table_id>
}

Exemple de code

const BigQuery = require('BigQuery');
const queryPermission = require('queryPermission');

const connectionInfo = {
  'projectId': 'gcp-cloud-project-id',
  'datasetId': 'destination-dataset',
  'tableId': 'destination-table',
};

if (queryPermission('access_bigquery', 'write', connectionInfo)) {
  const rows = [{
    'column1': 'String1',
    'column2': 1234,
  }];
  const options = {
    'ignoreUnknownValues': true,
    'skipInvalidRows': false,
  };

  BigQuery.insert(connectionInfo, rows, options)
      .then(data.gtmOnSuccess, data.gtmOnFailure);
}

access_firestore

Nom à afficher:accède à Google Firestore

Description:permet d'accéder à Google Firestore.

Configuration:option permettant d'autoriser l'utilisation de combinaisons de projet et de chemin d'accès (syntaxe avec caractères génériques acceptée) spécifiées avec Firestore. Définir une configuration d'ID de projet sur GOOGLE_CLOUD_PROJECT permet d'utiliser la variable d'environnement GOOGLE_CLOUD_PROJECT comme ID de projet lorsque projectId est exclu de Firestore API parameter.

Obligatoire par: Firestore

Signature de la requête: queryPermission('access_firestore', <operation>, <options>)

Remarques:<operation> est une chaîne et peut avoir les valeurs suivantes:

  • read : accorde un accès aux API de lecture et d'interrogation
  • write : accorde l'accès à l'API en écriture
  • read_write : accorde un accès aux API de lecture, d'écriture et de requête

<options> est un objet contenant les éléments suivants:

{
  'projectId': <project_id>,
  'path': <path>
}

Exemple de code

const Firestore = require('Firestore');
const queryPermission = require('queryPermission');

const options = {
  'projectId': 'gcp-cloud-project-id',
  'path': 'collection/document',
};

if (queryPermission('access_firestore', 'read', options)) {
  Firestore.read('collection/document', {
    projectId: 'gcp-cloud-project-id',
  }).then(data.gtmOnSuccess, data.gtmOnFailure);
}

access_response

Nom à afficher:accès à la réponse

Description:permet d'accéder au corps, aux en-têtes ou à l'état des réponses.

Configuration:option permettant d'autoriser un accès quelconque ou spécifique, avec des sous-options permettant de contrôler l'accès à divers sous-composants.

Obligatoire pour: setPixelResponse, setResponseBody, setResponseHeader, setResponseStatus

Signature de la requête: queryPermission('access_response', 'write', <component>[, <optional component name>])

Remarques:Détermine si le composant de réponse HTTP sortant peut être accessible.

Exemple de code

const queryPermission = require('queryPermission');
const setResponseBody = require('setResponseBody');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');
if (queryPermission('access_response', 'write', 'header', 'Content-Type')) {
  setResponseHeader('Content-Type', 'text/plain');
}
if (queryPermission('access_response', 'write', 'body')) {
  setResponseBody('Not Found');
}
if (queryPermission('access_response', 'write', 'status')) {
  setResponseStatus(404);
}

access_template_storage

Nom à afficher : "Accéder au stockage de modèles"

Description:permet d'accéder à un espace de stockage temporaire pour les modèles pouvant persister pendant toute la durée de vie du processus côté serveur.

Configuration:aucune

Obligatoire par: templateDataStorage

Signature de la requête: queryPermission('access_template_storage')

Exemple de code

const queryPermission = require('queryPermission');
const templateDataStorage = require('templateDataStorage');
const key = 'my_key';
if (queryPermission('access_template_storage')) {
  const value = templateDataStorage.getItemCopy(key);
}

get_cookies

Nom à afficher:lit la ou les valeurs du cookie.

Description:lit les valeurs des cookies portant le nom spécifié.

Configuration:liste des noms des cookies autorisés à être lus.

Obligatoire par: getCookieValues

Signature de la requête: queryPermission('get_cookies', <name>)

Remarques:Détermine si un cookie peut être lu en fonction de son nom.

Exemple de code

const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
  cookieValues = getCookieValues(cookieName);
}

journalisation

Nom à afficher : "Se connecter à la console"

Description:consigne dans la console pour les développeurs et dans le mode Aperçu de Tag Manager.

Configuration:option permettant d'activer la journalisation en production. Par défaut, la journalisation n'est activée que pour le débogage/l'aperçu. Si l'autorisation est refusée, logToConsole ne génère pas d'erreur, mais supprime le message de journal.

Obligatoire par: logToConsole

Signature de la requête: queryPermission('logging')

Remarques:Détermine si un modèle personnalisé peut se connecter à la console du développeur.

Exemple de code

const queryPermission = require('queryPermission');
const logToConsole = require('logToConsole');
// Note that it's fine to call log, since the log call will be ignored if
// logging isn't permitted in the current environment.
logToConsole('diagnostic info');

use_message

Nom à afficher:Utiliser des messages

Description:envoie ou reçoit des messages à l'aide des API addMessageListener ou sendMessage.

Configuration:option permettant de spécifier le type de message et si le modèle peut écouter, envoyer ou les deux.

Obligatoire pour: addMessageListener, sendMessage

Signature de la requête: queryPermission('use_message', <usage>, <message type>)

Remarques:L'utilisation peut être listen, send ou listen_and_send.

Exemple de code

const queryPermission = require('queryPermission');
const sendMessage = require('sendMessage');
if (queryPermission('use_message', 'send', 'set_cookie')) {
  sendMessage('set_cookie', {name: 'foo', value: 'bar'});
}

read_container_data

Nom à afficher:lit les données du conteneur

Description:lit les données sur le conteneur.

Configuration:aucune.

Obligatoire pour: getClientName, getContainerVersion

Signature de la requête: queryPermission('read_container_data')

Remarques:Détermine si un modèle personnalisé peut lire les données du conteneur.

Exemple de code

const getContainerVersion = require('getContainerVersion');
const queryPermission = require('queryPermission');
if (queryPermission('read_container_data')) {
  return getContainerVersion();
}

read_event_data

Nom à afficher:lit les données d'événement

Description:lit les données de l'événement.

Configuration:option permettant d'autoriser tout accès ou un accès spécifique contrôlé par une liste de chemins de clé autorisés (syntaxe avec caractères génériques acceptée).

Obligatoire pour: getAllEventData, getEventData

Signature de la requête: queryPermission('read_event_data'[, <optional key>])

Remarques:Détermine si un modèle personnalisé peut lire les données d'événement à un chemin de clé donné (ou toutes les données d'événement, si aucun chemin de clé n'est indiqué).

Exemple de code

const getAllEventData = require('getAllEventData');
const queryPermission = require('queryPermission');
if (queryPermission('read_event_data')) {
  return getAllEventData();
}
const getEventData = require('getEventData');
const queryPermission = require('queryPermission');
const keyPath = 'parentField.childField';
if (queryPermission('read_event_data', keyPath)) {
  return getEventData(keyPath);
}

read_event_metadata

Nom à afficher:lit les métadonnées de l'événement.

Description:lit les métadonnées d'événement dans les rappels d'événement

Configuration:aucune

Obligatoire par: addEventCallback

Signature de la requête: queryPermission('read_event_metadata')

Remarques:Détermine si un modèle personnalisé peut lire les métadonnées d'événement dans les rappels.

Exemple de code

const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
  addEventCallback((containerId, eventMetadata) => {
    // Read event metadata.
  });
}

read_request

Nom à afficher:lit la requête HTTP

Description:lit les en-têtes de requête, les paramètres de requête, le corps, le chemin ou l'adresse IP distante.

Configuration:option permettant d'autoriser un accès quelconque ou spécifique, avec des sous-options permettant de contrôler l'accès à divers sous-composants.

Obligatoire pour: extractEventsFromMpv1, extractEventsFromMpv2, getRemoteAddress, getRequestBody, getRequestHeader, getRequestPath, getRequestQueryParameter, getRequestQueryParameters, getRequestQueryString

Signature de la requête: queryPermission('read_request', <component>[, <optional component name>])

Remarques:Détermine si le composant de réponse HTTP entrant peut être accessible.

Exemple de code

const queryPermission = require('queryPermission');
const getRequestBody = require('getRequestBody');
const getRequestHeader = require('getRequestHeader');
let body, contentType;
if (queryPermission('read_request', 'body')) {
  body = getRequestBody();
}
if (queryPermission('read_request', 'header', 'content-type')) {
  contentType = getRequestHeader('content-type');
}
if (body && contentType == 'application/json') { ... }

return_response

Nom à afficher:renvoie la réponse.

Description:renvoie la réponse à l'appelant.

Configuration:aucune

Obligatoire par: returnResponse

Signature de la requête: queryPermission('return_response')

Remarques:Cette autorisation ne comporte aucun champ à affiner et n'est généralement pas interrogée.

run_container

Nom à afficher:exécute le conteneur.

Description:exécute le conteneur avec un événement

Configuration:aucune

Obligatoire par: runContainer

Signature de la requête: queryPermission('run_container')

Remarques:Cette autorisation n'a pas de champ à affiner et n'est généralement pas interrogée.

send_http

Nom à afficher:envoie des requêtes HTTP

Description:envoie une requête HTTP à une URL spécifiée.

Obligatoire pour: getGoogleScript, sendEventToGoogleAnalytics, sendHttpGet, sendHttpRequest

Signature de la requête: queryPermission('send_http', <url>)

Remarques:Détermine si une requête HTTP peut être envoyée, en fonction de l'URL. Pour garantir une connexion sécurisée, seules les URL sécurisées (HTTPS) sont autorisées.

Exemple de code

const queryPermission = require('queryPermission');
const sendHttpGet = require('sendHttpGet');
const url = 'https://example.com/search?query=foo&results=10';
if (queryPermission('send_http', url)) {
  sendHttpGet(url);
}

send_pixel_from_browser

Nom à afficher:envoie des pixels à partir des navigateurs.

Description:envoie une requête GET à une URL spécifiée à partir du navigateur.

Obligatoire par: sendPixelFromBrowser

Signature de la requête: queryPermission('send_pixel_from_browser', <url>)

Remarques:Détermine si une requête peut être envoyée depuis le navigateur, en fonction de l'URL.

Exemple de code

const queryPermission = require('queryPermission');
const sendPixelFromBrowser = require('sendPixelFromBrowser');
const url = 'https://example.com/search?query=foo&results=10';
if (queryPermission('send_pixel_from_browser', url)) {
  sendPixelFromBrowser(url);
}

set_cookies

Nom à afficher:définit un cookie.

Description:définit un cookie avec le nom et les paramètres spécifiés.

Configuration:tableau des noms de cookies autorisés, chacun avec des restrictions facultatives sur le nom, le domaine, le chemin, l'attribut secure et l'expiration.

Obligatoire par: setCookie

Signature de la requête: queryPermission('set_cookies', <name>, <options>)

Remarques:Détermine si un en-tête "Set-Cookie" donné peut être ajouté à la réponse, en fonction du nom, du domaine, du chemin, de l'attribut secure et de l'expiration du cookie.

Exemple de code

const queryPermission = require('queryPermission');
const setCookie = require('setCookie');
const options = {
  'domain': 'www.example.com',
  'path': '/',
  'max-age': 60*60*24*365,
  'secure': true
};
if (queryPermission('set_cookies', 'info', options)) {
  setCookie('info', 'xyz', options);
}

use_custom_private_keys

Nom à afficher:utilise des clés privées personnalisées

Description:utilise les clés privées d'un fichier de clé JSON pour les opérations de chiffrement.

Configuration:liste des ID de clé autorisés. Les ID doivent correspondre aux clés du fichier de clé JSON référencé par la variable d'environnement SGTM_CREDENTIALS sur le serveur.

Obligatoire par: hmacSha256

Signature de la requête: queryPermission('use_custom_private_keys', <key id>)

Remarques:Contrôle la liste des clés privées autorisées.

Exemple de code

const hmacSha256= require('hmacSha256');
const queryPermission = require('queryPermission');
const keyId = 'key1';

let result;
if (queryPermission('use_custom_private_keys', keyId)) {
  result = hmacSha256('my_data', keyId);
}

use_google_credentials

Nom à afficher:utilise les identifiants par défaut de l'application Google

Description:utilise les identifiants par défaut de Google pour appeler les API Google.

Configuration:liste des champs d'application OAuth 2.0 Google autorisés.

Obligatoire par: getGoogleAuth

Signature de la requête: queryPermission('use_google_credentials', <scopes>)

Remarques:Limite les champs d'application OAuth 2.0 Google autorisés à utiliser avec les API Google.

Exemple de code

const getGoogleAuth = require('getGoogleAuth');
const queryPermission = require('queryPermission');

const scopes = [
  'https://www.googleapis.com/auth/datastore'
];

let auth;
if (queryPermission('use_google_credentials', scopes)) {
  auth = getGoogleAuth(scopes);
}