/** * Constructor * * @param OAuth\Consumer $consumer * @param string $url * @param string $method * @param array $params */ public function __construct($consumer, $url, $method, $params = array()) { $this->_consumer = $consumer; $this->_method = $method; //normalize the uri: remove the query params //and store them alonside the oauth and user params $this->_uri = new \MediaCore\Uri($url); $this->_unencodedQueryParams = $this->_uri->getQueryAsArray(true); $this->_uri->setQuery(''); $this->_params = $params; }
protected function constructRedirectUri($uri = null, array $query = array()) { $uri = new Uri($uri); if (!empty($query)) { $query = $uri->getQueryAsArray() + $query; $uri->setQuery($query); } return $uri; }
/** * @param $method * @param $uri * @param array $options * @param null|bool|\Closure $successCallback * @param null|bool|\Closure $failCallback * * @return bool|null|\StdClass * @throws Exception */ public function request($method, $uri, $options = [], $successCallback = null, $failCallback = null) { if (!$successCallback && !$failCallback) { $json = null; // If there's no callbacks defined we assume this is a RESTful request Logger::getInstance()->debug($method . ' ' . $uri . ' ' . json_encode($options)); $options = array_merge($this->defaultOptions, $options); $guzzle = new GuzzleHttp\Client(['base_uri' => self::BASE_URL_REST]); $res = $guzzle->request($method, $uri, $options); if ($res->getHeader('content-type')[0] == 'application/json') { $contents = $res->getBody()->getContents(); Logger::getInstance()->debug($contents); $json = json_decode($contents); } else { throw new Exception("Server did not send JSON. Response was \"{$res->getBody()->getContents()}\""); } return $json; } else { // Use the STREAM API end point $Uri = new Uri(self::BASE_URL_STREAM); $Uri->setUserInfo($this->defaultOptions['auth'][0] . ':' . $this->defaultOptions['auth'][1]); $Uri->setPath($uri); if (isset($options['query'])) { $Uri->setQuery($options['query']); } $WSClient = new WebSocket\Client($Uri); Logger::getInstance()->debug($Uri); if (!$successCallback instanceof \Closure) { $successCallback = function ($response) { $info = json_decode($response); if (property_exists($info, 'output')) { Logger::getInstance()->info(json_decode($response)->output); } elseif ($info->type == 'error') { // output error info Logger::getInstance()->info($info->message); } }; } if (!$failCallback instanceof \Closure) { $failCallback = function (\Exception $exception) { Logger::getInstance()->info($exception->getMessage()); }; } try { while ($response = $WSClient->receive()) { $successCallback($response); } } catch (\Exception $e) { $failCallback($e); } return true; } }
/** * Get clear uri. * * @static * * @param \Zend\Uri\Uri $uri * * @return boolean|\Zend\Uri\Uri False if uri is not auhorized */ public static function clearUri(Uri $uri) { if ($uri->getScheme() !== 'http') { return false; } $uri->setHost('www.vimeo.com'); // clear $uri->setPort(0); $uri->setUserInfo(''); $uri->setQuery(''); $uri->setFragment(''); return $uri; }
/** * Get clear uri. * * @static * * @param \Zend\Uri\Uri $uri * * @return boolean|\Zend\Uri\Uri False if uri is not auhorized */ public static function clearUri(Uri $uri) { if ($uri->getScheme() !== 'http') { return false; } $query = $uri->getQueryAsArray(); if (empty($query['v'])) { return false; } $uri->setQuery(array('v' => $query['v'])); $uri->setHost('www.youtube.com'); $uri->setPath('/watch'); // clear $uri->setPort(0); $uri->setUserInfo(''); $uri->setFragment(''); return $uri; }
/** * Generates an URI representing the authorization request. * * @param Request $request * @return string */ public function createAuthorizationRequestUri(Request $request) { /* @var $clientInfo \InoOicClient\Client\ClientInfo */ $clientInfo = $request->getClientInfo(); if (!$clientInfo) { throw new \RuntimeException('Missing client info in request'); } if (($endpointUri = $clientInfo->getAuthorizationEndpoint()) === null) { throw new Exception\MissingEndpointException('No endpoint specified'); } $uri = new Uri($endpointUri); $params = array(Param::CLIENT_ID => $clientInfo->getClientId(), Param::REDIRECT_URI => $clientInfo->getRedirectUri(), Param::RESPONSE_TYPE => $this->arrayToSpaceDelimited($request->getResponseType()), Param::SCOPE => $this->arrayToSpaceDelimited($request->getScope()), Param::STATE => $request->getState()); foreach ($params as $name => $value) { if (in_array($name, $this->requiredParams) && empty($value)) { throw new Exception\MissingFieldException($name); } } $uri->setQuery($params); return $uri->toString(); }
/** * Test that we can use an array to set the query parameters * * @param array $data * @param string $expqs * @dataProvider queryParamsArrayProvider */ public function testSetQueryFromArray(array $data, $expqs) { $uri = new Uri(); $uri->setQuery($data); $this->assertEquals('?' . $expqs, $uri->toString()); }
/** * Execute geocoding * * @param Request $request * @return Response */ public function geocode(Request $request) { if (null === $request) { throw new Exception\InvalidArgumentException('request'); } $uri = new Uri(); $uri->setHost(self::GOOGLE_MAPS_APIS_URL); $uri->setPath(self::GOOGLE_GEOCODING_API_PATH); $urlParameters = $request->getUrlParameters(); if (null === $urlParameters) { throw new Exception\RuntimeException('Invalid URL parameters'); } $uri->setQuery($urlParameters); $client = $this->getHttpClient(); $client->setAdapter('Zend\\Http\\Client\\Adapter\\Curl'); $client->resetParameters(); $uri->setScheme("https"); $client->setUri($uri->toString()); $stream = $client->send(); $body = Json::decode($stream->getBody(), Json::TYPE_ARRAY); $hydrator = new ArraySerializable(); $response = new Response(); $response->setRawBody($body); if (!isset($body['status'])) { throw new Exception\RuntimeException('Invalid status'); } $response->setStatus($body['status']); if (!isset($body['results'])) { throw new Exception\RuntimeException('Invalid results'); } $resultSet = new ResultSet(); foreach ($body['results'] as $data) { $result = new Result(); $hydrator->hydrate($data, $result); $resultSet->addElement($result); } $response->setResults($resultSet); return $response; }
/** * Canonize URL with params, set `appkey` if not specified yet * * @param string|Uri $uri * @param array $params * * @return Uri */ protected function canonizeUrl($uri, array $params = array()) { if (!$uri instanceof Uri) { $uri = new Uri($uri); } if (!isset($params['appkey'])) { $params['appkey'] = Pi::config('identifier'); } $params = array_merge($uri->getQueryAsArray(), $params); $uri->setQuery($params); return $uri; }
/** * Get clear uri. * * @static * * @param \Zend\Uri\Uri $uri * * @return boolean|\Zend\Uri\Uri False if uri is not auhorized */ public static function clearUri(Uri $uri) { if ($uri->getScheme() !== 'http') { return false; } $paths = explode('/', $uri->getPath()); $pathsCount = count($paths); if ($pathsCount < 2) { return false; } $type = $paths[$pathsCount - 2]; if (!in_array($type, self::$typesAuthorized)) { return false; } $uri->setHost('www.deezer.com'); // clear $uri->setPort(0); $uri->setUserInfo(''); $uri->setQuery(''); $uri->setFragment(''); return $uri; }
/** * Set the query string * * @param string|array $query * @return \Zend\Uri\Uri */ public function setQuery($query) { $this->uri->setQuery($query); return $this; }