सर्वर साइड कस्टम टेंप्लेट की अनुमतियां

इस दस्तावेज़ में, सर्वर-साइड कस्टम टेंप्लेट के लिए अनुमतियों के बारे में बताया गया है.


हर अनुमति:

  • एपीआई की मदद से जांच की जाती है.
  • सैंडबॉक्स किए गए JavaScript में, इस्तेमाल किए गए एपीआई के आधार पर अपने-आप पता चलता है. ऐसा तब होता है, जब कस्टम टेंप्लेट एडिटर में बदलाव किए जाते हैं (तेज़ी से फ़ीडबैक लूप के लिए) और जब कोड को कंपाइल किया जाता है (यह पुष्टि करने के लिए कि सही अनुमतियां लागू की गई हैं).
  • अनुमति को ज़्यादा सटीक बनाने के लिए, कस्टम टेंप्लेट एडिटर में बदलाव किया जा सकता है.
  • queryPermission एपीआई की मदद से, सैंडबॉक्स किए गए JavaScript में क्वेरी की जा सकती है.

access_bigquery

डिसप्ले नेम: Accesses BigQuery

ब्यौरा: इससे Google Cloud Platform पर BigQuery को ऐक्सेस किया जा सकता है.

कॉन्फ़िगरेशन: BigQuery के साथ इस्तेमाल करने के लिए, प्रोजेक्ट, डेटासेट, और टेबल के कॉम्बिनेशन को अनुमति देने का विकल्प. प्रोजेक्ट आईडी कॉन्फ़िगरेशन को GOOGLE_CLOUD_PROJECT पर सेट करने से, GOOGLE_CLOUD_PROJECT एनवायरमेंट वैरिएबल को प्रोजेक्ट आईडी के तौर पर इस्तेमाल किया जा सकेगा. ऐसा तब होगा, जब projectId को BigQuery API parameter से बाहर रखा जाएगा.

इस तारीख तक ज़रूरी है: BigQuery

क्वेरी सिग्नेचर: queryPermission('access_bigquery', <operation>, <options>)

ध्यान दें: <operation> एक स्ट्रिंग है और इसमें ये वैल्यू हो सकती हैं:

  • मेरी मदद करो

<options> एक ऑब्जेक्ट है, जिसमें ये आइटम शामिल हैं:

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

कोड का उदाहरण

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

डिसप्ले नेम: Google Firestore को ऐक्सेस करता है

जानकारी: इससे Google Firestore को ऐक्सेस करने की अनुमति मिलती है.

कॉन्फ़िगरेशन: इस विकल्प की मदद से, Firestore के साथ इस्तेमाल किए जाने वाले प्रोजेक्ट और पाथ (वाइल्डकार्ड सिंटैक्स के साथ काम करता है) के कॉम्बिनेशन को अनुमति दी जा सकती है. GOOGLE_CLOUD_PROJECT के प्रोजेक्ट आईडी कॉन्फ़िगरेशन को सेट करने से, GOOGLE_CLOUD_PROJECT एनवायरमेंट वैरिएबल को प्रोजेक्ट आईडी के तौर पर इस्तेमाल किया जा सकेगा. ऐसा तब होगा, जब projectId को Firestore API parameter से बाहर रखा जाएगा.

इस तारीख तक ज़रूरी है: Firestore

क्वेरी सिग्नेचर: queryPermission('access_firestore', <operation>, <options>)

ध्यान दें: <operation> एक स्ट्रिंग है और इसमें ये वैल्यू हो सकती हैं:

  • read - एपीआई को पढ़ने और क्वेरी करने का ऐक्सेस देता है
  • write - इससे एपीआई में बदलाव करने का ऐक्सेस मिलता है
  • read_write - एपीआई को पढ़ने, लिखने, और क्वेरी करने का ऐक्सेस देता है

<options> एक ऑब्जेक्ट है, जिसमें ये आइटम शामिल हैं:

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

कोड का उदाहरण

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

डिसप्ले नेम: Accesses response

ब्यौरा: जवाब का मुख्य हिस्सा, हेडर या स्टेटस को ऐक्सेस करने की अनुमति.

कॉन्फ़िगरेशन: किसी भी या खास ऐक्सेस की अनुमति देने का विकल्प. इसमें अलग-अलग सब-कॉम्पोनेंट के ऐक्सेस को कंट्रोल करने के लिए सब-ऑप्शन भी शामिल हैं.

इनके लिए ज़रूरी है: setPixelResponse, setResponseBody, setResponseHeader, setResponseStatus

क्वेरी सिग्नेचर: queryPermission('access_response', 'write', <component>[, <optional component name>])

ध्यान दें: इससे यह तय होता है कि आउटगोइंग एचटीटीपी रिस्पॉन्स कॉम्पोनेंट को ऐक्सेस किया जा सकता है या नहीं.

कोड का उदाहरण

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

डिसप्ले नेम: Accesses Template Storage

Description: इससे टेंप्लेट के लिए कुछ समय के स्टोरेज को ऐक्सेस करने की अनुमति मिलती है. यह स्टोरेज, सर्वर-साइड प्रोसेस के लाइफ़टाइम तक बना रह सकता है.

कॉन्फ़िगरेशन: कोई नहीं

इस तारीख तक ज़रूरी है: templateDataStorage

क्वेरी सिग्नेचर: queryPermission('access_template_storage')

कोड का उदाहरण

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

get_cookies

डिसप्ले नेम: कुकी की वैल्यू पढ़ने की अनुमति

जानकारी: यह अनुमति मिलने पर, चुनिंदा नाम के साथ कुकी की वैल्यू को पढ़ा जा सकता है.

कॉन्फ़िगरेशन: उन कुकी के नामों की सूची जिन्हें पढ़ने की अनुमति है.

इस तारीख तक ज़रूरी है: getCookieValues

क्वेरी सिग्नेचर: queryPermission('get_cookies', <name>)

Notes: यह तय करता है कि किसी कुकी को उसके नाम के आधार पर पढ़ा जा सकता है या नहीं.

कोड का उदाहरण

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

लॉगिंग

डिसप्ले नेम: कंसोल में लॉग करने की अनुमति

जानकारी: यह अनुमति मिलने पर, डेवलपर कंसोल और Tag Manager के झलक मोड में लॉग इन किया जा सकता है.

कॉन्फ़िगरेशन: प्रोडक्शन में लॉगिंग की सुविधा चालू करने का विकल्प. डिफ़ॉल्ट रूप से, सिर्फ़ डीबग/झलक मोड में लॉग करने की अनुमति होती है. अनुमति न मिलने पर, logToConsole कोई गड़बड़ी नहीं दिखाएगा. हालांकि, यह लॉग मैसेज को दबा देगा.

इस तारीख तक ज़रूरी है: logToConsole

क्वेरी सिग्नेचर: queryPermission('logging')

नोट: इससे यह कंट्रोल किया जाता है कि कोई कस्टम टेंप्लेट, डेवलपर कंसोल में लॉग इन कर सकता है या नहीं.

कोड का उदाहरण

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

डिसप्ले नेम: मैसेज इस्तेमाल करने की अनुमति

जानकारी: addMessageListener या sendMessage एपीआई का इस्तेमाल करके, मैसेज भेजता या पाता है.

कॉन्फ़िगरेशन: मैसेज का टाइप तय करने का विकल्प. साथ ही, यह तय करने का विकल्प कि टेंप्लेट, मैसेज सुन सकता है, भेज सकता है या दोनों काम कर सकता है.

इनके लिए ज़रूरी है: addMessageListener, sendMessage

क्वेरी सिग्नेचर: queryPermission('use_message', <usage>, <message type>)

ध्यान दें: इस्तेमाल के लिए, listen, send या listen_and_send में से कोई एक वैल्यू हो सकती है.

कोड का उदाहरण

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

डिसप्ले नेम: कंटेनर के डेटा को पढ़ने की अनुमति

जानकारी: कंटेनर से जुड़े डेटा को पढ़ने की अनुमति.

कॉन्फ़िगरेशन: कोई नहीं.

इनके लिए ज़रूरी है: getClientName, getContainerVersion

क्वेरी सिग्नेचर: queryPermission('read_container_data')

Notes: इससे यह कंट्रोल किया जाता है कि कोई कस्टम टेंप्लेट, कंटेनर डेटा को पढ़ सकता है या नहीं.

कोड का उदाहरण

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

read_event_data

डिसप्ले नेम: इवेंट डेटा पढ़ने की अनुमति

जानकारी: यह अनुमति मिलने पर, इवेंट का डेटा पढ़ा जा सकता है.

कॉन्फ़िगरेशन: किसी भी ऐक्सेस की अनुमति देने का विकल्प या अनुमति वाले कुंजी पाथ की सूची से कंट्रोल किया जाने वाला खास ऐक्सेस (वाइल्डकार्ड सिंटैक्स का इस्तेमाल किया जा सकता है).

इनके लिए ज़रूरी है: getAllEventData, getEventData

क्वेरी सिग्नेचर: queryPermission('read_event_data'[, <optional key>])

ध्यान दें: यह कंट्रोल करता है कि कोई कस्टम टेंप्लेट, दिए गए कुंजी पाथ पर इवेंट डेटा को पढ़ सकता है या नहीं. अगर कोई कुंजी पाथ नहीं दिया गया है, तो यह सभी इवेंट डेटा को पढ़ सकता है.

कोड का उदाहरण

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

डिसप्ले नेम: Reads event metadata

जानकारी: यह अनुमति मिलने पर, इवेंट कॉलबैक में इवेंट मेटाडेटा को पढ़ा जा सकता है

कॉन्फ़िगरेशन: कोई नहीं

इस तारीख तक ज़रूरी है: addEventCallback

क्वेरी सिग्नेचर: queryPermission('read_event_metadata')

Notes: इससे यह कंट्रोल किया जाता है कि कोई कस्टम टेंप्लेट, कॉलबैक में इवेंट का मेटाडेटा पढ़ सकता है या नहीं.

कोड का उदाहरण

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

read_request

डिसप्ले नेम: एचटीटीपी अनुरोध को पढ़ता है

ब्यौरा: अनुरोध के हेडर, क्वेरी पैरामीटर, मुख्य हिस्से, पाथ या रिमोट आईपी पते को पढ़ता है.

कॉन्फ़िगरेशन: किसी भी या खास ऐक्सेस की अनुमति देने का विकल्प. इसमें अलग-अलग सब-कॉम्पोनेंट के ऐक्सेस को कंट्रोल करने के लिए सब-ऑप्शन भी शामिल हैं.

इनके लिए ज़रूरी है: extractEventsFromMpv1, extractEventsFromMpv2, getRemoteAddress, getRequestBody, getRequestHeader, getRequestPath, getRequestQueryParameter, getRequestQueryParameters, getRequestQueryString

क्वेरी सिग्नेचर: queryPermission('read_request', <component>[, <optional component name>])

Notes: इससे यह तय होता है कि इनकमिंग एचटीटीपी रिस्पॉन्स कॉम्पोनेंट को ऐक्सेस किया जा सकता है या नहीं.

कोड का उदाहरण

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

डिसप्ले नेम: जवाब दिखाता है

ब्यौरा: कॉलर को जवाब देने की अनुमति.

कॉन्फ़िगरेशन: कोई नहीं

इस तारीख तक ज़रूरी है: returnResponse

क्वेरी सिग्नेचर: queryPermission('return_response')

ध्यान दें: इस अनुमति में, सीमित करने के लिए कोई फ़ील्ड नहीं होता है. आम तौर पर, इसके लिए क्वेरी नहीं की जाती है.

run_container

डिसप्ले नेम: कंटेनर को चलाने की अनुमति

जानकारी: इवेंट के साथ कंटेनर चलाने की अनुमति

कॉन्फ़िगरेशन: कोई नहीं

इस तारीख तक ज़रूरी है: runContainer

क्वेरी सिग्नेचर: queryPermission('run_container')

ध्यान दें: इस अनुमति में, सीमित करने के लिए कोई फ़ील्ड नहीं होता है. आम तौर पर, इसके लिए क्वेरी नहीं की जाती है.

send_http

डिसप्ले नेम: एचटीटीपी अनुरोध भेजने की अनुमति

जानकारी: यह अनुमति मिलने पर, दिए गए यूआरएल पर एचटीटीपी अनुरोध भेजा जा सकता है.

इनके लिए ज़रूरी है: getGoogleScript, sendEventToGoogleAnalytics, sendHttpGet, sendHttpRequest

क्वेरी सिग्नेचर: queryPermission('send_http', <url>)

ध्यान दें: यूआरएल के आधार पर, यह तय करता है कि एचटीटीपी अनुरोध किया जा सकता है या नहीं. सुरक्षित कनेक्शन के लिए, सिर्फ़ सुरक्षित (एचटीटीपीएस) यूआरएल इस्तेमाल करने की अनुमति है.

कोड का उदाहरण

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

डिसप्ले नेम: ब्राउज़र से पिक्सल भेजने की अनुमति

जानकारी: यह अनुमति मिलने पर, ब्राउज़र से, दिए गए किसी यूआरएल पर जीईटी अनुरोध भेजा जा सकता है.

इस तारीख तक ज़रूरी है: sendPixelFromBrowser

क्वेरी सिग्नेचर: queryPermission('send_pixel_from_browser', <url>)

ध्यान दें: यह तय करता है कि ब्राउज़र से अनुरोध भेजा जा सकता है या नहीं. यह यूआरएल पर निर्भर करता है.

कोड का उदाहरण

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

डिसप्ले नेम: Sets a cookie

जानकारी: यह अनुमति मिलने पर, दिए गए नाम और पैरामीटर के साथ किसी कुकी को सेट किया जा सकता है.

कॉन्फ़िगरेशन: अनुमति वाली कुकी के नामों की टेबल. इसमें हर कुकी के नाम, डोमेन, पाथ, secure एट्रिब्यूट, और समयसीमा खत्म होने की तारीख पर पाबंदियां लगाने के विकल्प होते हैं.

इस तारीख तक ज़रूरी है: setCookie

क्वेरी सिग्नेचर: queryPermission('set_cookies', <name>, <options>)

Notes: Governs whether a given 'Set-Cookie' header can be added to the response, depending on the cookie name, domain, path, secure attribute, and expiration.

कोड का उदाहरण

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

डिसप्ले नेम: ज़रूरत के हिसाब से बनाए गए निजी पासकोड के इस्तेमाल की अनुमति

जानकारी: क्रिप्टोग्राफ़िक ऑपरेशन के लिए JSON कुंजी वाली फ़ाइल में सेव की गई निजी पासकोड का इस्तेमाल करता है.

Configuration: अनुमति वाले कुंजी आईडी की सूची. आईडी, सर्वर पर SGTM_CREDENTIALS एनवायरमेंट वैरिएबल में बताई गई JSON कुंजी वाली फ़ाइल में मौजूद कुंजियों से मेल खाने चाहिए.

इस तारीख तक ज़रूरी है: hmacSha256

क्वेरी सिग्नेचर: queryPermission('use_custom_private_keys', <key id>)

Notes: इससे, अनुमति वाली निजी कुंजियों की सूची को मैनेज किया जाता है.

कोड का उदाहरण

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

डिसप्ले नेम: Google Tag Manager, Google ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करता है

जानकारी: Google API की पुष्टि करने के लिए Google Tag Manager, Google के डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करता है.

कॉन्फ़िगरेशन: अनुमति वाले Google OAuth 2.0 स्कोप की सूची.

इस तारीख तक ज़रूरी है: getGoogleAuth

क्वेरी सिग्नेचर: queryPermission('use_google_credentials', <scopes>)

Notes: Google API के साथ इस्तेमाल करने के लिए, Google OAuth 2.0 के दायरे सीमित करता है.

कोड का उदाहरण

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

user_ip

डिसप्ले नेम: उपयोगकर्ता का आईपी पता पढ़ने की अनुमति

जानकारी: उपयोगकर्ता का आईपी पता पढ़ने की अनुमति.

कॉन्फ़िगरेशन: कोई नहीं

इस तारीख तक ज़रूरी है: getAnonymizedIpAddress

क्वेरी सिग्नेचर: queryPermission('user_ip')

Notes: इससे यह कंट्रोल किया जाता है कि कोई कस्टम टेंप्लेट, उपयोगकर्ता का आईपी पता पढ़ सकता है या नहीं.

कोड का उदाहरण

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

if (queryPermission('user_ip')) {
  return getAnonymizedIpAddress();
}