class_docstr: Salesforce StreamAlert Base App
  
  SalesforceApp will audit 5 types of event logs include 'Console', 'Login',
  'LoginAs', 'Report' and 'ReportExport' for user access audit and data loss
  prevention, although Salesforce provides 42 types of event logs.
  
  This base class will be inherited by different subclasssed based on different
  event types.
  
  Console events:
      contain information about the performance and use of Salesforce Consoles.
  
  Login events:
      contain details about your org's user login history.
  
  LoginAs events:
      contain details about what a Salesforce admin did while logged in as another user.
  
  Report events:
      contain information about what happened when a user ran a report and
      captures report's size.
  
  ReportExport:
      events contain details about reports that a user exported.
docstr: Request OAuth token from salesforce
  
  Meanwhile, it will also get instance url which will be used in future
  requests. The instance url identifies the Salesforce instance to which
  API calls should be sent.
  
  Returns:
      bool: Returns True if update auth headers and instance url successfully.
code: def _request_token(self):
      """Request OAuth token from salesforce
  
      Meanwhile, it will also get instance url which will be used in future
      requests. The instance url identifies the Salesforce instance to which
      API calls should be sent.
  
      Returns:
          bool: Returns True if update auth headers and instance url successfully.
      """
      headers = {"Content-Type": "application/x-www-form-urlencoded"}
      # required credentials when request for a token.
      data = {
          "grant_type": "password",
          "client_id": self._config.auth["client_id"],
          "client_secret": self._config.auth["client_secret"],
          "username": self._config.auth["username"],
          "password": "{}{}".format(
              self._config.auth["password"],
              self._config.auth["security_token"],
          ),
          "response_type": "code",
          "redirect_uri": self._SALESFORCE_TOKEN_URL,
      }
      success, response = self._make_post_request(
          self._SALESFORCE_TOKEN_URL, headers, data, False
      )
  
      if not (success and response):
          return False
  
      if not (
          response.get("access_token") and response.get("instance_url")
      ):
          LOGGER.error(
              "Response invalid generating headers for service '%s'",
              self._type(),
          )
          return False
  
      bearer = "Bearer {}".format(response.get("access_token"))
      self._auth_headers = {
          "Content-Type": "application/json",
          "Authorization": bearer,
      }
      self._instance_url = response.get("instance_url")
      LOGGER.debug("Successfully obtain OAuth token and instance URL")
      return True
  
imports: import calendar
  from datetime import datetime
  import re
  import time
  import backoff
  import requests
  from .None import AppIntegration, StreamAlertApp, get_logger
label_desc: Use image node_id 5 for calling the SalesforceApp obj's underlying member method code with example usage: obj._request_token() and returns: True, False, False