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

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


हर अनुमति:

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

access_bigquery

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

ब्यौरा: Google Cloud Platform पर BigQuery को ऐक्सेस करने की अनुमति देता है.

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

इनके लिए ज़रूरी है: BigQuery

क्वेरी का हस्ताक्षर: queryPermission('access_bigquery', <operation>, <options>)

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

  • write

<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 - write API का ऐक्सेस देता है
  • 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

डिसप्ले नेम: जवाब देखने की अनुमति

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

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

इनके लिए ज़रूरी है: 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

डिसप्ले नेम: टेंप्लेट स्टोरेज को ऐक्सेस करता है

जानकारी: इसकी मदद से, उन टेंप्लेट के लिए कुछ समय के लिए स्टोरेज का ऐक्सेस मिलता है जो सर्वर-साइड प्रोसेस के दौरान मौजूद रहते हैं.

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

इनके लिए ज़रूरी है: 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>)

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

कोड का उदाहरण

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

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

कोड का उदाहरण

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

डिसप्ले नेम: इवेंट का मेटाडेटा पढ़ता है

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

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

इनके लिए ज़रूरी है: addEventCallback

क्वेरी का हस्ताक्षर: queryPermission('read_event_metadata')

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

कोड का उदाहरण

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

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

कोड का उदाहरण

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

डिसप्ले नेम: यह कुकी सेट करता है

जानकारी: बताए गए नाम और पैरामीटर के साथ एक कुकी सेट करता है.

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

इनके लिए ज़रूरी है: setCookie

क्वेरी का हस्ताक्षर: queryPermission('set_cookies', <name>, <options>)

ध्यान दें: यह तय करता है कि किसी दिए गए 'Set-Cookie' हेडर को रिस्पॉन्स में जोड़ा जा सकता है या नहीं. यह कुकी के नाम, डोमेन, पाथ, secure एट्रिब्यूट, और समयसीमा के आधार पर तय होता है.

कोड का उदाहरण

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

डिसप्ले नेम: Google Tag Manager, ज़रूरत के हिसाब से बनाई गई निजी कुंजियों का इस्तेमाल करता है

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

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

इनके लिए ज़रूरी है: hmacSha256

क्वेरी का हस्ताक्षर: queryPermission('use_custom_private_keys', <key id>)

ध्यान दें: अनुमति वाली निजी कुंजियों की सूची को कंट्रोल करता है.

कोड का उदाहरण

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 ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करता है

जानकारी: Google एपीआई को कॉल करने के लिए, Google के डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करता है.

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

इसके लिए ज़रूरी है: getGoogleAuth

क्वेरी का हस्ताक्षर: queryPermission('use_google_credentials', <scopes>)

ध्यान दें: 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);
}