public static function processAuthenticationCode($code, $options = [])
 {
     $repository = new TokenRepository();
     $base_uri = 'https://' . SalesforceConfig::get('salesforce.api.domain') . SalesforceConfig::get('salesforce.api.base_uri');
     $oauth2Client = new Oauth2Client(array_replace(['base_uri' => $base_uri], $options));
     $authorization_config = ['code' => $code, 'client_id' => SalesforceConfig::get('salesforce.oauth.consumer_token'), 'client_secret' => SalesforceConfig::get('salesforce.oauth.consumer_secret'), 'redirect_uri' => SalesforceConfig::get('salesforce.oauth.callback_url'), 'token_url' => 'https://' . SalesforceConfig::get('salesforce.oauth.domain') . SalesforceConfig::get('salesforce.oauth.token_uri'), 'auth_location' => 'body'];
     $oauth2Client->setGrantType(new AuthorizationCode($authorization_config));
     $refresh_token = '';
     if ($refresh_token) {
         $refresh_config = ['refresh_token' => $refresh_token, 'client_id' => SalesforceConfig::get('salesforce.oauth.consumer_token'), 'client_secret' => SalesforceConfig::get('salesforce.oauth.consumer_secret')];
         $oauth2Client->setRefreshTokenGrantType(new RefreshToken($refresh_config));
     }
     $access_token = $oauth2Client->getAccessToken();
     $repository->store->setTokenRecord($access_token);
     return 'Token record set successfully';
 }
 /**
  * Bootstrap the application services.
  *
  * @return void
  */
 public function boot()
 {
     // Publish your migrations
     $this->publishes([__DIR__ . '/../../migrations/salesforce.php' => base_path('/database/migrations/2015_09_18_141101_create_salesforce_tokens_table.php')], 'migrations');
     //publish config
     $this->publishes([__DIR__ . '/../../config/salesforce.php' => config_path('salesforce.php')], 'config');
     //merge default config if values were removed or never published
     $this->mergeConfigFrom(__DIR__ . '/../../config/salesforce.php', 'salesforce');
     //set custom package views folder
     $this->loadViewsFrom(__DIR__ . '/../../resources/views', 'salesforce');
     //set custom routes for admin pages
     if (SalesforceConfig::get('salesforce.enable_oauth_routes')) {
         if (!$this->app->routesAreCached()) {
             require __DIR__ . '/../../http/routes.php';
         }
     }
 }
 public function setTokenRecord(AccessToken $token, $user_id = null)
 {
     if (is_null($user_id)) {
         $user_id = SalesforceConfig::get('salesforce.storage_global_user_id');
         if (is_null($user_id)) {
             if (class_exists('\\Auth') && ($user = \Auth::user())) {
                 $user_id = $user->id;
             } else {
                 $user_id = 0;
             }
         }
     }
     $record = SalesforceToken::findByUserId($user_id)->first();
     if (!$record) {
         $record = new SalesforceToken();
         $record->user_id = $user_id;
     }
     $token_data = $token->getData();
     $record->access_token = $token->getToken();
     $record->refresh_token = $token->getRefreshToken()->getToken();
     $record->instance_base_url = $token_data['instance_url'];
     $record->save();
     return $record;
 }
 protected function updateAccessToken($current_access_token)
 {
     if ($current_access_token != SalesforceConfig::get('salesforce.oauth.access_token')) {
         $this->repository->store->setAccessToken($current_access_token);
         SalesforceConfig::set('salesforce.oauth.access_token', $current_access_token);
     }
 }
 /**
  * @param array $config
  *
  * @return TokenRepositoryInterface
  */
 public function setStore($config = [])
 {
     $store_name = SalesforceConfig::get('salesforce.storage_type');
     return $this->{'create' . ucfirst($store_name) . 'Driver'}($config);
 }
 /**
  * @param $jobId
  * @param BinaryBatch $binaryBatch
  *
  * @return BulkBatchResponse
  */
 public function addBinaryBatch($jobId, BinaryBatch $binaryBatch, $contentType = 'zip/csv')
 {
     if (!$jobId) {
         //throw exception
         return new BulkBatchResponse();
     }
     $binaryBatch->prepareBatchFile();
     $url = '/services/async/' . SalesforceConfig::get('salesforce.api.version') . '/job/' . $jobId . '/batch';
     $body = file_get_contents($binaryBatch->batchZip);
     $headers = ['Content-type' => $contentType];
     $result = $this->call_api('post', $url, ['body' => $body, 'headers' => $headers, 'format' => $this->batchResponseFormatFromContentType($contentType)]);
     if ($result && is_array($result)) {
         return new BulkBatchResponse($result);
     }
     return new BulkBatchResponse();
 }