diff --git a/catalyst/api-bundle/Command/TestCommand.php b/catalyst/api-bundle/Command/TestCommand.php new file mode 100644 index 00000000..18ea68f4 --- /dev/null +++ b/catalyst/api-bundle/Command/TestCommand.php @@ -0,0 +1,40 @@ +setName('api:test-connector') + ->setDescription('Test API connector.') + ->setHelp('Test API Connector.') + ->addArgument('protocol', InputArgument::REQUIRED, 'protocol') + ->addArgument('server', InputArgument::REQUIRED, 'server') + ->addArgument('api_key', InputArgument::REQUIRED, 'api_key') + ->addArgument('secret_key', InputArgument::REQUIRED, 'secret_key'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $protocol = $input->getArgument('protocol'); + $server = $input->getArgument('server'); + $api_key = $input->getArgument('api_key'); + $secret_key = $input->getArgument('secret_key'); + + $api = new APIClient($server, $api_key, $secret_key); + $api->setProtocol($protocol); + + $api->get('/capi/test'); + } +} diff --git a/catalyst/api-bundle/Connector/Client.php b/catalyst/api-bundle/Connector/Client.php new file mode 100644 index 00000000..259d72d8 --- /dev/null +++ b/catalyst/api-bundle/Connector/Client.php @@ -0,0 +1,109 @@ +protocol = 'https'; + $this->port = null; + + $this->server = $server; + $this->api_key = $api_key; + $this->secret_key = $secret_key; + $this->curl = curl_init(); + } + + public function __destruct() + { + curl_close($this->curl); + } + + public function setProtocol($protocol) + { + if ($protocol != 'http' && $protocol != 'https') + return $this; + + $this->protocol = $protocol; + return $this; + } + + public function get($url, $params = []) + { + $date = new DateTime(); + $date_string = $date->format(self::DATE_FORMAT); + + $headers = $this->generateHeaders('GET', $url, $date_string); + + // build url + if ($this->port == null) + $full_url = $this->protocol . '://' . $this->server . $url; + else + $full_url = $this->protocol . '://' . $this->server . ':' . $this->port . $url; + + error_log($full_url); + + // curl + curl_setopt($this->curl, CURLOPT_VERBOSE, true); + curl_setopt($this->curl, CURLOPT_URL, $full_url); + curl_setopt($this->curl, CURLOPT_HTTPHEADER, $headers); + curl_setopt($this->curl, CURLOPT_USERAGENT, self::USER_AGENT); + curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($this->curl, CURLOPT_TIMEOUT, 0); + + $res = curl_exec($this->curl); + error_log($res); + } + + public function post($params) + { + } + + protected function generateSignature($method, $url, $date_string) + { + $creds = [ + $method, + $url, + $date_string, + $this->secret_key, + ]; + $sig_source = implode('|', $creds); + + $raw_sig = hash_hmac('sha1', $sig_source, $this->secret_key, true); + $enc_sig = base64_encode($raw_sig); + + return $enc_sig; + } + + protected function generateHeaders($method, $url, $date_string) + { + $sig = $this->generateSignature($method, $url, $date_string); + + $headers = [ + self::HEADER_API_KEY . ': ' . $this->api_key, + self::HEADER_SIGNATURE . ': ' . $sig, + self::HEADER_DATE . ': ' . $date_string, + ]; + + return $headers; + } +} diff --git a/catalyst/api-bundle/Security/APIKeyAuthenticator.php b/catalyst/api-bundle/Security/APIKeyAuthenticator.php index a21c2ac6..bb3e4c14 100644 --- a/catalyst/api-bundle/Security/APIKeyAuthenticator.php +++ b/catalyst/api-bundle/Security/APIKeyAuthenticator.php @@ -35,11 +35,6 @@ class APIKeyAuthenticator implements SimplePreAuthenticatorInterface, Authentica $this->em = $em; } - protected function getSecretKey($api_key) - { - return 'sldkfjlksdjflksdjflksdjflsjf'; - } - protected function validateSignature($creds, $secret_key) { $elements = [ diff --git a/config/services.yaml b/config/services.yaml index 309d2129..00d35755 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -87,4 +87,8 @@ services: Catalyst\APIBundle\Command\UserCreateCommand: arguments: $em: "@doctrine.orm.entity_manager" - tags: ['console.command'] + tags: ['console.command'] + + Catalyst\APIBundle\Command\TestCommand: + tags: ['console.command'] +