예제 #1
0
    def authenticate(self):
        """
        Authenticate to the Salesforce API with the provided credentials (password).
        """
        settings_dict = self.settings_dict
        url = ''.join([settings_dict['HOST'], '/services/oauth2/token'])

        log.info("attempting authentication to %s" % settings_dict['HOST'])
        self._session.mount(settings_dict['HOST'], HTTPAdapter(max_retries=get_max_retries()))
        response = self._session.post(url, data=dict(
            grant_type      = 'password',
            client_id       = settings_dict['CONSUMER_KEY'],
            client_secret   = settings_dict['CONSUMER_SECRET'],
            username        = settings_dict['USER'],
            password        = settings_dict['PASSWORD'],
        ))
        if response.status_code == 200:
            # prefer str in Python 2 due to other API
            response_data = {str(k): str(v) for k, v in response.json().items()}
            # Verify signature (not important for this auth mechanism)
            calc_signature = (base64.b64encode(hmac.new(
                    key=settings_dict['CONSUMER_SECRET'].encode('ascii'),
                    msg=(response_data['id'] + response_data['issued_at']).encode('ascii'),
                    digestmod=hashlib.sha256).digest())).decode('ascii')
            if calc_signature == response_data['signature']:
                log.info("successfully authenticated %s" % settings_dict['USER'])
            else:
                raise IntegrityError('Invalid auth signature received')
        else:
            raise LookupError("oauth failed: %s: %s" % (settings_dict['USER'], response.text))
        return response_data
예제 #2
0
 def make_session(self):
     """Authenticate and get the name of assigned SFDC data server"""
     with connect_lock:
         if self._sf_session is None:
             sf_session = requests.Session()
             # TODO configurable class Salesforce***Auth
             sf_session.auth = SalesforcePasswordAuth(db_alias=self.alias,
                                                      settings_dict=self.settings_dict)
             sf_instance_url = sf_session.auth.instance_url
             sf_requests_adapter = HTTPAdapter(max_retries=get_max_retries())
             sf_session.mount(sf_instance_url, sf_requests_adapter)
             # Additional header works, but the improvement is immeasurable for
             # me. (less than SF speed fluctuation)
             # sf_session.header = {'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive'}
             self._sf_session = sf_session
예제 #3
0
 def make_session(self):
     """Authenticate and get the name of assigned SFDC data server"""
     with connect_lock:
         if self._sf_session is None:
             sf_session = requests.Session()
             # TODO configurable class Salesforce***Auth
             sf_session.auth = SalesforcePasswordAuth(db_alias=self.alias,
                                                      settings_dict=self.settings_dict)
             sf_instance_url = sf_session.auth.instance_url
             sf_requests_adapter = HTTPAdapter(max_retries=get_max_retries())
             sf_session.mount(sf_instance_url, sf_requests_adapter)
             # Additional header works, but the improvement is immeasurable for
             # me. (less than SF speed fluctuation)
             # sf_session.header = {'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive'}
             self._sf_session = sf_session
예제 #4
0
    def authenticate(self):
        """
        Authenticate to the Salesforce API with the provided credentials (password).
        """
        settings_dict = self.settings_dict
        url = ''.join([settings_dict['HOST'], '/services/oauth2/token'])

        log.info("attempting authentication to %s" % settings_dict['HOST'])
        self._session.mount(settings_dict['HOST'],
                            HTTPAdapter(max_retries=get_max_retries()))
        response = self._session.post(
            url,
            data=dict(
                grant_type='password',
                client_id=settings_dict['CONSUMER_KEY'],
                client_secret=settings_dict['CONSUMER_SECRET'],
                username=settings_dict['USER'],
                password=settings_dict['PASSWORD'],
            ))
        if response.status_code == 200:
            # prefer str in Python 2 due to other API
            response_data = {
                str(k): str(v)
                for k, v in response.json().items()
            }
            # Verify signature (not important for this auth mechanism)
            calc_signature = (base64.b64encode(
                hmac.new(key=settings_dict['CONSUMER_SECRET'].encode('ascii'),
                         msg=(response_data['id'] +
                              response_data['issued_at']).encode('ascii'),
                         digestmod=hashlib.sha256).digest())).decode('ascii')
            if calc_signature == response_data['signature']:
                log.info("successfully authenticated %s" %
                         settings_dict['USER'])
            else:
                raise IntegrityError('Invalid auth signature received')
        else:
            raise LookupError("oauth failed: %s: %s" %
                              (settings_dict['USER'], response.text))
        return response_data