'api.sparkpost.com', 'protocol' => 'https', 'port' => 443, 'strictSSL' => true, 'key' => '', 'version' => 'v1', ]; /** * Sets up httpAdapter and config. * * Sets up instances of sub libraries. * * @param \Ivory\HttpAdapter\HttpAdapterInterface $httpAdapter - An adapter for making http requests * @param string | array $settingsConfig - Hashmap that contains config values * for the SDK to connect to SparkPost. If its a string we assume that * its just they API Key. */ public function __construct($httpAdapter, $settingsConfig) { //config needs to be setup before adapter because of default adapter settings $this->setConfig($settingsConfig); $this->setHttpAdapter($httpAdapter); $this->transmission = new Transmission($this); $this->messageEvents = new MessageEvents($this); } /** * Creates an unwrapped api interface for endpoints that aren't yet supported. * The new resource is attached to this object as well as returned. * * @param string $endpoint * * @return APIResource - the unwrapped resource */ public function setupUnwrapped($endpoint) { $this->{$endpoint} = new APIResource($this); $this->{$endpoint}->endpoint = $endpoint; return $this->{$endpoint}; } /** * Merges passed in headers with default headers for http requests. */ public function getHttpHeaders() { $defaultOptions = [ 'Authorization' => $this->config['key'], 'Content-Type' => 'application/json', ]; return $defaultOptions; } /** * Helper function for getting the configuration for http requests. * * @param array $config * * @return Configuration */ private function getHttpConfig($config) { // create Configuration for http adapter $httpConfig = new Configuration(); $baseUrl = $config['protocol'].'://'.$config['host'].($config['port'] ? ':'.$config['port'] : '').'/api/'.$config['version']; $httpConfig->setBaseUri($baseUrl); $httpConfig->setUserAgent('php-sparkpost/'.$this->version); return $httpConfig; } /** * Validates and sets up the httpAdapter. * * @param $httpAdapter \Ivory\HttpAdapter\HttpAdapterInterface to make requests through. * * @throws \Exception */ public function setHttpAdapter(HttpAdapterInterface $httpAdapter) { $this->httpAdapter = $httpAdapter; $this->httpAdapter->setConfiguration($this->getHttpConfig($this->config)); } /** * Allows the user to pass in values to override the defaults and set their API key. * * @param string | array $settingsConfig - Hashmap that contains config values * for the SDK to connect to SparkPost. If its a string we assume that * its just they API Key. * * @throws \Exception */ public function setConfig($settingsConfig) { // if the config map is a string we should assume that its an api key if (is_string($settingsConfig)) { $settingsConfig = ['key' => $settingsConfig]; } // Validate API key because its required if (!isset($settingsConfig['key']) || !preg_match('/\S/', $settingsConfig['key'])) { throw new \Exception('You must provide an API key'); } $this->config = self::$apiDefaults; // set config, overriding defaults foreach ($settingsConfig as $configOption => $configValue) { if (key_exists($configOption, $this->config)) { $this->config[$configOption] = $configValue; } } } }